【发布时间】:2019-10-21 10:32:16
【问题描述】:
我有一个由于 SQL Server 超时而失败的 UPDATE 命令。这是一个用于存储事件的大表,主键是一个非聚集索引(无论如何都不重要,因为它是一个 uniqueidentifier 列)。
它正在更新一行:update [table] set [field] = 1 where [primary_key] = [primary_key_value];。问题可能在于有超过 200,000,000 行,因此查找每一行需要很长时间。
就 SQL Server 的偏好而言,我最好增加命令超时时间(是的,我知道默认的 30 秒已经是任何合理查询的 30 倍),或者我应该引入一个 更短的 超时,但一遍又一遍地重试(达到极限)?
那么 60 秒的命令超时是否比 5 秒超时的 6 次重试更好?
在实践中,当然会有某种指数退避和断路器实现。
【问题讨论】:
-
考虑确定超时的根本原因。也许
UPDATE触及的行数超出了必要的范围,需要查询/索引调整。 -
好点。我已经更新了问题。
-
如果 PK 索引按预期使用并且没有长期阻塞,则单例更新应该不超过毫秒。检查执行计划以验证索引是否按预期使用。
-
谁能想到为什么这个问题被投票关闭?如果我不知道为什么,我无法修复它。
-
选民投票以“主要基于意见”结束。我想那是因为你问过长超时是否比重试的短超时更好。
标签: sql sql-server performance database-performance