這個參數主要作用是緩存innodb表的索引,數據,插入數據時的緩沖
默認值:128M
專用mysql服務器設置的大小: 操作系統內存的70%-80%最佳。
MySQL 5.7.5後Innodb_buffer_pool_size一方面可以動態分配。但另一方面也引入了一個新特性。 bp分配必須是innodb_buffer_pool_chunk_size的倍數。同時最好是:
innodb_buffer_pool_chunk_size*innodb_buffer_pool_instances.
innodb_buffer_pool_chunk_size默認是128M.
當Innodb_buffer_pool_size分配小於innodb_buffer_pool_chunk_size時,innodb_buffer_pool_chunk_size收縮到等於innodb_buffer_pool_size/innodb_buffer_pool_instances.
當於innodb_buffer_pool_size 大於innodb_buffer_pool_chunk_size時,innodb_buffer_pool_chunk_size自動取innodb_buffer_pool_chunk_size的倍數從而獲取更好的性能。
所以於MySQL5.7.5對於Buffer的分配需要提前計算一下。 盡量讓 innodb_buffer_pool_size = innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances 從而獲取一個較佳的性能。
設置方法:
my.cnf文件
innodb_buffer_pool_size = 6G
此外,這個參數是非動態的,要修改這個值,需要重啟mysqld服務。
所以設置的時候要非常謹慎。
並不是設置的越大越好。設置的過大,會導致system的swap空間被占用,導致操作系統變慢,從而減低sql查詢的效率。
例子
代碼如下 復制代碼mysql> SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_data';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| Innodb_buffer_pool_pages_data | 1388 |
+-------------------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_total';
+--------------------------------+--------+
| Variable_name | Value |
+--------------------------------+--------+
| Innodb_buffer_pool_pages_total | 131071 |
+--------------------------------+--------+
1 row in set (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'Innodb_page_size';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| Innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)
'Innodb_buffer_pool_pages_data' X 100 / 'Innodb_buffer_pool_pages_total'
當結果 > 95% 則增加 innodb_buffer_pool_size, 建議使用 ram total 75%
當結果 < 95% 則減少 innodb_buffer_pool_size,
建議 'Innodb_buffer_pool_pages_data' X 'Innodb_page_size' X 1.05 / (1024*1024*1024)