请问是否可以看得到是因为什么语句造成死锁的?如果可以应该如何设置才能看到?怎样查看?
程序很庞大的,不知道是那里出的问题,检查顺序?

解决方案 »

  1.   

    參照方法
    SQL2005以上可用 SQL Server Profiler通過SQL Server Profiler查死鎖信息:啟動SQL Server Profiler——連接實例——事件選取範圍——顯示所有事件
    選擇項:
    TSQL——SQL:StmtStarting
    Locks——Deadlock graph(這是SQL2005新增事件,生成包含死鎖信息的xml值)
         ——Lock:DeadlockChain 死鎖鏈中的進程產生該事件,可標識死鎖進程的ID並跟蹤操作
     ——Lock:Deadlock 該事件發生了死鎖
      

  2.   

    另外如果你可以安装SQL SERVER2008 的SSMS 来检查SQL 2005 2008 等即时线程死锁,或等待的信息右键服务器,---ACTIVITY MONITOR这是对DBA是很有用的功能 可以FILITER
      

  3.   

    我这个是sql server 2000的呀,是不是没有监控功能呀?是不是我要更换成更高版本的呀?应该换成什么版本呢?
      

  4.   

    有没有可能不更新sql server版本而直接安装监控工具呢?
    实在不行我就只好更新版本了,
      

  5.   

    SORRY 你没有理解我说的意思,你只需要安装客户端是SQL SERVER 2008 就可以也就是我们俗称的SSMS如果你是利用命令行你可以使用使用SQL Server的系统存储过程sp_who和sp_lock,可以查看当前数据库中的锁情况;进而根据objectID(@objID)(SQL Server 2005)/ object_name(@objID)(Sql Server 2000)可以查看哪个资源被锁,用dbcc ld(@blk),可以查看最后一条发生给SQL Server的Sql语句;
      

  6.   

    windows 自带的性能监视器 + MsSqlServer的Profiler 监控可能出现问题的时间段,然后分析一下你就知道了
      

  7.   

    意思是我的服务器是sql server2000,而我在客户端装个sql server 2008 连接服务器就可以分析服务器了是吗?
      

  8.   

    1、perfmon.msc 新建一个日志,根据自己的需要做个计划,然后再日志中添加你需要的性能计数器,是数据库服务器的话sql相关计数器很丰富的。
    2、sql profiler 建立跟踪,选择你要的 事件,同样将监控数据保存;
    3、分析perfmon.msc得到的日志看看sqlserver:locks下的计数器,看看有关锁的信息;
    4、根据3的时间和分析结果看看你确定的这个时间段有哪些语句在执行;ps:你最好在perfmon.msc加上cpu memory disk 等监视器对你分析可能有帮助;
      

  9.   


    Sorry 你还是么有明白,目前SQL SERVER 2008 有新的功能叫ACTIVITY MONITOR目前只兼容到SQL SERVER2005,2000不在支持,从微软的角度SQL SERVER 2000 也不在支持范围之内你可以用命令的方式,当然使用PROFILE 也可以,楼上的说的很好如果你需要更详细的数据那可以使用,但从即时性考虑,ACTIVITY MONITOR 是在死锁瞬间就显示 线程名 连接数据库名连接客户端,等相信信息
      

  10.   

    我确实很初级,你这次说的我终于明白了,谢谢,看来我还是的换装个数据库了,如果用sql语句,我仍然不熟悉,没太明白。也许用工具会更加容易理解吧
      

  11.   

    谢谢,你这个说法我也是得换个sql server版本才行了,我明天就换个版本吧,不然没有profiler 这个东西呀。
      

  12.   

    profiler 在sqlserver 2000上就是 事件探察器
      

  13.   

    那我可以用事件探查器检查到问题吗?
    那我需要把哪几项可用事件类添加到 跟踪属性 中去呢?
    我的目的是想知道那个sql语句造成了死锁,别的信息都不用
      

  14.   


    在PROFILE 后,你可以选择是将记录保存在数据库成为表,还是承认TRC文件,后请对TYPE中查找LOCK有关的信息
      

  15.   

    我现在还没有profile啊,是sql server2000,因为这个东西在客户的服务器上,并不是想随意就可以停下来安装的。现在启动了时间探查器,请问是否能够监控到死锁信息,并且找得到是哪一条sql语句被死锁了?
      

  16.   

    --查找锁记录
    Select distinct spid,blocked,loginame,hostname,open_tran,waittime,lastwaittype,waitresource,last_batch 
    from master..sysprocesses where spid >= 50
    and blocked <> 0 
    order by waittime desc看blocked
    --看最后提交的语句
    dbcc inputbuffer(62)--62为上面查询的blocked 即引起锁的spid
      

  17.   

    请问 dbcc inputbuffer(62) 这样执行之后会显示什么内容呢?因为我现在还没有看到死锁情况,所以不知道结果是怎样的,是不是可以看到导致死锁的sql语句呀?
      

  18.   

    回 17 楼 jyh070207 
    请问你提供的那个语句是不是查询临时信息的?如果死锁的时候没有及时查询,被重启了数据库,会不会还能查询到呢?