调整实例Buffer Pool大小

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}
说明
  • DBInstanceClassMemoryRDS实例规格内存(系统变量),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_size1 GBinnodb_buffer_pool_instances1时,若将innodb_buffer_pool_size设置为1.5 GB,实际会调整为2 GB。

调整单个实例的InnoDB Buffer Pool大小

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击参数设置

  3. 找到参数innodb_buffer_pool_size,单击右侧修改进行修改,然后单击确定

  4. 单击提交参数,在弹出的提示框中单击确定

    说明

    RDS MySQL 5.6innodb_buffer_pool_size参数修改需要重启,RDS MySQL5.78.0则不需要重启。

使用模板调整InnoDB Buffer Pool大小

您可以新建参数模板修改innodb_buffer_pool_size,然后应用到需要修改的实例。如果已有模板,可以修改模板后应用到需要修改的实例。详情请参见使用参数模板

参数模板修改

相关文档

您也可以根据实例的监控信息慢日志分析,分析并处理RDS MySQL内存使用问题