在删除和运行更新统计信息时遇到死锁

Posted

技术标签:

【中文标题】在删除和运行更新统计信息时遇到死锁【英文标题】:Encountering deadlock while deleting and running update statistics 【发布时间】:2014-05-06 04:16:55 【问题描述】:

我正在运行一个从表中删除数据的存储过程,该过程如下所示:

SET rowcount 10000
WHILE ( @rows_deleted > 0 )
BEGIN

BEGIN TRAN

DELETE TABLE1 WHERE status = '1'

SELECT @rows_deleted = @@rowcount

COMMIT TRAN

END

在运行此过程时,更新统计信息也在同一个表上运行。 表的锁定方案是所有页。 我想知道如果锁定是所有页面,它怎么会遇到死锁? 这张桌子上没有其他东西在运行。

我使用的是 Sybase 12.5 ASE

【问题讨论】:

【参考方案1】:

发现更新统计信息确实造成了死锁。它正在桌子上使用共享锁。由于该表具有所有页面的锁定方案,因此删除必须等待它完成。但 Sybase 并没有长时间阻止删除查询,而是选择将其作为受害者终止。

【讨论】:

以上是关于在删除和运行更新统计信息时遇到死锁的主要内容,如果未能解决你的问题,请参考以下文章

类似触发器的系统来更新用户统计信息

遇到的坑:在线用户统计的实现

oracle中的统计信息问题

Google Play 游戏统计信息未在开发者控制台中更新

糟糕的 SQL 读取性能(罪魁祸首更新统计数据?)

为啥过滤统计信息被忽略