首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL SERVER 2008 怎么锁定引起锁等待的SQL语句

2012-04-01 
SQL SERVER 2008 如何锁定引起锁等待的SQL语句碰上阻塞问题,用SQL Server 活动监视器,监测到经常会有Lock

SQL SERVER 2008 如何锁定引起锁等待的SQL语句
碰上阻塞问题,用SQL Server 活动监视器,监测到经常会有Lock出现,影响了性能。
想请教一下,我该如何确定锁的原因和引起长时间锁定的SQL语句。

[解决办法]

SQL code
一个事务未提交,导致别的事务必须等待,这就是阻塞, 查看阻塞可以用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列
[解决办法]
探讨

SQL code

一个事务未提交,导致别的事务必须等待,这就是阻塞,
查看阻塞可以用sp_lock,打开三个查询分析器,
第一个写:
begin transaction tran1
update products set productName=productName+'A'
where ProductId=1
waitfor delay '00:00:30'
commi……

[解决办法]
堵塞是正常的
死锁也是不可避免的
应尽量寻求将堵塞时间缩短最小
将死锁的发生几率降低到最小

[解决办法]
探讨

引用:

写速度从300下降到30,需要查看一下下降时,执行的SQL在等待什么资源。

我现在就是想请教一下,该如何查找这个等待的资源,我用1楼得方法试过了,没发现有Status='Wait'的行

热点排行