为什么这些 SQL 服务器统计信息在设置为自动更新时已过时?

Why are these SQL Server statistics outdated, when it's set to auto-update?

我们有一个 SQL Server 2012 实例,数据库的自动统计设置为开启:

但是后来我运行查询了一些统计数据,一些有一段时间没有更新了:

  1. 为什么会这样? SQL 服务器是否更新未被这些索引触发的统计信息是否有规则?
  2. 我需要照顾吗?我怎么知道我是否需要更新它们,或者它们是否会给我带来性能问题?

谢谢!

即使您将自动更新统计信息设置为 true,它们也只会在达到阈值时更新。这对于不同的版本是不同的

SQL Server 2012 或更早版本的阈值:

  1. table 大小已从 0 行变为 > 0 行

  2. 收集统计信息时table中的行数为500或更少,统计对象前导列的colmodctr从那时起变化了500多

  3. 统计时table有500多行,统计对象前导列的colmodctr变化超过500+20%收集统计信息时 table 中的行数

对于 SQLServer 2016,主要变化很少,SQL 使用新算法更新统计信息(读取频率比旧版本高)

Do i need to care? How do i know if i need to update them, or if they are causing performance issues for me?

通常人们会在周末安排维护工作,这包括索引 rebuild/stats 更新..

这通常可以解决大多数 databases.In 你的情况,如果你看到由于无效统计数据导致的性能问题,你可以更新它们 manually.We 每周更新一次,但是 sites like Whosebug does it more often

update stats tablename

进一步reading/references:
Statistics Used by the Query Optimizer in Microsoft SQL Server 2008
Understanding When Statistics Will Automatically Update