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


MySQL 9.0 參考手冊  /  ...  /  優化 InnoDB 設定變數

10.5.9 優化 InnoDB 設定變數

不同的設定對於具有輕量、可預測負載的伺服器,以及持續接近滿載或遇到高活動尖峰的伺服器效果最佳。

由於 InnoDB 儲存引擎會自動執行許多最佳化,因此許多效能調整任務都涉及監控,以確保資料庫運作良好,並在效能下降時變更組態選項。如需有關詳細 InnoDB 效能監控的資訊,請參閱 第 17.16 節,「InnoDB 與 MySQL Performance Schema 的整合」

您可以執行的主要組態步驟包括

  • 控制 InnoDB 緩衝變更資料的資料變更操作類型,以避免頻繁的小型磁碟寫入。請參閱設定變更緩衝。啟用變更緩衝可以在 IO 綁定工作負載上提供更好的效能,但可能會在復原、大量載入或緩衝池調整大小期間導致問題。停用它(MySQL 8.4 的預設值)有助於確保穩定性,即使它可能會降低效能。

  • 使用 innodb_adaptive_hash_index 選項開啟和關閉自適應雜湊索引功能。如需更多資訊,請參閱第 17.5.3 節,「自適應雜湊索引」。您可能會在異常活動期間變更此設定,然後將其還原為原始設定。

  • 如果內容切換是瓶頸,則限制 InnoDB 處理的並行執行緒數量。請參閱第 17.8.4 節,「設定 InnoDB 的執行緒並行」

  • 使用其預讀操作控制 InnoDB 執行的預先提取量。當系統有未使用的 I/O 容量時,更多的預讀可以改善查詢的效能。過多的預讀可能會導致負載重的系統效能定期下降。請參閱第 17.8.3.4 節,「設定 InnoDB 緩衝池預先提取(預讀)」

  • 如果您有高階 I/O 子系統未被預設值充分利用,則增加讀取或寫入操作的背景執行緒數量。請參閱第 17.8.5 節,「設定背景 InnoDB I/O 執行緒的數量」

  • 控制 InnoDB 在背景執行多少 I/O。請參閱第 17.8.7 節,「設定 InnoDB I/O 容量」。如果您觀察到效能定期下降,您可能會縮減此設定。

  • 控制 InnoDB 何時執行特定類型背景寫入的演算法。請參閱第 17.8.3.5 節,「設定緩衝池清除」。該演算法適用於某些類型的工作負載,但不適用於其他類型,因此如果您觀察到效能定期下降,您可能會停用此功能。

  • 利用多核心處理器及其快取記憶體組態,以最大限度地減少內容切換的延遲。請參閱第 17.8.8 節,「設定自旋鎖定輪詢」

  • 防止諸如資料表掃描之類的一次性操作干擾儲存在 InnoDB 緩衝快取中的頻繁存取資料。請參閱第 17.8.3.3 節,「使緩衝池具有抗掃描能力」

  • 調整日誌檔案的大小,使其對於可靠性和當機復原具有意義。InnoDB 日誌檔案通常會保持較小,以避免當機後啟動時間過長。MySQL 5.5 中引入的優化措施加快了當機復原過程的某些步驟。特別是,由於改進了記憶體管理演算法,掃描重做日誌並套用重做日誌的速度更快。如果您為了避免啟動時間過長而將日誌檔案人為地保持較小,您現在可以考慮增加日誌檔案的大小,以減少重做日誌記錄回收時發生的 I/O。

  • 設定 InnoDB 緩衝池的大小和實例數量,這對於具有數 GB 緩衝池的系統尤其重要。請參閱第 17.8.3.2 節,「設定多個緩衝池實例」

  • 增加並行交易的最大數量,這顯著提高了最繁忙資料庫的可擴展性。請參閱第 17.6.6 節,「復原日誌」

  • 將清除操作(一種垃圾回收)移至背景執行緒。請參閱第 17.8.9 節,「清除設定」。為了有效衡量此設定的結果,請先調整其他與 I/O 和執行緒相關的設定。

  • 減少 InnoDB 在並行執行緒之間切換的次數,以便繁忙伺服器上的 SQL 操作不會排隊形成交通堵塞。為 innodb_thread_concurrency 選項設定一個值,對於高效能的現代系統,大約可設定為 32。增加 innodb_concurrency_tickets 選項的值,通常為 5000 左右。此選項組合設定了 InnoDB 在任何時間處理的執行緒數量的上限,並允許每個執行緒在被換出之前執行大量工作,以便等待的執行緒數量保持較低,並且操作可以在沒有過度上下文切換的情況下完成。