0

0

mysql如何分析内存占用过高_mysql内存异常排查

P粉602998670

P粉602998670

发布时间:2026-01-03 12:37:20

|

413人浏览过

|

来源于php中文网

原创

MySQL内存占用高需从配置、运行时行为及外部环境三方面排查:调优innodb_buffer_pool_size(42G–50G)、tmp_table_size/max_heap_table_size(256M–1G)、max_connections(按峰值×1.5);用performance_schema定位内存消费者;监控长事务、大查询、多语句及Group Replication等隐性开销;确保tmpdir独立且容器内存限制充足。

mysql如何分析内存占用过高_mysql内存异常排查

查关键配置参数

内存占用高,往往从配置开始。重点关注几个核心参数:

  • innodb_buffer_pool_size:InnoDB缓冲池大小,通常应设为物理内存的60%–80%。比如62G内存服务器,设12G就明显偏低(易引发频繁刷盘),设64G又可能超限(有OOM风险);合理值应在42G–50G之间。
  • tmp_table_sizemax_heap_table_size:两者需保持一致,控制内存临时表上限。16M太小,复杂JOIN或GROUP BY易溢出到磁盘,反而拖慢并增加I/O压力;建议调至256M–1G(视单次查询数据量而定)。
  • max_connections:若设为5000但实际活跃连接仅20个,每个连接仍会预分配sort_buffer、join_buffer等,造成隐性浪费。建议按峰值连接数×1.5预留,再结合线程池使用。

看实时内存分布

别只信top里的mysqld进程RSS值——那是总驻留内存,要拆开看谁在“吃”:

  • 运行:SELECT event_name, sys.format_bytes(CURRENT_NUMBER_OF_BYTES_USED) FROM performance_schema.memory_summary_global_by_event_name ORDER BY CURRENT_NUMBER_OF_BYTES_USED DESC LIMIT 10; ——快速定位前10大内存消费者,如memory/innodb/buf_buf_pool占13GB属正常,但memory/sql/Query_cachememory/temptable/physical_ram异常飙升就要警惕。
  • 查用户级消耗:SELECT user, host, SUM(current_number_of_bytes_used)/1024/1024 AS MB FROM performance_schema.memory_summary_by_account_by_event_name GROUP BY user, host ORDER BY MB DESC LIMIT 5; ——发现某业务账号持续占65MB以上,大概率存在未关闭游标、长事务或低效批量操作。
  • 确认全局用量:SELECT SUM(CAST(REPLACE(current_alloc,'MiB','') AS DECIMAL(10,2))) FROM sys.memory_global_by_current_bytes WHERE current_alloc LIKE '%MiB%'; ——若结果远低于top显示值(如仅2GB vs top报56GB),说明大量内存由非PFS追踪路径分配(如JIT解析、复制缓存、jemalloc内部碎片等)。

盯连接与SQL行为

很多内存暴涨不是配置问题,而是运行时行为触发:

堆友
堆友

Alibaba Design打造的设计师全成长周期服务平台,旨在成为设计师的好朋友

下载
  • 执行SHOW FULL PROCESSLIST;,过滤StateSending dataCopying to tmp table或长时间Locked的线程,这类SQL常伴随大排序、大分组、全表JOIN,极易耗尽tmp_table_size限制并转入磁盘临时表,同时拉高内存峰值。
  • 注意Command列为QueryTime超过60秒的连接,可能是未提交事务持有undo页、锁等待堆积,导致buffer pool中脏页无法及时刷出、历史版本链持续膨胀。
  • 警惕客户端一次性发送多语句(multiple statements)或超长bulk insert(如单条INSERT含上万VALUES)。这类操作在SQL解析、语法树构建阶段就会预分配大量内存,且释放滞后。

排查特殊组件与外部影响

有些内存占用藏得深,不在常规SQL路径里:

  • Group Replication / XtraDB Cluster:如memory/group_rpl/Gcs_xcom::xcom_cache占1GB,说明集群通信缓存积压,检查网络延迟、节点同步延迟或事务冲突率是否升高。
  • 存储过程/函数密集调用:大量动态SQL拼接、嵌套循环、未释放的游标,会在每个会话的thd::main_mem_root中累积分配,重启连接才能清理。
  • 临时目录位置:默认/tmp可能空间小或被其他进程挤占,导致磁盘临时表写入失败,MySQL被迫重试或扩大内存缓冲——务必用tmpdir = /data/mysql/tmp指向独立大容量分区。
  • 容器或cgroup限制:Docker中若设置了--memory=4g但MySQL配置了12G buffer pool,系统会OOM kill mysqld;需确保容器内存limit ≥ MySQL最大理论内存(buffer_pool + max_connections × per_thread_buffers)。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1084

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

356

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

674

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

567

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

410

2024.04.29

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

194

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.6万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 779人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号