文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  設定 InnoDB I/O 容量

17.8.7 設定 InnoDB I/O 容量

InnoDB 主執行緒和其他執行緒會在背景中執行各種工作,其中大多數與 I/O 相關,例如從緩衝池刷新髒頁,以及將變更從變更緩衝區寫入適當的次要索引。InnoDB 會嘗試以不影響伺服器正常運作的方式執行這些工作。它會嘗試估計可用的 I/O 頻寬,並調整其活動以利用可用的容量。

innodb_io_capacity 變數定義 InnoDB 可用的整體 I/O 容量。它應該設定為系統每秒可以執行的 I/O 作業數 (IOPS) 的近似值。設定 innodb_io_capacity 時,InnoDB 會根據設定的值估計可用於背景工作的 I/O 頻寬。

您可以將 innodb_io_capacity 設定為 100 或更大的值。預設值為 10000。通常,較快硬碟機、RAID 設定和固態硬碟 (SSD) 的值會高於較低階的儲存裝置,例如高達 7200 RPM 的硬碟機。

理想情況下,請盡可能將設定保持在實際的低值,但不要太低而導致背景活動落後。如果值太高,則會從緩衝池和變更緩衝區中過快移除資料,以致快取無法提供顯著的好處。對於能夠執行較高 I/O 速率的忙碌系統,您可以設定較高的值,以協助伺服器處理與高資料列變更速率相關的背景維護工作。通常,您可以根據用於 InnoDB I/O 的磁碟機數量來增加值。例如,您可以在使用多個磁碟或 SSD 的系統上增加值。

雖然您可以指定一百萬之類的高值,但實際上,如此大的值幾乎沒有好處。一般來說,除非您確定較低的值不足以應付您的工作負載,否則不建議使用高於 20000 的值。另請參閱 innodb_io_capacity_max 選項,此選項會在刷新落後時自動增加此值。

調整 innodb_io_capacity 時,請考慮寫入工作負載。具有大量寫入工作負載的系統可能會受益於較高的設定。對於具有少量寫入工作負載的系統,較低的設定可能就足夠了。

innodb_io_capacity 設定不是每個緩衝池執行個體的設定。可用的 I/O 容量會平均分配給緩衝池執行個體以進行刷新活動。

您可以在 MySQL 選項檔案 (my.cnfmy.ini) 中設定 innodb_io_capacity 值,或使用 SET GLOBAL 陳述式在執行階段修改它,這需要足夠的權限才能設定全域系統變數。請參閱 第 7.1.9.1 節「系統變數權限」

在檢查點忽略 I/O 容量

innodb_flush_sync 變數預設為啟用,這會導致在 檢查點發生的 I/O 活動爆發期間忽略 innodb_io_capacity 設定。若要堅持使用 innodb_io_capacityinnodb_io_capacity_max 設定定義的 I/O 速率,請停用 innodb_flush_sync

您可以在 MySQL 選項檔案(my.cnfmy.ini)中設定 innodb_flush_sync 的值,或是在執行階段使用 SET GLOBAL 陳述式修改它,這需要足夠的權限才能設定全域系統變數。請參閱第 7.1.9.1 節「系統變數權限」

設定 I/O 容量上限

如果刷新活動落後,InnoDB 可以更積極地刷新,以高於 innodb_io_capacity 變數定義的每秒 I/O 操作次數 (IOPS) 速率進行。 innodb_io_capacity_max 變數定義在這種情況下 InnoDB 背景任務執行的最大 IOPS 數量。

如果您在啟動時指定了 innodb_io_capacity 設定,但沒有為 innodb_io_capacity_max 指定值,則 innodb_io_capacity_max 預設為 innodb_io_capacity 值的兩倍。

在設定 innodb_io_capacity_max 時,通常以 innodb_io_capacity 的兩倍作為良好的起點。與 innodb_io_capacity 設定一樣,保持設定盡可能低,但不要太低,以至於 InnoDB 無法充分擴展超出 innodb_io_capacity 設定的 IOPS 速率。

調整 innodb_io_capacity_max 時,請考慮寫入工作負載。具有大量寫入工作負載的系統可能會受益於更高的設定。較低的設定可能足以應付寫入工作負載較小的系統。

innodb_io_capacity_max 的值不能設定低於 innodb_io_capacity 的值。

使用 SET 陳述式(SET GLOBAL innodb_io_capacity_max=DEFAULT)將 innodb_io_capacity_max 設定為 DEFAULT 會將 innodb_io_capacity_max 設定為預設值。在 MySQL 8.4 之前,這會將其設定為最大值而非預設值。

innodb_io_capacity_max 限制適用於所有緩衝池實例。它不是每個緩衝池實例的設定。