查看内存使用率
实例内存使用率是关系数据库MySQL版实例的关键指标,您可以通过该实例的监控信息,获取内存使用率详情。具体操作,请参见查看监控指标。
注意如果您的实例内存使用率过高,会有内存耗尽风险。
原因分析
下面为您介绍导致实例内存使用率高的常见原因:
参数innodb_buffer_pool_size的值
通常InnoDB_Buffer_Pool的内存占用是最大的,Buffer Pool的内存占用上限受到Buffer Pool配置参数的限制,但是还有很多内存是在请求执行中动态分配调整的,例如内存临时表消耗的内存、哈希索引、行锁对象等。
多语句导致内存耗尽
关系数据库MySQL版支持将多个SQL语句用英文分号隔开,然后一起发给MySQL,MySQL会逐条处理SQL语句,但是某些内存需要等到所有的SQL语句执行结束才释放。
如果一次性发送的SQL语句非常多,例如达到数百兆,SQL语句实际执行过程中各种对象分配累积消耗的内存非常大,很可能会导致MySQL进程内存耗尽。
创建大量临时表导致内存突增
内存临时表大小受到参数tmp_table_size和max_heap_table_size限制,超过限制后将转化为磁盘临时表,如果瞬间有大量的连接创建大量的临时表,可能会造成内存突增。
解决方案
核心业务相关库
请扩容实例规格,具体请参见规格扩容。
非核心业务相关库
修改缓冲池和临时表相关参数,直至监控图表中内存使用率相关曲线趋于平缓。