我正在使用 Ola 的脚本进行统计更新,对于一个特定的索引,我想在更新统计时进行全面扫描(以解决升序键问题以及跟踪标志 2389)。我们有成千上万个相同的数据库(这就是我们的供应商软件的工作方式),我想确保该索引的所有统计数据实际上都是在进行全面扫描,而不是抽样。我如何着手运行查询来检查所有数据库?
我可以使用DBCC SHOW_STATISTICS()
, 但它会返回三个结果集——是否可以只将第一个结果集放入表中而忽略其他两个?有更好的选择吗?
我正在使用 Ola 的脚本进行统计更新,对于一个特定的索引,我想在更新统计时进行全面扫描(以解决升序键问题以及跟踪标志 2389)。我们有成千上万个相同的数据库(这就是我们的供应商软件的工作方式),我想确保该索引的所有统计数据实际上都是在进行全面扫描,而不是抽样。我如何着手运行查询来检查所有数据库?
我可以使用DBCC SHOW_STATISTICS()
, 但它会返回三个结果集——是否可以只将第一个结果集放入表中而忽略其他两个?有更好的选择吗?
sys.dm_db_stats_properties
您可以使用DMF查看采样了多少行(除其他外) :您可以添加一些数学运算来比较 rows_sampled 与 rows。鉴于更新统计信息后表格中会有数据移动,我不希望这是 100%,但您可以假设如果完成了完整扫描,您将看到至少 80% 的当前表格尺寸:
现在,您只需使用一些工具来针对您的数千个数据库运行它。我怀疑如果您正在管理数以千计的数据库,那么您已经有了执行此操作的既定方法。作为 PSA,我会提到sp_MSforeachdb 有时会丢失数据库,因此请考虑避免使用该存储过程。