3

还有一些其他类似的问题,但请不要混淆。

我知道有一个功能STATS_DATE()可以知道统计数据在哪里更新,这很好,但我想知道是什么触发了此统计数据的更新或截止。我知道也有这方面的报告。

但是上周我在某些服务器上看到了统计数据,他们给了我非常好的信息,这个特定数据库中的主表的数量为 4 位数。

现在查看相同的生产服务器,STATS_UPDATE返回的函数是上周六更新的,但是该服务器已经运行了数周而没有重新启动,甚至没有重新启动服务。所以我知道我正在查看基本上只是在这个星期一早上积累的统计数据。

所以,我想知道在哪里可以设置此设置,以便服务器不断累积索引使用统计信息,直到我清除日志或它使用的任何存储。

4

1 回答 1

2

SQL 服务器为表和索引维护了各种“统计信息”。

  1. 直方图统计。这些是查询优化器使用的统计信息。STATS_DATE() 返回这些更新的最后日期/时间。直方图统计信息自动更新的标准是 500 行 + 20% 的表。因此,对于一个有 100,000 行的表,您必须更新 20,500 行,然后才能触发对这些行的重新计算。您无法更改自动统计更新的阈值,但是,您可以关闭自动统计更新和/或手动更新特定表和索引的统计信息。

  2. 使用统计:这些位于 sys.dm_db_index_usage_stats。索引使用统计信息跟踪诸如来自 SELECT 查询的搜索和扫描之类的事情。它们不会持久化并在 sql server 重新启动时重置。如果基础索引被重建“ALTER INDEX ... REBUILD”,这些统计数据也会被重置,但不是“ALTER INDEX ... REORG”

  3. 操作统计:这些位于 sys.dm_db_index_operational_stats。操作统计是诸如页面拆分、叶级插入和 PAGEIOLATCH 延迟之类的东西。这些也不是持久的。

于 2012-12-04T03:47:30.900 回答