为什么这些 SQL 服务器统计信息在设置为自动更新时已过时?
Why are these SQL Server statistics outdated, when it's set to auto-update?
我们有一个 SQL Server 2012 实例,数据库的自动统计设置为开启:
但是后来我运行查询了一些统计数据,一些有一段时间没有更新了:
- 为什么会这样? SQL 服务器是否更新未被这些索引触发的统计信息是否有规则?
- 我需要照顾吗?我怎么知道我是否需要更新它们,或者它们是否会给我带来性能问题?
谢谢!
即使您将自动更新统计信息设置为 true,它们也只会在达到阈值时更新。这对于不同的版本是不同的
SQL Server 2012 或更早版本的阈值:
table 大小已从 0 行变为 > 0 行
收集统计信息时table中的行数为500或更少,统计对象前导列的colmodctr从那时起变化了500多
统计时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
我们有一个 SQL Server 2012 实例,数据库的自动统计设置为开启:
但是后来我运行查询了一些统计数据,一些有一段时间没有更新了:
- 为什么会这样? SQL 服务器是否更新未被这些索引触发的统计信息是否有规则?
- 我需要照顾吗?我怎么知道我是否需要更新它们,或者它们是否会给我带来性能问题?
谢谢!
即使您将自动更新统计信息设置为 true,它们也只会在达到阈值时更新。这对于不同的版本是不同的
SQL Server 2012 或更早版本的阈值:
table 大小已从 0 行变为 > 0 行
收集统计信息时table中的行数为500或更少,统计对象前导列的colmodctr从那时起变化了500多
统计时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