我有一个存储过程,它在我们的应用程序数据库(sql server 2016 enterprise,~500gb数据)中搜索“坏”数据。从业务/流程意义上讲是“坏”。
通常需要 10-30 秒才能执行。几天后,执行时间突然增加到 5 分钟以上。
我当前的解决方案是重新计算所有统计数据,执行时间再次降低:
EXECUTE dbo.IndexOptimize @Databases = 'myDB',
@FragmentationLow = NULL,
@FragmentationMedium = NULL,
@FragmentationHigh = NULL,
@FragmentationLevel1 = 5,
@FragmentationLevel2 = 30,
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y'
显然,重新生成统计数据将产生新的、更好的查询计划。是否有针对性的方法可以识别导致查询计划缓慢的误导性统计数据?或者我如何找到原因?表、索引、统计数据和此存储过程很复杂,因此我无法猜测。我是否可以通过编程方式比较更新“之前”和“之后”的统计数据?
我们有许多过滤索引,它们通常非常小,因此 20% 规则可能经常适用于它们。
指数每周进行优化。
答案1
不确定真正的答案是什么(目前),但在@yoonix 的建议下,我转向了问题转至 dba.stackexchange.com