我知道,出于多种原因,在SQL表上执行INSERT操作可能会很慢:
- 桌子上是否存在INSERT TRIGGER
- 许多必须检查的强制约束(通常是外键)
- 当在表的中间插入一行时,页面在聚集索引中拆分
- 更新所有相关的非聚集索引
- 阻止桌面上的其他活动
- IO写响应时间差
- ...我错过了什么?
如何确定我的具体情况中哪个责任人?如何衡量分页与非聚集索引更新与其他所有内容的影响?
我有一个存储的过程,一次插入大约10,000行(从临时表中),每10k行大约需要90秒。这太慢了,因为它会导致其他sps超时。
我已经查看了执行计划,并且看到了INSERT CLUSTERED INDEX任务和FK查找中的所有INDEX SEEKS,但仍不能确定为什么要花这么长时间。没有触发器,但是表中确实有少数FKey(似乎已正确索引)。
这是一个SQL 2000数据库。
是否在数据文件上启用了自动扩展?这可能会导致默认配置出现性能问题。
—
拉里·科尔曼
我们是在谈论使用探查器吗?msdn.microsoft.com/zh-CN/library/ms187929.aspx
—
隐身
@Larry:数据文件具有很大的可用空间,所以我认为数据文件的增长不是问题。不过,这是添加到“检查事项”列表中的好方法。
—
BradC 2011年
@ user210:对语句完成进行概要分析仅向我显示它花费了90秒,但没有告诉我原因。除非您认为还有其他事件更能说明问题。
—
BradC 2011年