1. 程式人生 > >【MySQL引數】-innodb_buffer_pool_chunk_size

【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