在SSMS中运行以下简单查询:
更新tblEntityAddress SET strPostCode = REPLACE(strPostCode,'','')
数据更新(至少在内存中)在一分钟内完成。我通过执行另一个事务隔离级别读取未提交的查询来验证这一点。但是,更新查询将继续运行30分钟。这是什么问题?这是由写入磁盘的延迟引起的吗?
TIA
答案 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)
另一件需要考虑的事情是缓慢运行触发器。