文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  設定非持久性最佳化工具統計參數

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 值。