不同的設定對於具有輕量、可預測負載的伺服器,以及持續接近滿載或遇到高活動尖峰的伺服器效果最佳。
由於 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
在任何時間處理的執行緒數量的上限,並允許每個執行緒在被換出之前執行大量工作,以便等待的執行緒數量保持較低,並且操作可以在沒有過度上下文切換的情況下完成。