语句1. select * from sys.sysprocesses where blocked>0
语句2. exec sp_lock (只讨论当当前数据库中Mode为X的锁)有以下问题请问给位,谢谢!
1.语句1是显示当前数据库中被阻塞的进程吗?
2.语句2的结果中若Mode为X的进程(且属于当前数据库的进程)是否也应该在语句1中出现(但是实际不是这样的,由于不能上传图片,请问是为什么)?
语句2. exec sp_lock (只讨论当当前数据库中Mode为X的锁)有以下问题请问给位,谢谢!
1.语句1是显示当前数据库中被阻塞的进程吗?
2.语句2的结果中若Mode为X的进程(且属于当前数据库的进程)是否也应该在语句1中出现(但是实际不是这样的,由于不能上传图片,请问是为什么)?
解决方案 »
- 菜鸟求助~~关于SQL存储过程 再线等~~~~
- 请问如何实现用SQL的明细表逆查结构树
- 如何得到SQL新增记录的标识号
- 求一sql语句,a表与b表做笛卡儿乘积,选择a中某字段包含b中某字段的内容的记录
- 数据库分离后附加,操作的第一步是!!!备份!!!不爽!!!散分
- 请问 Sql 中的Case When Else 可以在查询条件中使用吗?
- 关于多关键字模糊查询排行的问题
- 求教:如何把ms sql server中某个数据库的数据导入Access ?
- ?那为仁兄了解pro*c,请告诉一下参考文献或网址
- 在DHCP情况下安装SQL SEVERER ,会不会有问题
- bulk insert 语句末尾换行问题,急!急!!急!!!求高手解答
- 关于sql的问题
2、1中不涉及锁的问题,你要查看的话应该用sys.dm_tran_lock
1. S锁、IS锁、Sch_M锁是不会引起阻塞的吧?
2.select * from sys.dm_tran_locks where request_mode='X'中进程会影响阻塞与死锁的吧?
3. select * from sys.sysprocesses where blocked>0的结果是目前发生deadlock的进程吧?
4.怎样看系统中的进程哪些是阻塞,哪些是deadlock进程?
看隔离级别,默认隔离级别的S会阻塞其他事务的X,如果加上S的事务,可以升级到X,但是其他事务不能在已经持有S的资源上加X。SCH_M是架构修改锁,比如修改表结构等,这个时候会阻塞其他事务对表的修改,IS是意向共享锁,在阻塞方面和S差不多。
2.select * from sys.dm_tran_locks where request_mode='X'中进程会影响阻塞与死锁的吧?
X会阻塞所有其他事务的x锁,但是在with nolock这些方面,不阻塞S。死锁嘛,看你的操作顺序了,如果A持有X,b在另外一个资源持有X,而A的事务未结束,要访问B的那个X所在的资源,B在锁住那个资源之后又去访问A的那个X上的资源,就产生互相等待,死锁就出现。
3. select * from sys.sysprocesses where blocked>0的结果是目前发生deadlock的进程吧?
要搞清楚“阻塞”和“死锁”的区别,这句通常用来查阻塞,查等待,不是用来查死锁,如果2008之前,要抓死锁图
4.怎样看系统中的进程哪些是阻塞,哪些是deadlock进程?
deadlock绝大部分5秒内就会被sqlserver杀掉,一般很难抓到,2008的话可以用extended events来获取。阻塞的话要看sys.dm_os_waiting_tasks这个表。上面有相关信息,然后再去深入研究。这个DMV是切入点。
语句2. exec sp_lock (只讨论当当前数据库中Mode为X的锁)
第1个语句是你加了一个where blocked >0 ,那么就返回被阻塞的会话的信息,这些被阻塞的会话,肯定格式获取了各种锁,可能是X,可能是S锁。第2个语句是会话的获取锁的信息,获取锁的会话不一定会被阻塞。所以,1是获取阻塞的信息,2是获取锁的信息。阻塞的会话肯定也获取了相关的锁,而获取锁的信息中,肯定也包含了阻塞的相关锁信息,也有不是阻塞的锁信息
1、S锁是共享锁,IS是意向共享锁,Sch_M是架构修改锁,这三个都有可能引起阻塞问题,
比如S锁,会阻塞某个会话获取X锁的请求,而Sch_M是最有可能引起阻塞的,你想你把某一列给删除了,那么肯定引起大面积的阻塞,可以阻塞其他任何锁请求。IS锁引起阻塞的可能最小。2.这个视图查询来的是,获取X锁的一些会话,有可能是导致阻塞和死锁的会话,你需要特别注意视图中的request_status为wait的,说明在他的锁申请被阻塞了,正在等待。
3、 select * from sys.sysprocesses where blocked>0的结果只是阻塞的信息,不一定是死锁的信息,一般死锁是阻塞的升级版,你要跟踪死锁,建议通过sql profiler中的Lock的Deadlock Graph事件来跟踪死锁,显示的是直观的图形,很容易理解。4、可以发现那些是阻塞的,但很难看得出是死锁的,因为系统有一个定时任务Lock_monitor 会定时扫描死锁的会话,然后对其中一个会话进行回滚,从而解除死锁。阻塞信息,可以通过你上面写的:select * from sys.sysprocesses where blocked>0来找,或者在2005版本中也可以:select * from sys.dm_os_waiting_tasks来查询。
我运行select * from sys.sysprocesses where blocked>0时,经常发现其结果中spid与blocked是相同,请问
a. spid与blocked相同,这说明进程自己阻塞自己吗?
b. 若a成立,为什么进程自己阻塞自己呢?