相關文件 下載本手冊
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 參考手冊  /  MySQL 8.4 常見問題  /  MySQL 8.4 常見問題:InnoDB 變更緩衝區

A.16 MySQL 8.4 常見問題:InnoDB 變更緩衝區

A.16.1. 哪些類型的操作會修改次要索引並導致變更緩衝?
A.16.2. InnoDB 變更緩衝區的好處是什麼?
A.16.3. 變更緩衝區是否支援其他類型的索引?
A.16.4. InnoDB 為變更緩衝區使用多少空間?
A.16.5. 如何判斷變更緩衝區的目前大小?
A.16.6. 何時會發生變更緩衝區合併?
A.16.7. 何時會刷新變更緩衝區?
A.16.8. 何時應使用變更緩衝區?
A.16.9. 何時不應使用變更緩衝區?
A.16.10. 在哪裡可以找到有關變更緩衝區的其他資訊?

A.16.1.

哪些類型的操作會修改次要索引並導致變更緩衝?

INSERTUPDATEDELETE 操作可以修改次要索引。如果受影響的索引頁面不在緩衝池中,則變更可以緩衝在變更緩衝區中。

A.16.2.

InnoDB 變更緩衝區的好處是什麼?

當次要索引頁面不在緩衝池中時,緩衝次要索引變更可以避免昂貴的隨機存取 I/O 操作,這些操作需要立即從磁碟讀取受影響的索引頁面。緩衝的變更可以在之後以批次方式應用,因為其他讀取操作會將頁面讀取到緩衝池中。

A.16.3.

變更緩衝區是否支援其他類型的索引?

否。變更緩衝區僅支援次要索引。不支援叢集索引、全文索引和空間索引。全文索引有自己的快取機制。

A.16.4.

InnoDB 為變更緩衝區使用多少空間?

在 MySQL 5.6 中引入 innodb_change_buffer_max_size 設定選項之前,系統表格空間中磁碟上變更緩衝區的最大大小是 InnoDB 緩衝池大小的 1/3。

在 MySQL 5.6 及更新版本中,innodb_change_buffer_max_size 設定選項將變更緩衝區的最大大小定義為總緩衝池大小的百分比。依預設,innodb_change_buffer_max_size 設定為 25。最大設定值為 50。

如果操作會導致磁碟上的變更緩衝區超出定義的限制,InnoDB 則不會緩衝該操作。

變更緩衝區頁面不需要保留在緩衝池中,可能會被 LRU 操作逐出。

A.16.5.

如何判斷變更緩衝區的目前大小?

變更緩衝區的目前大小由 SHOW ENGINE INNODB STATUS \GINSERT BUFFER AND ADAPTIVE HASH INDEX 標題下報告。例如

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges

相關資料點包括

  • size:變更緩衝區中使用的頁面數。變更緩衝區大小等於 seg size - (1 + free list len)1 + 值表示變更緩衝區標頭頁面。

  • seg size:變更緩衝區的大小(以頁面為單位)。

如需有關監控變更緩衝區狀態的資訊,請參閱 第 17.5.2 節「變更緩衝區」

A.16.6.

何時會發生變更緩衝區合併?

  • 當頁面讀入緩衝池時,緩衝的變更會在讀取完成後合併,然後該頁面才會可供使用。

  • 變更緩衝區合併是作為背景工作執行。 innodb_io_capacity 參數設定 InnoDB 背景工作 (例如從變更緩衝區合併資料) 執行的 I/O 活動上限。

  • 在崩潰復原期間會執行變更緩衝區合併。當索引頁面讀入緩衝池時,會將變更從變更緩衝區(在系統表格空間中)應用到次要索引的葉頁。

  • 變更緩衝區是完全持久的,可以在系統崩潰後繼續存在。重新啟動後,變更緩衝區合併操作會作為正常操作的一部分繼續執行。

  • 使用 --innodb-fast-shutdown=0,可以強制變更緩衝區完全合併,作為伺服器緩慢關閉的一部分。

A.16.7.

何時會刷新變更緩衝區?

更新的頁面由刷新佔用緩衝池的其他頁面的相同刷新機制刷新。

A.16.8.

何時應使用變更緩衝區?

變更緩衝區是一項旨在減少次要索引隨索引增大且不再適合 InnoDB 緩衝池時的隨機 I/O 的功能。一般而言,當整個資料集不適合緩衝池、當存在修改次要索引頁面的大量 DML 活動,或者當存在許多經常被 DML 活動變更的次要索引時,應該使用變更緩衝區。

A.16.9.

何時不應使用變更緩衝區?

如果整個資料集都適合 InnoDB 緩衝池,如果您相對只有少數次要索引,或者您正在使用固態儲存,其中隨機讀取與循序讀取的速度差不多快,則可以考慮停用變更緩衝區。在進行組態變更之前,建議您使用代表性工作負載執行測試,以判斷停用變更緩衝區是否提供任何好處。

A.16.10.

在哪裡可以找到有關變更緩衝區的其他資訊?

請參閱 第 17.5.2 節「變更緩衝區」