如何找到我的 SP 的阻塞会话 ID
How to find blocking session ID for my SP
我有一个 SP 在晚上运行,有时无法完成。我用来自动化运行的工具有一个选项,如果它没有完成,它可以在一段时间后终止作业,即终止作业,例如一小时后。
无论如何,我认为它有时无法在最大分配时间内完成的原因是因为它被另一个会话 ID 阻止了。我如何查询 DMV 的查询文本并准确找出阻塞会话中的内容。
我有这个查询,我知道阻止会话 ID 和我的会话 ID。
SELECT TOP 100 w.session_id, w.wait_duration_ms, w.blocking_session_id, w.wait_type, e.database_id, D.name
FROM sys.dm_os_waiting_tasks w
LEFT JOIN sys.dm_exec_sessions e ON w.session_id = e.session_id
LEFT JOIN sys.databases d ON e.database_id = d.database_id
where w.session_id = x and w.blocking_session_id = y
order by w.wait_duration_ms desc
如何获取阻塞会话ID的内容(例如SP的名称)?
您可以下载并创建 sp_whoisactive 例程。它会让你清楚地了解现在发生的事情。
例如,创建一个table:
DROP TABLE IF EXISTS dbo.TEST;
CREATE TABLE dbo.TEST
(
[Column] INT
);
在一个会话中执行以下代码:
BEGIN TRAN;
INSERT INTO dbo.TEST
SELECT 1
-- commit tran
然后在第二个:
SELECT *
FROM dbo.TEST;
第三个,执行例程:
EXEC sp_Whoisactive
它会给你类似下面的东西:
您可以清楚地看到 SELECT
被打开事务的会话阻塞。
由于例程在特定时刻返回 activity,您可能希望将详细信息记录在 table 中并稍后进行分析。
如果您怀疑进程被阻塞或成为死锁牺牲品,创建仅收集这些事件的扩展事件会话会更合适。有很多关于如何完成此操作的示例,它 easy. It's good, because you can analyze the deadlock graph 更容易解决问题。
我有一个 SP 在晚上运行,有时无法完成。我用来自动化运行的工具有一个选项,如果它没有完成,它可以在一段时间后终止作业,即终止作业,例如一小时后。
无论如何,我认为它有时无法在最大分配时间内完成的原因是因为它被另一个会话 ID 阻止了。我如何查询 DMV 的查询文本并准确找出阻塞会话中的内容。
我有这个查询,我知道阻止会话 ID 和我的会话 ID。
SELECT TOP 100 w.session_id, w.wait_duration_ms, w.blocking_session_id, w.wait_type, e.database_id, D.name
FROM sys.dm_os_waiting_tasks w
LEFT JOIN sys.dm_exec_sessions e ON w.session_id = e.session_id
LEFT JOIN sys.databases d ON e.database_id = d.database_id
where w.session_id = x and w.blocking_session_id = y
order by w.wait_duration_ms desc
如何获取阻塞会话ID的内容(例如SP的名称)?
您可以下载并创建 sp_whoisactive 例程。它会让你清楚地了解现在发生的事情。
例如,创建一个table:
DROP TABLE IF EXISTS dbo.TEST;
CREATE TABLE dbo.TEST
(
[Column] INT
);
在一个会话中执行以下代码:
BEGIN TRAN;
INSERT INTO dbo.TEST
SELECT 1
-- commit tran
然后在第二个:
SELECT *
FROM dbo.TEST;
第三个,执行例程:
EXEC sp_Whoisactive
它会给你类似下面的东西:
您可以清楚地看到 SELECT
被打开事务的会话阻塞。
由于例程在特定时刻返回 activity,您可能希望将详细信息记录在 table 中并稍后进行分析。
如果您怀疑进程被阻塞或成为死锁牺牲品,创建仅收集这些事件的扩展事件会话会更合适。有很多关于如何完成此操作的示例,它 easy. It's good, because you can analyze the deadlock graph 更容易解决问题。