sqlserver的死锁及处理方法

sqlserver的死锁及处理方法

ID:35274020

大小:104.00 KB

页数:24页

时间:2019-03-22

sqlserver的死锁及处理方法_第1页
sqlserver的死锁及处理方法_第2页
sqlserver的死锁及处理方法_第3页
sqlserver的死锁及处理方法_第4页
sqlserver的死锁及处理方法_第5页
资源描述:

《sqlserver的死锁及处理方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、【转】处理sqlserver的死锁--第一篇--检测死锁--如果发生死锁了,我们怎么去检测具体发生死锁的是哪条SQL语句或存储过程?--这时我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。SQLServer自带的系统存储过程sp_who和sp_lock也可以用来查找阻塞和死锁,但没有这里介绍的方法好用。 usemastergocreateproceduresp_who_lockasbegindeclare@spidint,@blint, @intTransactionCountOnEntry int,  

2、     @intRowcount   int,       @intCountProperties  int,       @intCounter   int createtable#tmp_lock_who( idintidentity(1,1), spidsmallint, blsmallint)  IF@@ERROR<>0RETURN@@ERROR  insertinto#tmp_lock_who(spid,bl)select 0,blocked  from(select*fromsysprocesseswhere b

3、locked>0)a  wherenotexists(select*from(select*fromsysprocesseswhere blocked>0)b  wherea.blocked=spid)  unionselectspid,blockedfromsysprocesseswhere blocked>0 IF@@ERROR<>0RETURN@@ERROR --找到临时表的记录数 select @intCountProperties=Count(*),@intCounter=1 from#tmp_lock_who  I

4、F@@ERROR<>0RETURN@@ERROR  if@intCountProperties=0 select'现在没有阻塞和死锁信息'asmessage--循环开始while@intCounter<=@intCountPropertiesbegin--取第一条记录 select @spid=spid,@bl=bl from#tmp_lock_whowhereId=@intCounter begin if@spid=0           select'引起数据库死锁的是:'+CAST(@blASVARCHAR(10))+'

5、进程号,其执行的SQL语法如下' else           select'进程号SPID:'+CAST(@spidASVARCHAR(10))+'被'+'进程号SPID:'+CAST(@blASVARCHAR(10))+'阻塞,其当前进程执行的SQL语法如下' DBCCINPUTBUFFER(@bl) end--循环指针下移 set@intCounter=@intCounter+1enddroptable#tmp_lock_whoreturn0end --杀死锁和进程--如何去手动的杀死进程和锁?最简单的办法,重新启动服务

6、。但是这里要介绍一个存储过程,通过显式的调用,可以杀死进程和锁。usemastergoifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[p_killspid]')andOBJECTPROPERTY(id,N'IsProcedure')=1)dropprocedure[dbo].[p_killspid]GOcreateprocp_killspid@dbnamevarchar(200)   --要关闭进程的数据库名as    declare@sql nvarc

7、har(500)    declare@spidnvarchar(20)   declare#tbcursorfor       selectspid=cast(spidasvarchar(20))frommaster..sysprocesseswheredbid=db_id(@dbname)   open#tb   fetchnextfrom#tbinto@spid   while@@fetch_status=0   begin        exec('kill'+@spid)       fetchnextfrom#tb

8、into@spid   end    close#tb   deallocate#tbgo--用法 execp_killspid 'newdbpy' --查看锁信息--如何查看系统中所有锁的详细信息?在企业管理管理器中,我们可以看到一些进程和锁的信息,这里介绍另外一种方法。-

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。