Sql-Server
查詢執行計劃更新前表統計資訊有多少變化?
如果我在環境中有表,並且它沒有經歷任何 DDL 更改或 sp_recompile。在 SQL Server 2016 引擎使用表重新編譯查詢之前,必須插入/更新多少統計數據?聽說是20%左右。
謝謝,
舊的行為是 20% 的流失(+500 行)。從 2016 年開始的新行為是基於行數的更加動態的速率。我不知道具體的時間間隔是否會在任何地方發布,但您可以嘗試確定確切的門檻值。
要點是,隨著表變大,您應該會更頻繁地看到自動更新統計資訊。這與早期版本中引入的帶有跟踪標誌 2371的行為相匹配:
但是,在此 Microsoft 部落格文章中列出了這些不會觸發的一些原因:
- 此實例嘗試更新統計資訊但失敗了,我們應該忽略 rowmodctr 以防止無休止的優化重新編譯循環。
- 查詢正在自動駕駛模式下執行(即,由數據庫引擎優化顧問創建的會話之一來微調給定的查詢或工作負載)。
- 這是一個 READONLY 表/數據庫。
- 找到了簡單的優化計劃。
- 使用者提供的“保留計劃”提示。
- 禁用自動統計的內部 QP 計劃。這避免了無限的重新編譯。
- 當啟用跟踪標誌 3608 時。