6 sql-server sql-server-2005 sql-server-2008 sql-server-2008-r2 sql-server-2012
我有一台仓库服务器从旧系统24/7获取数据/同步,我注意到我的某些报表/ SQL作业性能不确定,而且大多数时候我从DBA团队那里得知我的查询正在阻止其他同步过程。
从DBA团队了解到命令EXEC SP_WHO2,通过查看列BlkBy,我可以通过该命令识别导致阻塞的查询的spid。
请建议我我如何才能避免堵塞等方式,检查阻塞在SQL服务器
小智 6
除了Sp_Who2之外,您还可以使用以下查询来识别SQL中的阻塞。
SELECT
db.name DBName,
tl.request_session_id,
wt.blocking_session_id,
OBJECT_NAME(p.OBJECT_ID) BlockedObjectName,
tl.resource_type,
h1.TEXT AS RequestingText,
h2.TEXT AS BlockingTest,
tl.request_mode
FROM sys.dm_tran_locks AS tl
INNER JOIN sys.databases db ON db.database_id = tl.resource_database_id
INNER JOIN sys.dm_os_waiting_tasks AS wt ON tl.lock_owner_address = wt.resource_address
INNER JOIN sys.partitions AS p ON p.hobt_id = tl.resource_associated_entity_id
INNER JOIN sys.dm_exec_connections ec1 ON ec1.session_id = tl.request_session_id
INNER JOIN sys.dm_exec_connections ec2 ON ec2.session_id = wt.blocking_session_id
CROSS APPLY sys.dm_exec_sql_text(ec1.most_recent_sql_handle) AS h1
CROSS APPLY sys.dm_exec_sql_text(ec2.most_recent_sql_handle) AS h2
GO
Run Code Online (Sandbox Code Playgroud)
也可以使用以下命令检查特定SPID的详细信息。
DBCC INPUTBUFFER(56) — Will give you the Event Info.
KILL 56 -- Will kill the session of this id.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22513 次 |
| 最近记录: |