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. | 哪些類型的操作會修改次要索引並導致變更緩衝? |
|
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 節「變更緩衝區」。 |