mysqld 内存越吃越多,先分清常驻和泄漏再决定要不要管

一句话定位:mysqld 内存高,八成不是泄漏,而是你给它的缓冲池本来就值这么多——先算账,再排查,最后才谈重启。

先算一笔常驻账

MySQL 启动时会按配置预分配 InnoDB 缓冲池(innodb_buffer_pool_size),这是它干活的主战场,默认值在小内存机器上可能占到 128M,生产上常见调到物理内存的一半到七成。也就是说:一台 16G 的服务器,缓冲池配了 8G,mysqld 长期显示 9G 上下的占用是正常态,重启它只会让缓存冷启动,业务变慢。看账本用两条命令:SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; 和 SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_%';,确认占用是否与配置相符。

三种真异常,才需要动手

一是连接泄漏:每个会话有 sort_buffer、join_buffer 等按需分配的内存,几百个睡眠连接堆着,内存就虚高。SHOW PROCESSLIST; 看长睡眠连接,应用侧配好连接池上限,比改 MySQL 参数管用。二是单条大 SQL:一次千万行的排序、一个巨型结果集,会把会话内存顶起来——配合慢查询日志抓现行。三是 performance_schema 和临时表暴涨:监控类插件开太多元件也会吃内存,按需裁剪。

排查顺序记三步

第一,看总占用是否超出"缓冲池+每连接上限×连接数"的合理账面;第二,账面对不上时查连接数和长事务;第三,都正常还持续增长且不回落,再怀疑版本 bug,去社区对已知问题。顺序反了,就会陷入"重启—好了两天—又高"的循环。

给管理员的预防线

把 buffer_pool 写进配置文件而不是运行时改;连接池上限和应用实例数一起评估;内存使用率告警阈值设在 85% 而不是 95%——留出抓现场的时间。服务器上数据库内存、慢查询与容量规划,贵州诚鑫致达提供从排查到调优的落地服务。

(约 760 字)


企业存储选型参考|贵州诚鑫致达

做全闪高性能数据库与虚拟化,群晖机型参考:FS6400 · FS3410 · FS2500。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。

服务区域|贵州诚鑫致达

贵州群晖NAS、贵阳存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。重庆企业 NAS 存储、服务器运维与容灾备份方案。