Вопрос о расширенных событиях - lock_acquired и lock_released - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать сеанс EE, который будет отслеживать события lock_acquired и lock_released для указанного c объекта

Вот определение сеанса EE

CREATE EVENT SESSION [Получены блокировки] ВКЛ СЕРВЕР ДОБАВИТЬ СОБЫТИЕ sqlserver.lock_acquired (SET collect_database_name = (1), collect_resource_description = (1) ACTION (sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.database_name, sqlserver.nt_username, sqlserver.chaery 10, sqlserver.query_ha 10 , sqlserver.session_id, sqlserver.session_nt_username, sqlserver.sql_text, sqlserver.transaction_id, sqlserver.username) WHERE ([sqlserver] .equal_i_sql_unicode_string AND ([connected_object_id] [связанный_ID_объекта] = 72035] ] = (72057594043236352.)))), ДОБАВИТЬ СОБЫТИЕ sqlserver.lock_released (УСТАНОВИТЬ collect_database_name = (1), collect_resource_description = (1) ACTION (sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.client_app_name, sqlserver.client_hostname, sqlserver.SQLserver.database_name, sqlserver.database_name_ sqlserver a sh, sqlserver.query_plan_ha sh, sqlserver.session_id, sqlserver.session_nt_username, sqlserver.sql_text, sqlserver.transaction_id, sqlserver.username) ГДЕ ([sqlserver]. (идентификатор_sqlserver]. [associated_object_id] = (72057594043236352.) OR [associated_object_id] = (72057594043236352.)))) ADD TARGET package0.event_file (SET filename = N 'C: \ Получены блокировки на \ Locks.xel')

Это будет отслеживать любую полученную и разблокированную блокировку для connected_object_id = 597577167 (это object_id указанного c объекта, если заблокированный ресурс является объектом, мы получим associated_object_id = 597577167)

и для [associated_object_id] = ( 72057594043236352.) (Если заблокированным ресурсом является PAGE или KEY, мы получим [associated_object_id] = (72057594043236352), 72057594043236352 - это идентификатор раздела объекта 597577167 (для этого объекта есть только один раздел))

Это отлично работает, Я попытался проверить это, у меня есть эта таблица c с i d 597577167 есть только одна строка, я инициировал открытую транзакцию для этой таблицы

begin tran update "table" set col1 = 1

Ok - у меня есть события lock_acquired для этого объекта, страница , rid

Я оставил это на три минуты, затем у меня есть откат этой транзакции, и у меня есть события lock_released для объекта, page, rid

Но, несмотря на три минуты блокировок, lock_released события показывают мне продолжительность - 0

Почему это произошло? Я ожидал времени продолжительности блокировки между получением и снятием блокировки, но я вижу только ноль для продолжительности для этого события или для любых других событий блокировки

Кто-нибудь сталкивался с этим?

...