SQL Server 2008 - 即使实际完成了工作,查询仍需要永久完成

时间:2010-05-06 11:57:10

标签: sql sql-server ssms sql-server-2008

在SSMS中运行以下简单查询:

更新tblEntityAddress SET strPostCode = REPLACE(strPostCode,'','')

数据更新(至少在内存中)在一分钟内完成。我通过执行另一个事务隔离级别读取未提交的查询来验证这一点。但是,更新查询将继续运行30分钟。这是什么问题?这是由写入磁盘的延迟引起的吗?

TIA

3 个答案:

答案 0 :(得分:2)

最有可能的是,您的交易被另一个影响tblEntityAddress的交易锁定。

运行sp_lock,看看tblEntityAddress是否被其他进程锁定。

答案 1 :(得分:2)

在单独的SSMS窗口中,尝试运行以下命令:

SELECT status, wait_type
FROM sys.dm_exec_requests
WHERE session_id = <SPID>

刚刚替换为与您的UPDATE查询相关联的SPID(底部栏中您的登录名后的括号中的数字)。

连续运行以上几次并记下wait_type是什么。有许多类型的等待 - 看看是什么(并且让我们知道),它可以突出原因。

<强>更新 引自this MS KB article

IO_COMPLETION

  

此waittype表示SPID   正在等待I / O请求   完成。当你注意到这一点   waittype中的SPID   sysprocesses系统表,你必须   使用确定磁盘瓶颈   性能监视器计数器,   探路者追踪,   fn_virtualfilestats系统   表值函数,和   SHOWPLAN选项用于分析查询   与SPID对应的计划。您   可以通过添加减少此waittype   额外的I / O带宽或平衡   其他驱动器上的I / O.你也可以   通过使用索引来减少I / O,寻找   错误的查询计划,并寻找内存   压力。

答案 2 :(得分:0)

另一件需要考虑的事情是缓慢运行触发器。