innodb_buffer_pool_size用于设置InnoDB缓冲池的大小。您可以根据业务需求调整RDS MySQL实例的innodb_buffer_pool_size,以提升实例性能。
前提条件
实例系列如下:
-
RDS MySQL高可用系列
-
RDS MySQL基础系列
-
RDS MySQL集群系列
应用限制
-
RDS MySQL Serverless实例不支持手动修改innodb_buffer_pool_size参数,实例会根据规格变化自动调整InnoDB Buffer Pool的大小。
-
若RDS MySQL实例的innodb_buffer_pool_size参数设置过大,可能导致内存溢出(OOM)并触发主备切换,建议按本文推荐的最大Buffer Pool值进行配置。
应用场景
在日常使用中,除了内存有限的情况下,建议增大该参数,以优化数据库性能。
-
增大:在服务器内存充足的情况下,增大innodb_buffer_pool_size可以有效减少磁盘I/O吞吐量。如果查询的数据能够完全或大部分存储在内存中,CPU便不需要频繁等待磁盘I/O,从而有助于降低CPU的使用率。例如,对于频繁执行的UPDATE类型语句,较大的缓冲池能够减少对磁盘的依赖,减轻行锁等待,进而提高MySQL处理数据更新的效率,尤其是在更新的记录较多时。
-
减小:在内存资源有限,或者有其他应用对内存需求较高的情况下,可以减小innodb_buffer_pool_size参数值。
InnoDB Buffer Pool大小
RDS实例可以通过参数innodb_buffer_pool_size来调整InnoDB Buffer Pool的大小,当前仅支持通过公式进行修改。公式如下:
{DBInstanceClassMemory*X/Y}
# 示例:{DBInstanceClassMemory*7/10}
-
DBInstanceClassMemory为RDS实例规格内存(系统变量),X/Y表示Buffer Pool大小占实例内存的比例。 -
可调整范围为:[128 MB, DBInstanceClassMemory * 9 / 10],即最小调整到128 MB,最大调整到RDS实例规格内存的90%。
InnoDB Buffer Pool大小默认值
高性能本地盘实例
以下规格Buffer Pool大小默认值为实例内存的80%~90%,其他规格默认值为实例内存的75%(实例内存 * 3 / 4)。
|
规格族 |
规格码 |
CPU与内存 |
默认值(MB)及其占实例内存比例 |
|
通用型 |
rds.mysql.s3.large |
4核 8GB |
7372(90%) |
|
rds.mysql.m1.medium |
4核 16GB |
14745(90%) |
|
|
rds.mysql.c1.large |
8核 16GB |
13107(80%) |
|
|
rds.mysql.c1.xlarge |
8核 32GB |
27852(85%) |
|
|
rds.mysql.c2.xlarge |
16核 64GB |
52428(80%) |
|
|
rds.mysql.c2.xlp2 |
16核 96GB |
78643(80%) |
|
|
独享型 |
mysql.x4.large.2 |
4核 16GB |
14745(90%) |
|
mysql.x8.large.2 |
4核 32GB |
29491(90%) |
|
|
mysql.x4.xlarge.2 |
8核 32GB |
27852(85%) |
|
|
mysql.x8.xlarge.2 |
8核 64GB |
55705(85%) |
|
|
mysql.x4.2xlarge.2 |
16核 64GB |
52428(80%) |
|
|
mysql.x8.2xlarge.2 |
16核 128GB |
104857(80%) |
云盘实例
通用型规格
Buffer Pool大小默认值为实例内存的75%(实例内存 * 3 / 4)。
独享型规格
-
Buffer Pool大小默认值:
(实例内存 - 系统预留内存) * 3 / 4 -
系统预留内存计算公式为:
min{实例内存 / 2, 2048} + max{实例CPU * 64, 实例内存 / 64} + (实例内存 / 64) + 285,实例内存单位取MB。
为方便您设置,下表提供了独享型规格实例对应的默认Buffer Pool和推荐最大Buffer Pool。
|
实例CPU核数 |
实例内存(MB) |
Buffer Pool大小 |
|
|
默认值(MB) |
推荐值(MB) |
||
|
2 |
4096 |
1024 |
1024 |
|
2 |
8192 |
4096 |
4096 |
|
2 |
16384 |
9216 |
10240 |
|
4 |
8192 |
4096 |
4096 |
|
4 |
16384 |
9216 |
10240 |
|
4 |
32768 |
21504 |
22528 |
|
8 |
16384 |
9216 |
10240 |
|
8 |
32768 |
21504 |
22528 |
|
8 |
65536 |
45056 |
48128 |
|
12 |
24576 |
15360 |
16384 |
|
12 |
49152 |
33792 |
35840 |
|
12 |
98304 |
69632 |
73728 |
|
16 |
32768 |
21504 |
22528 |
|
16 |
65536 |
45056 |
48128 |
|
16 |
131072 |
93184 |
99328 |
|
24 |
49152 |
32768 |
34816 |
|
24 |
98304 |
69632 |
73728 |
|
24 |
196608 |
140288 |
149504 |
|
32 |
65536 |
45056 |
47104 |
|
32 |
131072 |
93184 |
99328 |
|
32 |
262144 |
188416 |
200704 |
|
52 |
98304 |
67584 |
72704 |
|
52 |
196608 |
140288 |
149504 |
|
52 |
393216 |
283648 |
302080 |
|
64 |
262144 |
188416 |
200704 |
|
64 |
524288 |
378880 |
403456 |
|
102 |
786432 |
569344 |
607232 |
|
104 |
196608 |
138240 |
147456 |
|
104 |
393216 |
282624 |
302080 |
InnoDB Buffer Pool的容量大小始终为innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数:
-
innodb_buffer_pool_chunk_size固定为32 MB,较早期创建的实例可能为128 MB。 -
当用户设置的
innodb_buffer_pool_size值不为倍数关系时,系统会自动向上取整到最近的整数倍值。
例如:当innodb_buffer_pool_chunk_size为1 GB且innodb_buffer_pool_instances为1时,若将innodb_buffer_pool_size设置为1.5 GB,实际会调整为2 GB。
调整单个实例的InnoDB Buffer Pool大小
访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
-
在左侧导航栏单击参数设置。
-
找到参数innodb_buffer_pool_size,单击右侧
进行修改,然后单击确定。 -
单击提交参数,在弹出的提示框中单击确定。
说明RDS MySQL 5.6的
innodb_buffer_pool_size参数修改需要重启,RDS MySQL5.7和8.0则不需要重启。
使用模板调整InnoDB Buffer Pool大小
您可以新建参数模板修改innodb_buffer_pool_size,然后应用到需要修改的实例。如果已有模板,可以修改模板后应用到需要修改的实例。详情请参见使用参数模板。
将配置值设置为 {DBInstanceClassMemory*7/10},该参数修改后需要重启实例。
相关文档
您也可以根据实例的监控信息和慢日志分析,分析并处理RDS MySQL内存使用问题。