A.16 MySQL 9.0 常見問題: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. | 哪些類型的操作會修改次要索引並導致變更緩衝? |
|
INSERT 、UPDATE 和 DELETE 操作可以修改次要索引。如果受影響的索引頁面不在緩衝池中,則變更可以緩衝在變更緩衝區中。 |
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 \G 報告,在 INSERT BUFFER AND ADAPTIVE HASH INDEX 標題下。例如 -------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges
相關資料點包括
如需有關監控變更緩衝區狀態的資訊,請參閱第 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 節,〈變更緩衝區〉。 |