RDS MySQL内存管理
官方文档地址:https://help.aliyun.com/product/26090.html?spm=5176.7920929.1290474.7.2c6f4f7bACaToi
官方文档地址:https://files.cnblogs.com/files/sanduzxcvbnm/RDS_MySQL_数据库_cn_zh-CN.pdf
内存的规格会决定该实例的性能。
您可以根据业务情况调整RDS MySQL实例的innodb_buffer_pool_size大小,以便提升实例性能。
背景信息
RDS MySQL实例的内存主要用于以下几个方面:
- mysqld服务。主要是缓存(InnoDB Buffer Pool)占用内存,InnoDB Buffer Pool大小由参数innodb_buffer_pool_size指定。
- RDS相关管理服务。
- 底层操作系统。
本地SSD盘
实例规格内存 = mysqld服务内存
对于RDS MySQL本地SSD盘实例,实例规格内存即为mysqld服务可占用内存,主要包括InnoDB Buffer Pool占用内存和MySQL其他服务占用内存(如会话连接占用内存)。本地SSD盘实例会在物理机内通过资源隔离实现多实例部署,故RDS相关管理服务和底层操作系统占用的内存没有计算在RDS实例规格的内存中。
云盘(SSD云盘或ESSD云盘)
实例规格内存 = mysqld服务内存 + RDS相关管理服务内存 + 底层操作系统内存
对于RDS MySQL云盘实例,实例规格内存包含上述3个部分,因为云盘实例是独立部署于不同的ECS实例中,因此需要划分对应的内存用于运行RDS相关管理服务和底层操作系统。
底层操作系统一般会占用500~700MB内存,RDS相关管理服务约占用500MB内存。
InnoDB Buffer Pool设置
RDS实例可以通过参数innodb_buffer_pool_size来调整InnoDB Buffer Pool的大小,当前仅支持通过公式进行修改。公式如下:
{DBInstanceClassMemory*X/Y}
示例
{DBInstanceClassMemory*7/10}
说明
- DBInstanceClassMemory为RDS实例规格内存系统变量。
- X、Y为分子和分母。
- 可调整范围为:[128MB, DBInstanceClassMemory*8/10 ],即最小调整到128MB,最大调整到RDS实例规格内存的80%。
RDS实例默认InnoDB Buffer Pool大小如下:
- 如果RDS云盘实例规格内存<16GB,默认InnoDB Buffer Pool = (RDS实例规格内存 - RDS相关管理服务内存 - 底层操作系统内存)* 0.7。
- 如果RDS云盘实例规格内存 ≥ 16GB,或RDS实例为本地SSD盘,默认InnoDB Buffer Pool = RDS实例规格内存 * 0.7。
为了保障实例稳定性,对于1核1GB、1核2GB等小规格实例,innodb_buffer_pool_size默认设置为256MB。
InnoDB Buffer Pool大小始终为innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
的倍数,如果不为倍数关系时,会自动修改为倍数关系。例如innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances
=1GB,如果将innodb_buffer_pool_size设置为1.5GB,系统会自动修改innodb_buffer_pool_size为2GB。
警告 修改 innodb_buffer_pool_size会重启实例,请谨慎操作。