【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
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_size
/ innodb_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