Sql-Server-2014

WA_Sys 統計資訊何時更新?

  • March 6, 2019

我的數據庫中有一些自動生成的 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);

這些不會告訴您為什麼它不使用某些統計資訊,但通常如果在同一列上創建了具有較高采樣百分比的統計資訊,則不喜歡具有較低採樣百分比的統計資訊。

請記住,統計資訊更新不會在修改時發生,只有在使用它們的查詢執行時才會發生

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