文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  配置非持久化最佳化工具統計參數

17.8.10.2 配置非持久化最佳化工具統計參數

本節說明如何配置非持久化最佳化工具統計資料。當 innodb_stats_persistent=OFF 或使用 STATS_PERSISTENT=0 建立或變更個別資料表時,最佳化工具統計資料不會保存到磁碟。相反地,統計資料會儲存在記憶體中,並且在伺服器關閉時遺失。統計資料也會透過某些操作並在特定條件下定期更新。

依預設,最佳化工具統計資料會由 innodb_stats_persistent 配置選項啟用並保存到磁碟。如需持久化最佳化工具統計資料的相關資訊,請參閱第 17.8.10.1 節,「配置持久化最佳化工具統計參數」

最佳化工具統計資料更新

在以下情況下會更新非持久化最佳化工具統計資料:

配置取樣頁面的數量

MySQL 查詢優化器會使用關於索引分佈的估計統計資訊,根據索引的相對選擇性來選擇執行計畫的索引。當 InnoDB 更新優化器統計資訊時,它會從資料表的每個索引中取樣隨機頁面,以估計索引的基數。(此技術稱為隨機潛入。)

為了讓您控制統計資訊估計的品質(從而為查詢優化器提供更好的資訊),您可以使用參數 innodb_stats_transient_sample_pages 來變更取樣頁面的數量。預設的取樣頁面數量為 8,這可能不足以產生準確的估計,導致查詢優化器選擇不佳的索引。此技術對於大型資料表和用於聯結的資料表尤其重要。此類資料表不必要的完整資料表掃描可能會造成重大的效能問題。請參閱第 10.2.1.23 節,〈避免完整資料表掃描〉,以取得調整此類查詢的訣竅。innodb_stats_transient_sample_pages 是一個全域參數,可以在執行階段設定。

innodb_stats_persistent=0 時,innodb_stats_transient_sample_pages 的值會影響所有 InnoDB 資料表和索引的索引取樣。當您變更索引取樣大小時,請注意以下可能產生的重大影響:

  • 像 1 或 2 這樣的小值可能會導致不準確的基數估計。

  • 增加 innodb_stats_transient_sample_pages 值可能需要更多的磁碟讀取。遠大於 8(例如 100)的值可能會導致開啟資料表或執行 SHOW TABLE STATUS 所需的時間顯著變慢。

  • 優化器可能會根據不同的索引選擇性估計來選擇非常不同的查詢計畫。

無論 innodb_stats_transient_sample_pages 的哪個值最適合系統,請設定該選項並將其保留在該值。選擇一個可以為資料庫中的所有資料表產生相當準確估計的值,而無需過多的 I/O。由於統計資訊會在執行 ANALYZE TABLE 以外的其他各種時間自動重新計算,因此增加索引取樣大小,執行 ANALYZE TABLE,然後再次減小取樣大小是沒有意義的。

較小的資料表通常比大型資料表需要較少的索引樣本。如果您的資料庫有許多大型資料表,請考慮使用比您主要使用較小資料表時更高的 innodb_stats_transient_sample_pages 值。