块更改:InnoDB缓冲池大小调整
自MySQL 5.7.5以来,我们已经能够动态调整InnoDB缓冲池的大小。这个新功能还引入了一个新变量 - innodb_buffer_pool_chunk_size - 它定义了缓冲池被放大或缩小的块大小。此变量不是动态的,如果配置不正确,可能会导致不希望出现的情况。
先来看看innodb_buffer_pool_size,innodb_buffer_pool_instances和innodb_buffer_pool_chunk_size如何交互:
缓冲池可以容纳多个实例,每个实例被分成块。我们需要考虑一些信息:实例数量从1到64,总块数不应超过1000。
因此,对于具有3GB RAM的服务器,具有8个实例的2GB缓冲池和默认值(128MB)的块,我们将获得每个实例2个块:
这意味着将会有16块。
我不打算解释拥有多个实例的好处,我将专注于调整操作大小。你为什么要调整缓冲池的大小?那么,有几个原因,比如:
在虚拟服务器上,您可以动态添加更多内存
对于物理服务器,您可能希望减少数据库内存使用量以让其他进程取而代之
在数据库大小小于可用RAM的系统上
如果您预计会有巨大的增长并希望按需增加缓冲池
减少缓冲池
我们开始减少缓冲池
| innodb_buffer_pool_size | 2147483648 |
| innodb_buffer_pool_instances | 8 |
| innodb_buffer_pool_chunk_size | 134217728 |
mysql> set global innodb_buffer_pool_size=1073741824;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'innodb_buffer_pool_size';
+-------------------------+------------+
| Variable_name | Value |
+-------------------------+------------+
| innodb_buffer_pool_size | 1073741824 |
+-------------------------+------------+
1 row in set (0.00 sec)
如果我们试图将其降低到1.5GB,那么缓冲池不会改变,并会显示警告:
mysql> set global innodb_buffer_pool_size=1610612736;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+--------------------------------------------------------------------------