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

 更新时间:2024年02月21日 10:42:24   作者:DoveFeng  
这篇文章主要介绍了如何通过sysprocesses 简单查询死锁及解决死锁最新方案,本文分四步帮助大家成功解决,需要的朋友可以参考下

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

第一步:查询死锁语句

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查询死锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SqlServer触发器详解

    SqlServer触发器详解

    触发器是特殊的一个存储过程,在程序开发中经常会用到,触发器和存储过程唯一的区别就是触发器不能执行execute语句调用,而是在用户执行Transact-SQL语句时自动触发执行,下面小编给大家详解sqlserver触发器,需要的朋友可以参考下
    2015-08-08
  • 解决sql server 数据库,sa用户被锁定的问题

    解决sql server 数据库,sa用户被锁定的问题

    这篇文章主要介绍了解决sql server 数据库,sa用户被锁定的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 数据库备份 SQLServer的备份和灾难恢复

    数据库备份 SQLServer的备份和灾难恢复

    数据处理在现代企业运营中变得越来越重要,越来越关键,甚至会成为企业发展的一项瓶颈. 数据保护的重要性也不言而喻. 如果一个企业没有很好的数据保护方案或策略的话,一旦发生重要数据丢失,后果将会是灾难性的,伴随着会有经济利益方面的损失.
    2010-07-07
  • SQL Server中发送HTML格式邮件的方法

    SQL Server中发送HTML格式邮件的方法

    这篇文章主要介绍了SQL Server中发送HTML格式邮件的方法,需要的朋友可以参考下
    2014-10-10
  • sql集合运算符使用方法

    sql集合运算符使用方法

    今天介绍数据库里面的集合运算符,它是指匹配集合的每一个结果。数据库集合运算符包括:IN、ANY、SOME、ALL以及EXISTS等
    2014-01-01
  • SQL 实用语句

    SQL 实用语句

    以下的sql语句都以上面表mytable为准
    2009-06-06
  • 恢复.mdf 数据库步骤

    恢复.mdf 数据库步骤

    完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用数据库的脚本创建一个新的数据库,并将数据导进去就行了.
    2009-07-07
  • SqlServer 实用操作小技巧集合

    SqlServer 实用操作小技巧集合

    包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等.
    2009-10-10
  • Sql Server基本函数

    Sql Server基本函数

    Sql Server基本函数...
    2006-08-08
  • SQL Server 数据库基本操作语句总结

    SQL Server 数据库基本操作语句总结

    SQL Server 数据库基本操作语句总结,需要的朋友可以参考一下
    2013-05-05

最新评论