`
sjk2013
  • 浏览: 2182417 次
文章分类
社区版块
存档分类
最新评论

查看sql server 2000阻塞死锁并处理 转

 
阅读更多
查看sql server 2000阻塞死锁并处理  

2011-02-06 16:28:25|  分类: SQL |字号 订阅
use master --必须在master数据库中创建
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_lockinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_lockinfo]
GO

 


create proc p_lockinfo
@kill_lock_spid bit=0,   --是否杀掉死锁的进程,1 杀掉, 0 仅显示
@show_spid_if_nolock bit=1 --如果没有死锁的进程,是否显示正常进程信息,1 显示,0 不显示
as
set nocount on
declare @count int,@s nvarchar(1000),@i int
select id=identity(int,1,1),标志,
进程ID=spid,线程ID=kpid,块进程ID=blocked,数据库ID=dbid,
数据库名=db_name(dbid),用户ID=uid,用户名=loginame,累计CPU时间=cpu,
登陆时间=login_time,打开事务数=open_tran, 进程状态=status,
工作站名=hostname,应用程序名=program_name,工作站进程ID=hostprocess,
域名=nt_domain,网卡地址=net_address
into #t from(
select 标志='死锁的进程',
   spid,kpid,a.blocked,dbid,uid,loginame,cpu,login_time,open_tran,
   status,hostname,program_name,hostprocess,nt_domain,net_address,
   s1=a.spid,s2=0
from master..sysprocesses a join (
   select blocked from master..sysprocesses group by blocked
   )b on a.spid=b.blocked where a.blocked=0
union all
select '|_牺牲品_>',
   spid,kpid,blocked,dbid,uid,loginame,cpu,login_time,open_tran,
   status,hostname,program_name,hostprocess,nt_domain,net_address,
   s1=blocked,s2=1
from master..sysprocesses a where blocked<>0
)a order by s1,s2

select @count=@@rowcount,@i=1

if @count=0 and @show_spid_if_nolock=1
begin
insert #t
select 标志='正常的进程',
   spid,kpid,blocked,dbid,db_name(dbid),uid,loginame,cpu,login_time,
   open_tran,status,hostname,program_name,hostprocess,nt_domain,net_address
from master..sysprocesses
set @count=@@rowcount
end

if @count>0
begin
create table #t1(id int identity(1,1),a nvarchar(30),b Int,EventInfo nvarchar(255))
if @kill_lock_spid=1
begin
   declare @spid varchar(10),@标志 varchar(10)
   while @i<=@count
   begin
    select @spid=进程ID,@标志=标志 from #t where id=@i
    insert #t1 exec('dbcc inputbuffer('+@spid+')')
    if @@rowcount=0 insert #t1(a) values(null)
    if @标志='死锁的进程' exec('kill '+@spid)
    set @i=@i+1
   end
end
else
   while @i<=@count
   begin
    select @s='dbcc inputbuffer('+cast(进程ID as varchar)+')' from #t where id=@i
    insert #t1 exec(@s)
    if @@rowcount=0 insert #t1(a) values(null)
    set @i=@i+1
   end
select a.*,进程的SQL语句=b.EventInfo
from #t a join #t1 b on a.id=b.id
order by 进程ID
end
set nocount off
go

分享到:
评论

相关推荐

    检查 Sql Server的阻塞和死锁

    检查 Sql Server的阻塞和死锁--------------------------------------------

    SQLSERVER阻塞和死锁

    该文档由浅入深,详细讲述事务,锁,阻塞和死锁产生的原因及解决优化办法

    SQL SERVER 2008 R2 查看和杀死死锁进程

    SQL SERVER 2008 R2 查看和杀死死锁进程。数据库进程死锁是一个很严重的问题,快速定位到死锁的进程尤为重要。

    SQLSERVER阻塞与死锁ppt课件.ppt

    SQLSERVER阻塞与死锁ppt课件.ppt

    查询当前阻塞死锁.sql

    脚本查询当前数据库阻塞,阻塞会话事物,进程,锁类型等

    sqlserver2005 查看死锁和kill死鎖

    我们可以使用以下存储过程来检测,就可以查出引起死锁的进程和SQL语句。SQL Server自带的系统存储过程sp_who和sp_lock也可以用来查找阻塞和死锁, 但没有这里介绍的方法好用

    sql server 2000阻塞和死锁问题的查看与解决方法

    数据库发生阻塞和死锁的现象: 一、数据库阻塞的现象:第一个连接占有资源没有释放,而第二个连接需要获取这个资源。如果第一个连接没有提交或者回滚,第二个连接会一直等待下去,直到第一个连接释放该资源为止。...

    利用sys.sysprocesses检查SqlServer的阻塞和死锁

    MSDN:包含正在 SQL Server 实例上运行的进程的相关信息。这些进程可以是客户端进程或系统进程。 视图中主要的字段: 1. Spid:Sql Servr 会话ID 2. Kpid:Windows 线程ID 3. Blocked:正在阻塞求情的会话 ID。如果...

    SQL Server Blocking and Deadlock

    SQL SERVER 的阻塞和死锁,讲解的比较详细,可以参考看看

    sql数据库死锁查询工具

    数据库死锁,阻塞查询,杀死死锁,阻塞进程

    数据库死锁监控.exe

    数据库死锁监控,自动刷新,右键杀死进程,查看存储历史执行时间等信息。

    sqlserver进程死锁关闭的方法

    主要介绍了sqlserver进程死锁关闭的方法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    处理锁、阻塞和死锁(3)??使用SQLServer Profiler侦测死锁

     本文将使用SQLServer Profiler来跟踪死锁。  准备工作:  为了侦测死锁,我们需要先模拟死锁。本例将使用两个不同的会话创建两个事务。  步骤:  1、打开SQLServer Profiler  2、选择【新建跟踪】...

    深入浅出SQLServer中的死锁

    要理解SQLServer中的死锁,更好的方式是通过类比从更大的面理解死锁。比如说一个经典的例子就是汽车(主体)对于道路(资源)的征用,如图1所示。图1.对于死锁的直观理解在图1的例子中,每队汽车都占有一条道路,但都...

    sqlserver常用sql

    死锁的诊断和定位 查询阻塞的语句 查询执行较慢的语句 查询正在执行的语句1 查询正在执行的语句2 查询所有表的主键 查询所有索引 查询表结构 ...修改SQLServer最大内存 用DAC连接到SQL Server 其它SQL DBCC

    sqlserver如何快速查询死锁语句

    sqlserver如何快速查询死锁语句: 1、查询数据库有未提交事务语句、关键的死锁阻塞语句; 2、通过脚本可以准确找到引起死锁的关键进程,然后结束掉这一条,从而达到释放死锁问题。 3、优点:通过找到关键的语句结束...

    SQLServer 中的死锁说明

    死锁(deadlock)指进程之间互相永久阻塞的状态,SQL可以检测到死锁,并选择终止其中一个事务以干预死锁状态。

    查找sqlserver查询死锁源头的方法 sqlserver死锁监控

    如何查出SQL Server死锁的原因,下面就教您SQL Server死锁监控的语句写法,下面的SQL语句运行之后,便可以查找出SQLServer死锁和阻塞的源头

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    《SQL Server 2008管理员必备指南》的特点是按照日常工作的逻辑来编排内容,并含有大量实例操作指导、技巧提示及T-SQL代码,方便管理员日常的工作。 《SQL Server 2008管理员必备指南》适合所有SQL Server用户参考,...

Global site tag (gtag.js) - Google Analytics