博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
查看阻塞线程
阅读量:7122 次
发布时间:2019-06-28

本文共 1962 字,大约阅读时间需要 6 分钟。

USE master

go

/*

======= 死锁经常与正常阻塞混淆 ==========
死锁是无期限的等待和阻塞,所以数据库引擎会提前判断而自动进行处理。
而阻塞是当一个事务锁定了另一个事务需要的资源,第二个事务必须等待锁被释放。
默认情况下,SQL Server 事务不会超时(除非设置了 LOCK_TIMEOUT)。
所以表现为第二个事务被长久阻塞,而不是被死锁。故需要人为发现和处理。
======== 以下显示被长久阻塞的线程列表 ==========================
*/
SELECT
 DB_NAME(a.[dbid]) AS [所在的数据库],
 a.spid AS [等待资源的线程(被阻塞)],
 a.blocked AS 产生阻塞的线程,
 a.waittime AS 等待时间,
 a.waitresource AS 等待资源,
 a.[status] AS 线程状态,
 (SELECT [name] FROM sys.all_objects WHERE [object_id] = rt.[objectid]) AS [OBJ],
 rt.[text] AS 等待资源的语句
FROM sys.sysprocesses AS a
CROSS APPLY sys.dm_exec_sql_text(a.[sql_handle]) AS rt
WHERE a.blocked > 0  -- 被其他线程阻塞了
ORDER BY a.blocked,a.spid;
-- blocked:占用锁的进程(造成当前进程等待他释放锁)

/* ============ 锁定产生阻塞的源头 =======================
有时候产生阻塞的线程可能也是被其它线程阻塞了,所以造成了连锁反应。
这种情况下要找出源头,产生阻塞的源头线程。
以下两个条件同时成立时,即是源头线程,应该查明原因,紧急情况下用kill结束掉:
1.线程阻塞了其它线程。
2.该线程没有被任何其它线程阻塞。
*/

DECLARE @sp_id sysname;

SELECT @sp_id = spid FROM sys.sysprocesses
WHERE spid IN(
 SELECT DISTINCT blocked
 FROM sys.sysprocesses
 WHERE blocked > 0
) AND blocked = 0;

SELECT

 DB_NAME(a.[dbid]) AS 所在数据库,
 @sp_id AS [产生阻塞原因的spid],
 (SELECT [name] FROM sys.all_objects WHERE [object_id] = rt.[objectid]) AS [OBJ],
 rt.[text] AS [产生阻塞的相关语句]
FROM sys.sysprocesses a
CROSS APPLY sys.dm_exec_sql_text(a.[sql_handle]) AS rt
WHERE a.spid = @sp_id;

-- kill 78

/* ==============================================================

线程状态为suspended(挂起),并不代表产生了阻塞,必须blocked>0

这说明本身线程所涉及到的语句比较复杂,需要优化,或者需要创建索引。
SELECT
 DB_NAME(a.[dbid]) AS 存在阻塞所在的数据库,
 a.spid AS 被阻塞的线程,
 a.blocked AS 产生阻塞的线程,
 a.waittime AS 等待时间,
 a.waitresource AS 等待资源,
 a.[status] AS 线程状态,
 (SELECT [name] FROM sys.all_objects WHERE [object_id] = rt.[objectid]) AS [OBJ],
 rt.[text] AS 被阻塞的语句
FROM sys.sysprocesses AS a
CROSS APPLY sys.dm_exec_sql_text(a.[sql_handle]) AS rt
WHERE a.[status] = 'suspended' -- 延缓;暂停
ORDER BY a.blocked,a.spid;
================================================================== */

转载于:https://www.cnblogs.com/fanchaoyun/p/3328495.html

你可能感兴趣的文章
【2018.06.06学习笔记】【linux高级知识 12.1-12.5】
查看>>
阿里云全站加速DCDN全面支持WebSocket协议
查看>>
Kafka实战:如何把Kafka消息时延秒降10倍
查看>>
大数据之Linux早课9.12
查看>>
116.k8s介绍、k8s搭建一个应用(mysql+tomcat)
查看>>
iostat-iotop-free-ps-netstat-tcpdump
查看>>
b2b b2c o2o分布式电子商务平台源码 Spring MVC+mybatis+spring cloud
查看>>
解决网站首页老是被篡改经常反复被篡改跳转的问题
查看>>
别人的双11 & 程序员的双11~
查看>>
使用EHPC实现“完美并行”的高效批处理方案
查看>>
jQuery选择器
查看>>
Amazon Alexa 新里程碑: 50000 个功能、 20000 种设备、 3500 个品牌
查看>>
Java 中初始化 List 集合的 6 种方式!
查看>>
黑少微服务商店之Iron Cloud微服务开发云
查看>>
SandboxEscaper又爆出严重零时差漏洞
查看>>
vim Settings
查看>>
Android开发书籍推荐
查看>>
如何在让iis支持aspx?
查看>>
Web服务器的工作原理
查看>>
linux 下 用phpmailer类smtp发送邮件始终不成功
查看>>