Sql-Server

查找所有採樣的統計資訊

  • May 13, 2020

我正在使用 Ola 的腳本來更新統計資訊,並且對於一個特定的索引,我想在更新統計資訊時進行全面掃描(結合跟踪標誌 2389 來解決升序鍵問題)。我們有數千個相同的數據庫(這就是我們的供應商軟體的工作方式),我想確保該索引的所有統計數據實際上都在進行全面掃描,而不是抽樣。如何執行查詢以檢查所有數據庫?

我可以使用DBCC SHOW_STATISTICS(),但這會返回三個結果集——甚至可以將第一個結果集放入表中而忽略其他兩個結果集嗎?有更好的選擇嗎?

您可以使用sys.dm_db_stats_propertiesDMF 查看採樣的行數(除其他外):

SELECT object_name(s.object_id), s.name, 
      sp.last_updated, sp.rows, sp.rows_sampled, 
      sp.steps, sp.unfiltered_rows, sp.modification_counter
FROM sys.stats s
CROSS APPLY sys.dm_db_stats_properties (s.object_id, s.stats_id) sp
WHERE s.object_id = object_id('TableName')
AND s.name = 'IndexName';

您可以添加一些數學來比較 rows_sampled 與行。鑑於更新統計資訊後表中會有數據移動,我不希望這是 100%,但您可以假設如果完成了完整掃描,您將看到至少 80% 的目前表尺寸:

SELECT object_name(s.object_id), s.name, 
      sp.last_updated, sp.rows, sp.rows_sampled, 
      --
      sample_percent = (100*sp.rows_sampled/sp.rows),
      --
      sp.steps, sp.unfiltered_rows, sp.modification_counter
FROM sys.stats s
CROSS APPLY sys.dm_db_stats_properties (s.object_id, s.stats_id) sp
WHERE s.object_id = object_id('TableName')
AND s.name = 'IndexName';

現在,您只需要使用一些工具來針對您的數千個數據庫執行它。我懷疑,如果您要管理數千個數據庫,那麼您已經有一種既定的方法來做到這一點。作為 PSA,我會提到sp_MSforeachdb 有時會失去 databases,因此請考慮避免使用該儲存過程。

引用自:https://dba.stackexchange.com/questions/134072