Sql-Server
查找所有採樣的統計資訊
我正在使用 Ola 的腳本來更新統計資訊,並且對於一個特定的索引,我想在更新統計資訊時進行全面掃描(結合跟踪標誌 2389 來解決升序鍵問題)。我們有數千個相同的數據庫(這就是我們的供應商軟體的工作方式),我想確保該索引的所有統計數據實際上都在進行全面掃描,而不是抽樣。如何執行查詢以檢查所有數據庫?
我可以使用
DBCC SHOW_STATISTICS()
,但這會返回三個結果集——甚至可以將第一個結果集放入表中而忽略其他兩個結果集嗎?有更好的選擇嗎?
您可以使用
sys.dm_db_stats_properties
DMF 查看採樣的行數(除其他外):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,因此請考慮避免使用該儲存過程。