在 SQL 服务器中查找过时的统计数据?

在 SQL 服务器中查找过时的统计数据?

我有一个存储过程,它在我们的应用程序数据库(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'

Ola Hallengren 的索引优化

显然,重新生成统计数据将产生新的、更好的查询计划。是否有针对性的方法可以识别导致查询计划缓慢的误导性统计数据?或者我如何找到原因?表、索引、统计数据和此存储过程很复杂,因此我无法猜测。我是否可以通过编程方式比较更新“之前”和“之后”的统计数据?

我们有许多过滤索引,它们通常非常小,因此 20% 规则可能经常适用于它们。

指数每周进行优化。

答案1

不确定真正的答案是什么(目前),但在@yoonix 的建议下,我转向了问题转至 dba.stackexchange.com

相关内容