告别内存OOM,解决MySQL内存增长问题
💡
原文中文,约4300字,阅读约需11分钟。
📝
内容提要
本文分析了MySQL内存增长问题,介绍了使用jeprof工具定位内存问题的过程。通过performance_schema和jeprof的使用,发现内存异常增长是由于vector的错误使用导致的。文章提醒注意编译jemalloc时的参数配置,指出jeprof无法捕获buffer pool的内存分配。华为云数据库对该问题进行了修复。
🎯
关键要点
- MySQL内存增长问题分析,使用jeprof工具定位内存问题。
- Performance Schema只能监控通过MySQL内存分配接口分配的内存,无法监控malloc或new分配的内存。
- 某客户实例频繁出现OOM,原因是大事务导致内存异常增长。
- 通过sysbench模拟大事务,发现内存使用异常增长。
- 使用jeprof工具进行内存采样,需将ptmalloc替换为jemalloc。
- jeprof捕获malloc和free函数调用,分析内存变化。
- write_set使用vector导致内存异常增长,建议使用list替代。
- 编译jemalloc时需注意参数配置,避免影响mysqld性能。
- jeprof无法捕获buffer pool的内存分配,因其直接通过mmap分配内存。
- 华为云数据库已对该问题进行了修复,开源MySQL在高版本中也进行了修复。
➡️