Bra*_*adC 30 sql-server insert sql-server-2000 database-tuning
我知道 SQL 表上的 INSERT 可能由于多种原因而变慢:
在我的特定情况下,我如何判断哪个负责?如何衡量页面拆分与非聚集索引更新与其他所有内容的影响?
我有一个存储过程,一次插入大约 10,000 行(来自临时表),每 10k 行大约需要 90 秒。这是令人无法接受的缓慢,因为它会导致其他 spid 超时。
我查看了执行计划,我看到了 INSERT CLUSTERED INDEX 任务和 FK 查找中的所有 INDEX SEEKS,但它仍然没有确切地告诉我为什么需要这么长时间。没有触发器,但该表确实有一些 FKey(似乎已正确索引)。
这是一个 SQL 2000 数据库。
mrd*_*nny 10
有些东西你可以看看...
将批量大小从 10000 减少到更小,例如 2000 或 1000(您没有说明行大小有多大)。
尝试打开 IO Stats 以查看 FK 查找占用了多少 IO。
插入时发生的等待是什么(master.dbo.sysprocesses)?
让我们从这里开始,看看我们要去哪里。
在分析查询性能时,我可以说出我在寻找什么。也许它有帮助。
尝试使用:
SET STATISTICS IO ON
Run Code Online (Sandbox Code Playgroud)
和
SET STATISTICS PROFILE ON
Run Code Online (Sandbox Code Playgroud)
统计数据
可用于告诉您哪些表执行了最多的表扫描、逻辑读取和物理读取(我使用这三个来关注查询计划的哪个部分需要最多调整)
统计资料
将主要以表格格式返回查询计划,然后您可以查看 IO 和 CPU 列,了解查询中花费最多的内容(是临时表上的表扫描还是插入到您的表中的排序)聚集键等...)
归档时间: |
|
查看次数: |
60236 次 |
最近记录: |