如何通过sysprocesses 简单查询死锁及解决死锁最新方案(四步解决)

 更新时间:2024年02月21日 10:42:24   作者:DoveFeng  
这篇文章主要介绍了如何通过sysprocesses 简单查询死锁及解决死锁最新方案,本文分四步帮助大家成功解决,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

简单查询死锁,如下四步可以轻松解决: 

第一步:查询死锁语句

1: 条件是 blocked <> 0

select dbid,* from sys.sysprocesses
where 1=1
and spid >50
and blocked <> 0
--and spid= 62

查询结果如下图所示:

以上查询得出:

  • 受影响的数据库ID 是 5;
  • 受到阻塞的会话有1301、1306、869、109;
  • 阻塞会话是961;

第二步:查询发生阻塞或死锁的当前数据库

1:通过第一步查询,知道数据库ID 为 DBID=5。

2:sp_helpdb   或    Select name,dbid from master.sys.sysdatabases  查询数据库名称

第三步:查询发生阻塞或死锁的SQL语句

输出死锁的执行的语句:
dbcc inputbuffer(961)

语句如下:

select o.tp_Login,o.tp_Title, CONVERT(varchar(10),a.TimeCreated,120)  as accessingdate,count(*) as docnum, 'sps' as type  from UserData u,AllDocs a, userinfo o ,webs w where a.ListId = u.tp_ListId and a.Id = u.tp_docID  and w.Id = a.WebId and w.SiteId = a.SiteId and w.SiteId = o.tp_SiteID and..........以后省去

第四步:杀死锁

kill  961

之后再从第一步进行查询,看是否还存在死锁;

从第二步、第三步,查询出了出问题的锁死数据库及SQL语句,便于分析彻底解决死锁问题。

以下是sysprocesses 表中保存关于运行在 Microsoft® SQL Server™ 上的进程的信息。这些进程可以是客户端进程或系统进程。sysprocesses 只存储在master 数据库中。

列名数据类型描述
spidsmallintSQL Server 进程 ID。
kpidsmallintMicrosoft Windows NT 4.0® 线程 ID。
blockedsmallint分块进程的进程 ID (spid)。
waittypebinary(2)保留。
waittimeint当前等待时间(以毫秒为单位)。当进程不处于等待时,为 0。
lastwaittypenchar(32)表示上次或当前等待类型名称的字符串。
waitresourcenchar(32)锁资源的文本化表示法。
dbidsmallint当前正由进程使用的数据库 ID。
uidsmallint执行命令的用户 ID。
cpuint进程的累计 CPU 时间。无论 SET STATISTICS TIME ON 选项是 ON 还是 OFF,都为所有进程更新该条目。
physical_ioint进程的累计磁盘读取和写入。
memusageint当前分配给该进程的过程高速缓存中的页数。一个负数,表示进程正在释放由另一个进程分配的内存。
login_timedatetime客户端进程登录到服务器的时间。对于系统进程,是存储 SQL Server 启动发生的时间。
last_batchdatetime客户端进程上次执行远程存储过程调用或 EXECUTE 语句的时间。对于系统进程,是存储 SQL Server 启动发生的时间。
ecidsmallint用于唯一标识代表单个进程进行操作的子线程的执行上下文 ID。
open_transmallint进程的打开事务数。
statusnchar(30)进程 ID 状态(如运行、休眠等)。
sidbinary(85)用户的全局唯一标识符 (GUID)。
hostnamenchar(128)工作站的名称。
program_namenchar(128)应用程序的名称。
hostprocessnchar(8)工作站进程 ID 号。
cmdnchar(16)当前正在执行的命令。
nt_domainnchar(128)客户端的 Windows NT 4.0 域(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 域。
nt_usernamenchar(128)进程的 Windows NT 4.0用户名(如果使用 Windows 身份验证)或信任连接的 Windows NT 4.0 用户名。
net_addressnchar(12)指派给每个用户工作站上的网络接口卡唯一标识符。当用户登录时,该标识符插入 net_address 列。
net_librarynchar(12)用于存储客户端网络库的列。每个客户端进程都在网络连接上进入。网络连接有一个与这些进程关联的网络库,该网络库使得这些进程可以建立连接。有关更多信息,请参见客户端和服务器 Net-Library
loginamenchar(128)登录名。

到此这篇关于如何通过sysprocesses 简单查询死锁及解决死锁最新方案的文章就介绍到这了,更多相关sysprocesses查询死锁内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

最新评论

?


http://www.vxiaotou.com