云数据库MySQL实例的内存使用率告警

更新时间:

问题描述

在RDS管理控制台的报警页面,MySQL实例出现内存使用率告警。

问题原因

  • 监控指标设置不合理。
  • 实例内存使用出现异常。

解决方案

检查实例的内存使用情况

登录该实例,执行如下SQL语句,检查当前实例的内存使用情况。

show variables
where variable_name in ('innodb_buffer_pool_size',
                        'innodb_log_buffer_size',
                        'innodb_additional_mem_pool_size',
                        'key_buffer_size',
                        'query_cache_size');

系统返回类似如下,本文以内存规格为240MB的RDS实例为例。

+---------------------------------+-----------------+
| Variable_name                   | Value           |
+---------------------------------+-----------------+
| innodb_additional_mem_pool_size | 2097152         |
| innodb_buffer_pool_size         | 67108864        |
| innodb_log_buffer_size          | 1048576         |
| key_buffer_size                 | 16777216        |
| query_cache_size                | 0               |
+---------------------------------+-----------------+
共返回 5 行记录,花费 342.74 ms.

监控指标设置不合理

检查innodb_buffer_pool_size参数,确认该参数值当前的大小。大部分内存占用告警,都是因为实例的缓冲池增长导致,而缓冲池的增长是正常的。所以这类报警属于监控指标设置不合理造成的误报。

云数据库 RDS MySQL 版的缓冲池默认使用实例内存规格的80%,在实例使用过程中势必会造成缓冲池内存占比的增加。当内存使用超过80%出现告警,且确认为缓冲池内存占用时,建议将监控指标设置为90%。有关监控指标的设置可参考配置报警规则

内存使用出现异常

当出现内存使用率超过90%的告警时,一般考虑如下两方面。

  • 确认是否存在Session过多的情况,如果空闲Session过多,需要评估空闲Session数量设置的是否合理。如何查看Session可参考MySQL官方文档
  • 确认是否单个Session占用过多的私有内存,主要排查创建临时表、sort或join等操作,这类操作会占用较多私有内存。

适用于

  • 云数据库 RDS MySQL 版