不同的設定對於具有輕量、可預測負載的伺服器,與始終以接近滿載的容量運行的伺服器,或經歷高活動峰值的伺服器,會有最佳的表現。
由於 InnoDB
儲存引擎會自動執行許多最佳化,因此許多效能調整工作都涉及監控,以確保資料庫運作良好,並在效能下降時變更組態選項。請參閱第 17.16 節「InnoDB 與 MySQL Performance Schema 的整合」,以取得有關詳細 InnoDB
效能監控的資訊。
您可以執行的主要組態步驟包括
控制
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
在任何時間處理的執行緒數量上限,並允許每個執行緒在被換出之前執行大量工作,以便等待執行緒的數量保持在較低水平,並且操作可以完成而不會過度地內容切換。