我一直在我们的生产环境(本地)中调试一个问题,即使对列进行了索引,查询也执行缓慢。该表大约有 2 亿行,未分区并且处于完全恢复模式。
DELETE 只影响 1 行,INSERT 也只影响 1 行。
我可以在 SQL Profiler 中看到持续时间,但它发生在审核注销期间,我不明白。例如,图片顶部的 DELETE 似乎需要 0ms 才能运行,但 Audit Logout 需要 2867ms,并且读取量也很大。我已使用 PerfMon 监控数据库,但看不到任何相关的 I/O 或 CPU 问题。
对这样的表进行 DELETE 或 INSERT 可能需要几秒钟,这是否有意义?有人知道导致延迟的原因吗?
以下是审计注销事件文档中对“持续时间”和“读取次数”跟踪列值的描述:
跟踪中的审核注销持续时间值反映了重用池连接之间的时间,而读取值是自物理打开连接以来所有活动的累积值。两者都与查询缓慢无关,并且对于解决查询性能问题也不是特别有用。
RPC:Completed 持续时间反映参数化查询的服务器端查询持续时间。在此跟踪数据中没有证据表明查询运行时间超过几毫秒。
如果您确实捕获了长时间运行的 RPC 调用,请检查 Showplan XML 统计报告捕获的计划,看看实际计划是否不是最佳的。如果计划看起来不错,请考虑缓慢可能是由多种因素引起的,例如长期阻塞、资源等待或在繁忙的生产服务器上运行未经过滤的 Profiler 跟踪。