9.MySQL優化Optimizing InnoDB Disk IO
介紹
如果您遵循SQL操作的資料庫設計和調優技術的最佳實踐,但由於磁碟I/O活動繁重,您的資料庫仍然很慢,請考慮這些磁碟I/O優化。如果Unix top工具或Windows工作管理員顯示您的工作負載的CPU使用率百分比低於70%,則您的工作負載可能是磁碟造成的。
-
增大buffer pool size
當表的資料被緩衝到InnoDB的buffer pool中時,可以在查詢中重複訪問這些資料而不用進行磁碟I/O,使用innodb_buffer_pool_size 選項指定緩衝池的大小 。此記憶體區域非常重要,通常建議將 innodb_buffer_pool_size其配置為系統記憶體的50%到75%。
-
調整重新整理方式
在某些版本的GNU/Linux和Unix中,使用Unix fsync重新整理磁碟資料和型別方法的效率都較低。假如資料庫寫入效能非常低,可以考慮 innodb_flush_method設定為ON進行基準測試O_DSYNC。
-
配置寫緩衝區的閾值大小
預設情況下,在InnoDB建立新資料檔案(如新日誌檔案或表空間檔案)時,只有在完全寫入檔案後才會將寫入緩衝區的內容重新整理到磁碟,這可能導致瞬間發生大量磁碟寫入活動。強制進行較小的定期重新整理,請使用 innodb_fsync_threshold (在MySQL 8.0.13中引入)為寫緩衝區定義閾值大小(以位元組為單位)。達到閾值大小時,寫緩衝區的內容將重新整理到磁碟。預設值0強制使用預設行為。
在多個MySQL例項使用相同的儲存裝置的情況下,指定寫入緩衝區閾值大小以強制較小的定期重新整理可能是有益的。例如,建立新的MySQL例項及其關聯的資料檔案可能會導致磁碟寫入活動的大量湧現,從而阻礙使用相同儲存裝置的其他MySQL例項的效能。配置寫入緩衝區閾值大小有助於避免磁碟寫入活動中的此類問題。
-
在LINUX上使用noopp或deadlineI /O排程程式與native AIO
LINUX使用非同步I/O(native AIO)來執行資料檔案頁的 read-ahead 和 write 請求。這個行為被innodb_use_native_aio引數控制,預設是開啟的。對於native AIO,I/O排程程式的型別對I/O效能的影響更大,通常,建議使用noop和deadline I/O排程程式。執行基準測試以確定哪個I/O排程程式為您的工作負載和環境提供最佳結果。