
拓狼
-
个人空间
- 组别:管理员
- 性别:
- 来自:北京 海淀
- 积分:1121
- 帖子:619
- 注册:
2007-05-23
|
用扩展事件捕获阻塞
用扩展事件捕获阻塞--王成辉整理,转贴请注明出自微软BI开拓者 www.windbi.com创建扩展事件 CREATE EVENT SESSION FindBlockers ON SERVERADD EVENT sqlserver.lock_acquired (action ( sqlserver.sql_text, sqlserver.database_id, sqlserver.tsql_stack, sqlserver.plan_handle, sqlserver.session_id,sqlserver.username,sqlserver.client_app_name) WHERE ( resource_0!=0) ),ADD EVENT sqlserver.lock_released (WHERE ( resource_0!=0 ))ADD TARGET package0.pair_matching ( SET begin_event='sqlserver.lock_acquired', begin_matching_columns='database_id, resource_0, resource_1, resource_2, transaction_id, mode', end_event='sqlserver.lock_released', end_matching_columns='database_id, resource_0, resource_1, resource_2, transaction_id, mode', respond_to_memory_pressure=1)WITH (max_dispatch_latency = 1 seconds)启动会话 ALTER EVENT SESSION FindBlockers ON SERVERSTATE = START停止会话 ALTER EVENT SESSION FindBlockers ON SERVERSTATE = STop删除 drop EVENT SESSION FindBlockers ON SERVER从扩展事件中提取需要的数据 drop table #unmatched_locks SELECT objlocks.value('(action/value)[5]', 'int') AS session_id, objlocks.value('(data/value)[5]', 'int') AS database_id, objlocks.value('(data/text)[1]', 'nvarchar(50)' ) AS resource_type, objlocks.value('(data/value)[9]', 'bigint') AS resource_0, objlocks.value('(data/value)[10]', 'bigint') AS resource_1, objlocks.value('(data/value)[11]', 'bigint') AS resource_2, objlocks.value('(data/text)[2]', 'nvarchar(50)') AS mode, objlocks.value('(action/value)[1]', 'varchar(MAX)') AS sql_text, CAST(objlocks.value('(action/value)[4]', 'varchar(MAX)') AS xml) AS plan_handle, CAST(objlocks.value('(action/value)[3]', 'varchar(MAX)') AS xml) AS tsql_stack, objlocks.value('(action/value)[6]', 'varchar(100)') AS username, objlocks.value('(action/value)[7]', 'varchar(100)') AS application_name INTO #unmatched_locksFROM ( SELECT CAST(xest.target_data as xml) lockinfo FROM sys.dm_xe_session_targets xest JOIN sys.dm_xe_sessions xes ON xes.address = xest.event_session_address WHERE xest.target_name = 'pair_matching' AND xes.name = 'FindBlockers') heldlocksCROSS APPLY lockinfo.nodes('//event[@name="lock_acquired"]') AS T(objlocks) SELECT distinct blocking_session_id,d.database_id,d.resource_type,object_name(d.resource_0,d.database_id) as objectname1,d.mode,d.sql_text,d.username,d.application_name,a.start_time,a.session_id, --e.mode,e.username as username2,e.application_name as application_name2,e.sql_text as sql_text2,object_name(e.resource_0,e.database_id) as objectname2 FROM sys.dm_exec_requests a cross apply (SELECT b.* FROM #unmatched_locks b where a.blocking_session_id=b.session_id) dcross apply (SELECT c.* FROM #unmatched_locks c where a.session_id=c.session_id) eWHERE blocking_session_id != 0 and d.resource_type='object'and d.resource_0=e.resource_0
虽有智慧,不如乘势;虽有鎡基,不如待时。 君子学以聚之,问以辨之,宽以居之,仁以行之。 独学而无友,则孤陋而寡闻。
|