sp_updatestats应该多久调用一次?

Cha*_*ker 12 sql-server statistics frequency

我的一个问题涉及一个缓慢执行的查询,向我介绍了该sp_updatestats()函数.我想采取积极主动的步骤定期调用它,而不是等待我的查询在工作时间内随机启动超时.我正考虑每晚午夜运行它.我的问题是:

  1. 是否有一种有用的方法来确定何时应该调用此过程而不是每晚盲目运行它?文档说SQL Server自己更新这些统计信息.但是频率是多少?我如何知道何时需要手动执行并执行它?

  2. 在运行此过程时数据库是否锁定?它似乎需要大约四到五分钟才能做到.在此期间是否可以访问数据库,或者是否会阻止尝试查询?我的测试表明我仍然可以运行查询,但我不确定这是不是因为我很幸运,查询一个表,在那个精确的时刻没有计算统计数据.

CRA*_*DBA 16

以下是在线图书的引用:

sp_updatestats仅根据sys.sysindexes目录视图中的rowmodctr信息更新需要更新的统计信息,从而避免对未更改的行进行不必要的统计信息更新.

因此,您可以每天运行UPDATE STATS,它可能不会执行任何操作.

Paul Randal's - rowmodctr如何运作

Kendra Little的文章 - 陈旧统计

2008年白皮书

来自Kalen Delany的SQL Server Internals Book 2008.如果你没有这本书的副本,你应该得到一本.

在2008年之前,使用了rowmodctr.2008年之后,正在使用colmodctr.

这些统计信息用于确定何时超出表的重新编译阈值(RT)并且统计信息被视为已停顿且需要更新.

对于小型表,必须至少进行500次更改.对于大型表,至少有500个更改加上20%的行数.对于非常小的表,至少有6个更改.

最后但并非最不重要的是,有FULL,SAMPLE N%和RE-SAMPLE选项,用于确定要扫描的行数以创建新统计信息.

所以......

简而言之,这意味着什么?

每周一次重新组织索引时,我会运行更新统计信息.我是在周末早些时候这样做的,所以如果系统变慢,没有人会抱怨.到目前为止,这对我有用,我几乎没有任何问题.