我知道 SQL 表上的 INSERT 可能由于多种原因而变慢:
在我的具体情况下,我如何判断哪个负责?如何衡量页面拆分与非聚集索引更新与其他所有内容的影响?
我有一个存储过程,一次插入大约 10,000 行(来自临时表),每 10k 行大约需要 90 秒。这是不可接受的慢,因为它会导致其他 spid 超时。
我查看了执行计划,看到了 INSERT CLUSTERED INDEX 任务和 FK 查找中的所有 INDEX SEEKS,但它仍然不能确定为什么需要这么长时间。没有触发器,但该表确实有一些 FKey(似乎已正确索引)。
这是一个 SQL 2000 数据库。
有些东西你可以看看…
将批量大小从 10000 减小到更小的值,例如 2000 或 1000(你没有说你的行大小有多大)。
尝试打开 IO Stats 以查看 FK 查找占用了多少 IO。
插入时发生的等待是什么(master.dbo.sysprocesses)?
让我们从这里开始,看看我们要去哪里。