Sql-Server-2014
WA_Sys 統計資訊何時更新?
我的數據庫中有一些自動生成的 WA_Sys 統計資訊有一段時間沒有更新(與同一張表中的其他統計資訊相比)
經驗法則似乎是在 >500 行的表中,統計資訊以 20% + 500 行的數據變化進行更新。
但是,我可以看到使用以下查詢
SELECT t.name, i.name, i.rowcnt, i.rowmodctr, p.last_updated FROM sys.sysindexes i JOIN sys.tables t ON i.id = t.object_id JOIN sys.stats s ON s.object_id = t.object_id AND i.name = s.name CROSS APPLY sys.dm_db_stats_properties(s.object_id,s.stats_id) p WHERE rowmodctr > 0 ORDER BY i.rowmodctr DESC
有一個表,其中包含許多過時的 WA_Sys 統計資訊(並且 rowmodctr 高於 20% + 500)
如果對錶執行查詢並在 WHERE 子句中添加與過期 WA_Sys 統計資訊關聯的列之一併檢查統計資訊的更新日期,我可以看到它已更新。
如果我再次使用 WHERE 子句執行相同的查詢,則統計資訊不會更新
似乎 _WA_Sys 統計資訊在執行查詢時會更新,將使用它們並且它們已過時?
SQL Server 只會自動更新它使用的統計資訊。它可能不會主動使用 _WA_Sys 統計資訊進行基數估計,儘管它可能會在決策過程中載入它們。
要查看查詢使用了哪些統計資訊,請將其添加到查詢的末尾,然後查看“消息”選項卡:
OPTION(QUERYTRACEON 3604, QUERYTRACEON 2363);
如果您的數據庫在 2014 年之前處於兼容級別,您將需要這些:
OPTION(QUERYTRACEON 3604, QUERYTRACEON 9292, QUERYTRACEON 9204);
這些不會告訴您為什麼它不使用某些統計資訊,但通常如果在同一列上創建了具有較高采樣百分比的統計資訊,則不喜歡具有較低採樣百分比的統計資訊。
請記住,統計資訊更新不會在修改時發生,只有在使用它們的查詢執行時才會發生