内存使用率高怎么处理
内存使用率是用来监控GaussDB(for MySQL)实例内存使用情况的关键指标,如果内存使用率过高,会存在内存耗尽风险。
内存使用率高的排查思路
以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。
如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。
![点击放大](https://support.huaweicloud.com/trouble-gaussdbformysql/zh-cn_image_0000001883007654.png)
原因一:内存相关参数设置不合理
序号 |
参数名称 |
参数描述 |
---|---|---|
1 |
innodb_buffer_pool_size |
InnoDB buffer pool大小。Global级别,容量不会缩减。 |
2 |
table_open_cache |
表缓存的最大打开表数量。Global级别,当open_tables等于table_open_cache且opened_tables在不断增大时,可以适当调大table_open_cache。 |
3 |
sort_buffer_size |
排序buffer大小。Session级别,调大值可以提高排序操作的性能,过大可能会导致内存不足。 |
- 内存相关参数值尽量使用默认值。
- 根据实际情况,合理配置相关参数。
原因二:存在大量消耗内存的查询语句
一些涉及到排序或者分组的语句会使用到临时表,当并发量过大、查询中间结果过多时,会导致临时表占用过多内存,出现实例OOM风险。
针对上述原因,您可采取以下处理措施:
- 可以使用EXPLAIN命令检查Extra列是否显示Using Temporary,确定语句是否会用到临时表,对于使用临时表的SQL语句进一步分析查询计划和重写查询语句,尽量减少临时表的使用。表2列举了部分需要使用临时表的SQL语句。
- 创建合适的索引,减小查询结果的数量,来控制临时表使用的内存。
- 使用LIMIT子句限制查询结果的数量,避免一次性返回大量数据。
- 对于需要大量使用内存的SQL语句,减小并发度,避免内存突增导致实例OOM。
- 结合业务情况扩大实例规格。