0

我正在尝试创建 EE 会话,该会话将跟踪特定对象的 lock_acquired 和 lock_released 事件

这是EE会话的定义

CREATE EVENT SESSION [锁定获取] ON SERVER ADD EVENT 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.query_hash,sqlserver .query_plan_hash,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username) WHERE ([sqlserver].equal_i_sql_unicode_string AND ([associated_object_id]=(597577167.) OR [associated_object_id]=(72057594043236352.) OR [associated_object_id]=(72057594043236352.)))),添加事件 sqlserver.lock_released(SET collect_database_name=(1),collect_resource_description=(1) ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_name,sqlserver.nt_username,sqlserver。 query_hash,sqlserver.query_plan_hash,sqlserver.session_id,sqlserver.session_nt_username,sqlserver.sql_text,sqlserver.transaction_id,sqlserver.username) WHERE ([sqlserver].equal_i_sql_unicode_string AND ([associated_object_id]=(597577167.) OR [associated_object_id]=(72057594043236352.) OR [associated_object_id] =(72057594043236352.)))) ADD TARGET package0.event_file(SET filename=N'C:\Locks acquire on\Locks.xel')

这将跟踪为 associated_object_id = 597577167 获取和释放的任何锁(这是特定对象的 object_id,如果锁定的资源是对象,那么我们将得到 associated_object_id = 597577167)

对于 [associated_object_id]=(72057594043236352.) (如果锁定的资源是 PAGE 或 KEY 我们将得到 [related_object_id]=(72057594043236352) ,72057594043236352 是对象 597577167 的分区 id(此对象只有一个分区))

这很好用,我已经尝试过测试,我有这个 ID 为 597577167 的特定表只有一行,我已经为这个表启动了开放事务

开始 tran 更新“表”设置 col1 = 1

好的 - 我有这个对象的 lock_acquired 事件 ,page ,rid

我已经离开了三分钟,然后我回滚了这个事务,我得到了对象、页面、摆脱的 lock_released 事件

但是尽管锁定了三分钟,lock_released 事件显示我的持续时间 - 0

为什么会这样?我预计锁定获取和锁定释放之间的锁定持续时间,但我看到此事件或任何其他锁定事件的持续时间为零

有没有面对这个?

4

0 回答 0