日期:2014-05-17  浏览次数:20410 次

数据库死锁找id问题


假如一张表被两个java进程锁住了,用什么查询语句可以查询出任务管理器中的哪两个pid锁住了这个表?
------最佳解决方案--------------------
从pid到sid其实经过了sqlos的转换。pid是你程序的id,但是这个程序会发出很多会话,所以就有了sid(会话id),死锁问题你去找pid没用。只能找sid来处理。我用你的程序,同时打开10个报表文件,其中一个死锁了,那你删掉我这个程序就影响面太大了。应该kill 掉那个死锁的报表对应的sid即可。所以你用你下面那个图的来处理就好了。
------其他解决方案--------------------
sp_who
------其他解决方案--------------------
引用:
我现在查询出来的这个进程id跟我的任务管理器中的两个java进程id对应不上啊


这俩不是一个概念! sid 是sql server实例的进程会话id。系统的pid是windows平台上执行的系统进程id。
------其他解决方案--------------------


我现在查询出来的这个进程id跟我的任务管理器中的两个java进程id对应不上啊


------其他解决方案--------------------
你上图那个是pid,下图那个是sid
------其他解决方案--------------------
引用:
你上图那个是pid,下图那个是sid


那在sql2008中怎么才能是查询出对应到任务管理器中的pid呢?
------其他解决方案--------------------
其实我就想在数据库查询出某张表是被任务管理器中的哪些进程给死锁住了,请问大牛们怎么查询?  数据库是sqlserver2008的
------其他解决方案--------------------
引用:
从pid到sid其实经过了sqlos的转换。pid是你程序的id,但是这个程序会发出很多会话,所以就有了sid(会话id),死锁问题你去找pid没用。只能找sid来处理。我用你的程序,同时打开10个报表文件,其中一个死锁了,那你删掉我这个程序就影响面太大了。应该kill 掉那个死锁的报表对应的sid即可。所以你用你下面那个图的来处理就好了。


那我怎么才能知道这个会话id属于哪个进程id呢?
------其他解决方案--------------------
引用:
引用:
从pid到sid其实经过了sqlos的转换。pid是你程序的id,但是这个程序会发出很多会话,所以就有了sid(会话id),死锁问题你去找pid没用。只能找sid来处理。我用你的程序,同时打开10个报表文件,其中一个死锁了,那你删掉我这个程序就影响面太大了。应该kill 掉那个死锁的报表对应的sid即可。所以你用你下面那个图的来处理就好了。

……
我觉得你现在思维有点限定了。你应该已经知道有多少个程序在连接数据库,死锁问题,你要查看sid,然后分析这个sid为什么死锁。具体可以看看大版的博客:
http://blog.csdn.net/roy_88/article/details/2686724
------其他解决方案--------------------
引用:
你好……


我有个程序给客户使用,但是客户自己对接了系统,现在出现了死锁的情况,我只是想知道是我的程序锁住了表还是客户的锁住了表
------其他解决方案--------------------
引用:
引用:
你好……

我有个程序给客户使用,但是客户自己对接了系统,现在出现了死锁的情况,我只是想知道是我的程序锁住了表还是客户的锁住了表
客户“用”程序而已,怎么会是客户能锁表呢,除非你前端有这个功能按钮....你要知道客户在做了什么操作,然后进行SQLServer端的监控。合理的程序应该编译或者封装好的。你难道还看代码?
------其他解决方案--------------------
引用:
……


好像讨论太深层次了。其实我的目的很简单,就是能不能根据数据库的会话sid找到对应的pid呢?中间是不是有哪个关联的?
------其他解决方案--------------------
开启sql Profiler可以跟踪,但是对性能有影响
------其他解决方案--------------------

to :Huangzj 
感谢你这么耐心的回答,让我懂了不少。谢谢DBA_