首页 > 编程笔记 > MySQL笔记 阅读:32

MySQL innodb_buffer_pool_size:动态修改InnoDB缓冲池大小(附带实例)

MySQL 5.7.5 版本开始,支持在不重启系统的情况下动态调整 innodb_buffer_pool_size。

调整大小的过程是以 innodb_buffer_pool_chunk_size 为单位迁移 pages 到新的内存空间的过程,迁移进度可以通过 innodb_buffer_pool_resize_status 查看。当在线修改缓冲池大小时,以 chunk 为单位进行增长或收缩。

缓冲池大小是 innodb_buffer_pool_chunk_size×innodb_buffer_pool_instances 的倍数(128MB 的倍数),如果不是,系统将会适当调大 innodb_buffer_pool_size,以满足要求。因此,可能会出现缓冲池大小的实际分配比配置文件中指定的 size 要大的情况。

下面举例说明如何在线调整缓冲池的大小。
1) 在线调整缓冲池的大小。查看当前缓冲池的大小,SQL 语句如下:
mysql> show variables like '%innodb_buffer_pool_size%';
+-------------------------+----------+
| Variable_name           | Value    |
+-------------------------+----------+
| innodb_buffer_pool_size | 16777216 |
+-------------------------+----------+

2) 查看缓冲池中实例的个数,SQL 语句如下:
mysql> show variables like 'innodb_buffer_pool_instances';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| innodb_buffer_pool_instances | 1     |
+------------------------------+-------+

3) 动态修改缓冲池的大小为 1000MB,SQL 语句如下:
mysql> set global innodb_buffer_pool_size=1048576000;
Query OK, 0 rows affected, 1 warning (0.00 sec)

4) 查看警告信息,SQL 语句如下:
mysql> show warnings;
+---------+------+---------------------------------------------------------------+
| Level   | Code | Message                                                       |
+---------+------+---------------------------------------------------------------+
| Warning | 1292 |Truncated incorrect innodb_buffer_pool_size value: '1048576000'|
+---------+------+---------------------------------------------------------------+
1 row in set (0.00 sec)
出现上述警告信息的原因是,1000MB 不是 innodb_buffer_pool_chunk_size×innodb_buffer_pool_instances 的倍数,即不是 128MB 的倍数。

5) 查看缓冲池的设置进度,SQL 语句如下:
mysql> show global status like 'Innodb_buffer_pool_resize_status';
+----------------------------------+---------------------------------------------------+
| Variable_name                    | Value                                             |
+----------------------------------+---------------------------------------------------+
| Innodb_buffer_pool_resize_status | Completed resizing buffer pool at 180816 17:00:31.|
+----------------------------------+---------------------------------------------------+
1 row in set (0.01 sec)

6) 查看当前缓冲池的大小,SQL 语句如下:
mysql> show variables like '%innodb_buffer_pool_size%';
+-------------------------+------------+
| Variable_name           | Value      |
+-------------------------+------------+
| innodb_buffer_pool_size | 1056964608 |
+-------------------------+------------+
从结果可以看出,缓冲池的大小被设置成了 1056964608 字节(约 1024MB),因为 1024 是 128 的整数倍,缓冲池大小比配置文件里指定的 size 要大。

相关文章