当表中 20% 的数据发生更改时,我知道 SQL Server 更新统计信息。它通过使用修改计数器来跟踪它,我们可以在 sys.stats 表的 [modification_counter] 列中看到它。
但是我可以看到我在数据库中的一个关键表中,统计数据在达到 20% 的数据修改阈值之前就已经更新了很多。只是想知道是否还有其他东西会强制 SQL Server 自动更新统计信息。
为什么我担心的是,当 SQL Server 自动更新统计信息时,它使用 5% 的采样率,这可能会导致创建错误/不准确的执行计划。(需要确认是完全不同的问题)。
所以我想知道为什么 SQL Server 如此频繁地更新统计信息?
对于大表,我们需要更新 20% 的行来自动更新统计信息。例如,具有 100 万行的表需要
200,000 rows
更新。查询优化器可能不适合生成有效的执行计划。例如,一个有一百万行的表,我们可以使用公式来计算更新次数,之后 SQL Server 会自动更新统计信息。
SQL Server 在大约之后更新统计信息。31622 对象中的修改。
注意:数据库兼容级别应为 130 或以上才能使用此动态阈值统计计算。
关于采样率,是的-自动统计更新不进行全扫描,它们进行百分比采样,这可能并不总是最佳的……您必须实施自己的解决方案,该解决方案将使用全扫描进行更频繁的统计更新。检查 Ola Hallengren 的维护脚本