我处于报告开发之间,报告的主要数据集正在使用存储过程填充。一个特定的更新声明如下所示
UPDATE T1
SET
T1.Status=T2.Status,
T1.ErrorMessage=T2.ErrorMessage,
T1.IssueStatus=T2.IssueStatus
FROM
#tmptblOtherSongs T1
INNER JOIN #tmpOtherSongStatus T2 ON
T1.SongCode= T2.SongCode AND
T1.SocietyCode= T2.SocietyCode AND
T1.TableName=T2.TableName
WHERE
T1.SessionID='TRYFBGHk' AND
T2.Status IS NOT NULL
sp到达此特定更新查询时进入挂起状态。我尝试单独运行查询,但结果是相同的。它运行良好的少量数据,如数千,但问题发生在更多的数据。 有什么办法可以防止这种情况发生。我不知道为什么会这样。
答案 0 :(得分:0)
当进程处于挂起状态时,它正在等待某事。通常它要么等待I / O(读取或写入数据,也可能与tempdb相关),要么等待阻塞结束。
如果没有阻塞,则很可能是I / O操作。如果某些内容看起来不正确和/或设置统计信息,则应查看执行计划,并检查哪些表导致大部分I / O.
通常可以通过添加索引来改进I / O,在您的情况下,我将开始查看T1.SessionID并在此之后查看T1& T2.SongCode和SocietyCode +可能是TableName,取决于每个值表中有多少行。