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,然后应用到需要修改的实例。如果已有模板,可以修改模板后应用到需要修改的实例。详情请参见使用参数模板。
相关文档
您也可以根据实例的监控信息和慢日志分析,分析并处理RDS MySQL内存使用问题。