我知道sql表上的INSERT可能因任何原因而变慢:
>表上存在INSERT TRIGGER
>许多必须检查的强制约束(通常是外键)
>在表的中间插入行时,页面在聚簇索引中拆分
>更新所有相关的非聚集索引
>阻止桌面上的其他活动
> IO写入响应时间不佳
> ……我错过了什么?
我怎么知道在我的具体情况中哪个是负责任的?如何衡量页面拆分与非聚集索引更新对其他所有内容的影响?
我有一个存储过程,一次插入大约10,000行(来自临时表),每10k行大约需要90秒.这是令人无法接受的缓慢,因为它导致其他spid超时.
我查看了执行计划,我看到了INSERT CLUSTERED INDEX任务以及FK查找中的所有INDEX SEEKS,但它仍然没有告诉我为什么它需要这么长时间.没有触发器,但表中确实有一些FKeys(看起来是正确索引的).
解决方法
你可以看一些东西……
将批量大小从10000减小到更小,如2000或1000(您没有说明行大小有多大).
尝试启用IO Stats以查看FK查找正在进行多少IO.
什么是插入时发生的等待(master.dbo.sysprocesses)?
让我们从这里开始,看看我们去哪里.