【发布时间】:2015-10-27 21:40:06
【问题描述】:
在我工作的生产环境中,有一个非常奇怪的问题。
我们得到了一个简单的查询,它经常运行,没有任何问题。 DBCC DBREINDEX(..) 的餐桌计划在每晚 01.30 点进行,通常一切都很好。
但是每隔一两周一次,查询变慢,所有用户都无法工作。这发生在清晨(上午 9 点),所以接下来要重建索引。
当这种情况发生时,我对表的两个索引进行了重新索引,并且在一周内全部恢复正常。
如果我在减速发生时检查索引统计信息,一切都很好,碎片大约在 0.2
如果我在问题之前和之后检查估计的执行计划,我看不到任何变化。
查询很简单:
SELECT SUM(A.QTY)
FROM WMSORDER A
WHERE ((DATAAREAID = '01') AND (INVENTTRANSID = '046830648'))
在DATAAREAID 和INVENTTRANSID 列上有索引
我在这里发布两张图片,其中包含出现问题的索引统计信息:
PRE REINDEX STATISTICS WITH SLOW PERFORMANCE
如何避免这个问题?
【问题讨论】:
-
分片是
0.2还是0.2 %?那是一个很大的区别:) 另外,您确定数据库实际上已经完成了索引的重建吗?很可能维护操作仍在执行中。 -
可能是参数嗅探。阅读 Erland Sommarskog Slow in the Application, Fast in SSMS? Understanding Performance Mysteries 撰写的这篇出色的文章,了解运行速度快和运行速度慢时的实际 执行计划。很可能会有不同。
-
你是对的,这是参数嗅探的问题。。用我正在使用的软件(Dynamics AX)的修补程序解决了它
标签: sql sql-server performance sql-server-2008 indexing