SQL Server进程阻塞的检查和解决办法
《SQL Server进程阻塞的检查和解决办法》由会员分享,可在线阅读,更多相关《SQL Server进程阻塞的检查和解决办法(3页珍藏版)》请在装配图网上搜索。
1、create procedure sp_who_lock as begin declare spid int,bl int, intTransactionCountOnEntry int, intRowcount int, intCountProperties int, intCounter int create table #tmp_lock_who ( id int identity(1,1), spid smallint, bl smallint)IF ERROR0 RETURN ERROR insert into #tmp_lock_who(spid,bl) select 0 ,blo
2、cked from (select * from sysprocesses where blocked0 ) a where not exists(select * from (select * from sysprocesses where blocked0 ) b where a.blocked=spid)union select spid,blocked from sysprocesses where blocked0IF ERROR0 RETURN ERROR- 找到临时表的记录数select intCountProperties = Count(*),intCounter = 1 f
3、rom #tmp_lock_whoIF ERROR0 RETURN ERROR if intCountProperties=0 select 现在没有阻塞信息 as message- 循环开始while intCounter = intCountProperties begin- 取第一条记录 select spid = spid,bl = bl from #tmp_lock_who where Id = intCounter beginif spid =0select 引起数据库阻塞的是:+ CAST(bl AS VARCHAR(IO) + 进程号,其执行的SQL 语法如下elseselec
4、t 进程号 SPID:+ CAST(spid AS VARCHAR(10)+ 被 + 进程号 SPID:+ CAST(bl AS VARCHAR(IO) +阻塞,其当前进程执行的SQL语法如下DBCC INPUTBUFFER (bl ) end- 循环指针下移set intCounter = intCounter + 1end drop table #tmp_lock_whoreturn 0endGO-结束 SQL 阻塞的进程% create procedure sp_Kill_lockProcessasbeginSET NOCOUNT ONdeclare spid int,bl int,in
5、tTransactionCountOnEntry int,intRowcount int,intCountProperties int,intCounter int,sSql nvarchar (200)create table #tmp_lock_who (id int identity(1,1),spid smallint,bl smallint)IF ERROR0 RETURN ERRORinsert into #tmp_lock_who(spid,bl)select 0 ,blockedfrom(select * from sysprocesses where blocked0 ) a
6、where not exists(select * from (select * from sysprocesses where blocked0 ) bwhere a.blocked=spid)union select spid,blocked from sysprocesses where blocked0IF ERROR0 RETURN ERROR- 找到临时表的记录数select intCountProperties = Count(*),intCounter = 1from #tmp_lock_whoIF ERROR0 RETURN ERRORwhile intCounter = i
7、ntCountPropertiesbegin- 取第一条记录select spid = spid,bl = blfrom #tmp_lock_who where Id = intCounterbeginif spid =0beginset sSql=kill + CAST(bl AS VARCHAR(10)exec sp_executesql sSqlendend- 循环指针下移set intCounter = intCounter + 1enddrop table #tmp_lock_whoSET NOCOUNT OFFreturn 0endGO 查看锁信息如何查看系统中所有锁的详细信息?在
8、企业管理管理器中,我们可以看到一些进程和锁 的信息,这里介绍另外一种方法。-查看锁信息create table #t(req_spid int,obj_name sysname)declare s nvarchar(4000),rid int,dbname sysname,id int,objname sysname declare tb cursor forselect distinct req_spid,dbname=db_name(rsc_dbid),rsc_objidfrom master.syslockinfo where rsc_type in(4,5)open tbfetch n
9、ext from tb into rid,dbname,idwhile fetch_status=0beginset s=select objname=name from +dbname+.sysobjects whereid=id exec sp_executesql s,Nobjname sysname out,id int,objname out,id insert into #t values(rid,objname)fetch next from tb into rid,dbname,idendclose tb deallocate tb select 进程 id=a.req_spi
10、d,数据库=db_name(rsc_dbid),类型=case rsc_type when 1 then NULL 资源(未使用)when 2 then 数据库when 3 then 文件when 4 then 索引when 5 then 表when 6 then 页when 7 then 键when 8 then 扩展盘区when 9 then RID(行 ID)when 10 then 应用程序end,对象 id=rsc_objid,对象名=b.obj_name,rsc_indidfrom master.syslockinfo a left join #t b on a.req_spid=b.req_spid godrop table #t
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。