【MySQL參數】-innodb_buffer_pool_chunk_size


 

 

 

 

 

如果 初始化緩沖池時 innodb_buffer_pool_chunk_size* innodb_buffer_pool_instances大於當前緩沖池大小, innodb_buffer_pool_chunk_size 則截斷為 innodb_buffer_pool_size/ innodb_buffer_pool_instances。

緩沖池大小必須始終等於innodb_buffer_pool_chunk_size *  innodb_buffer_pool_instances的倍數。如果更改 innodb_buffer_pool_chunk_size, innodb_buffer_pool_size 則會自動舍入為等於innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍數。初始化緩沖池時會進行調整。

舉例說明:

innodb_buffer_pool_size設置為3G,innodb_buffer_pool_instances設置為8。innodb_buffer_pool_chunk_size默認值為128M。

3G是有效的innodb_buffer_pool_size值,因為3G是innodb_buffer_pool_instances = 8 * innodb_buffer_pool_chunk_size = 128M的倍數

innodb_buffer_pool_size設置為3G,innodb_buffer_pool_instances設置為16. innodb_buffer_pool_chunk_size為128M。

3G不是有效的innodb_buffer_pool_size值,因為3G不是innodb_buffer_pool_instances = 16 * innodb_buffer_pool_chunk_size = 128M的倍數,可以看出innodb_buffer_pool_size的值自動調整到4GB。

截斷舉例:

如果緩沖池初始化的大小為2GB(2147483648字節), 4緩沖池實例和塊大小1GB(1073741824字節),則塊大小將截斷為等於innodb_buffer_pool_size/ 的值innodb_buffer_pool_instances

shell> mysqld --innodb-buffer-pool-size=2147483648 --innodb-buffer-pool-instances=4
--innodb-buffer-pool-chunk-size=1073741824;

mysql> SELECT @@innodb_buffer_pool_size;
+---------------------------+
| @@innodb_buffer_pool_size |
+---------------------------+
|                2147483648 |
+---------------------------+

mysql> SELECT @@innodb_buffer_pool_instances;
+--------------------------------+
| @@innodb_buffer_pool_instances |
+--------------------------------+
|                              4 |
+--------------------------------+

# Chunk size was set to 1GB (1073741824 bytes) on startup but was
# truncated to innodb_buffer_pool_size / innodb_buffer_pool_instances

mysql> SELECT @@innodb_buffer_pool_chunk_size;
+---------------------------------+
| @@innodb_buffer_pool_chunk_size |
+---------------------------------+
|                       536870912 |
+---------------------------------+

 

注意:innodb_buffer_pool_chunk_size可以以1MB(1048576字節)為單位增加或減少,但只能在啟動時,命令行字符串或MySQL配置文件中進行修改。為避免潛在的性能問題,塊數(innodb_buffer_pool_sizeinnodb_buffer_pool_chunk_size)不應超過1000。更改時應小心 innodb_buffer_pool_chunk_size,因為更改此值可以自動增加緩沖池的大小。在更改之前 innodb_buffer_pool_chunk_size,請計算它將產生的影響, innodb_buffer_pool_size以確保生成的緩沖池大小可以接受

 

在線緩沖池調整內部

調整大小操作由后台線程執行。增加緩沖池的大小時,調整大小操作:

  • 添加頁面chunks(塊大小定義 innodb_buffer_pool_chunk_size

  • 隱藏在內存中使用新地址的哈希表,列表和指針

  • 將新頁面添加到空閑列表

當這些操作正在進行時,其他線程將被阻止訪問緩沖池。

減小緩沖池的大小時,調整大小操作:

  • 對緩沖池進行碎片整理並撤消(釋放)頁面

  • 刪除頁面chunks(塊大小定義 innodb_buffer_pool_chunk_size

  • 轉換哈希表,列表和指針以在內存中使用新地址

 

參考:官方文檔:

https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_buffer_pool_chunk_size

https://dev.mysql.com/doc/refman/5.7/en/innodb-buffer-pool-resize.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM