innodb_buffer_pool_size是什麼?
innodb_buffer_pool是 InnoDB
緩衝池,是一個記憶體區域儲存快取的 InnoDB
資料為表、索引和其他輔助緩衝區。innodb_buffer_pool_size 是這個緩衝池的大小,預設128M(即134217728 bytes)。
innodb_buffer_pool_size有什麼用?
如果不設定innodb_buffer_pool_size,在生產環境的sql執行效率將大大下降,原因是快取的空間變小,能快取的資料量有限,快取的命中率大打折扣,會導致反覆去磁碟上讀資料,眾所周知磁碟的速度遠遠低於記憶體的執行效率。
innodb_buffer_pool_size的值配置有什麼要求?
innodb_buffer_pool_size的值必須是(innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
)的整數倍,即可以相等或更大。
-- 顯示當前使用的innodb緩衝池大小 及 緩衝池例項數與主幹大小
SELECT @@innodb_buffer_pool_size as pool_size,
@@innodb_buffer_pool_instances as pool_instances,
@@innodb_buffer_pool_chunk_size as chunk_size;
innodb_buffer_pool_size設定方式
兩種設定方式,區別在於MySQL的執行狀態,靜態設定需要重啟MySQL,動態設定在MySQL執行期動態調整。
靜態設定:
- 修改my.cnf,在
[mysqld]
作用域新增innodb_buffer_pool_size=計算值
。 - 重啟mysql。
動態設定:
- 執行
SET GLOBAL innodb_buffer_pool_size=計算值;
設定緩衝池大小。 - 執行
SHOW STATUS WHERE Variable_name='InnoDB_buffer_pool_resize_status';
查詢緩衝池大小改變狀態,出現Completed resizing buffer pool at 時間戳
即完成。 - 執行
SELECT @@innodb_buffer_pool_size;
查詢當前緩衝池大小。