SQL SERVER 2008 如何锁定引起锁等待的SQL语句
碰上阻塞问题,用SQL Server 活动监视器,监测到经常会有Lock出现,影响了性能。
想请教一下,我该如何确定锁的原因和引起长时间锁定的SQL语句。
[解决办法]
一个事务未提交,导致别的事务必须等待,这就是阻塞, 查看阻塞可以用sp_lock,打开三个查询分析器, 第一个写: begin transaction tran1 update products set productName=productName+'A' where ProductId=1 waitfor delay '00:00:30' commit transaction tran1 第二个写: select * from products 第三个写: sp_lock 依次运行第一个、第二个、第三个, 然后查看第三个分析器,看看Status列, 看是否有Status='Wait'的行,比如我这里查看有这么一行: 53 6 117575457 1 KEY (010086470766) S WAIT 其中ObjId=117575457 然后运行: use northwind select object_name(117575457) 可以看到对应的表为 Products
[解决办法]
常用的就是SQL profiler GUI进行跟踪
但是用这个跟踪对生产中的系统会产生大量额外的I/O操作
建议把
跟踪封装到存储过程 跟踪
然后对生成的trc分析
重点关注
duration列
[解决办法]