MySQL内存分析常用语句

一、 OS层

首先需要确认是否是MySQL占用的内存

top -p $(pidof mysqld) -n 1

或者

cat /proc/$(pidof mysqld)/status

二、 DB层

  1. 全局情况

各种buffer pool大小,是否有明显不合理的设置

SHOW GLOBAL VARIABLES LIKE '%buffer%szie%';

MySQL总占用内存

SELECT * FROM sys.memory_global_total;

  1. 内存占用详情

按内存模块

SELECT

EVENT_NAME,

CURRENT_NUMBER_OF_BYTES_USED AS memory_bytes,

CURRENT_NUMBER_OF_BYTES_USED / 1024 / 1024 AS memory_mb

FROM

performance_schema.memory_summary_global_by_event_name

WHERE

CURRENT_NUMBER_OF_BYTES_USED > 0

ORDER BY

CURRENT_NUMBER_OF_BYTES_USED DESC

LIMIT 10;

各模块内存使用变化(结果是累计值,可以根据差值观察变化情况)

多次查询,求差值

SELECT

EVENT_NAME,

SUM(SUM_NUMBER_OF_BYTES_ALLOC) / 1024 / 1024 AS total_memory_mb

FROM

performance_schema.memory_summary_global_by_event_name

GROUP BY

EVENT_NAME

ORDER BY

SUM_NUMBER_OF_BYTES_ALLOC DESC

LIMIT 10;

按线程查看内存占用

SELECT

m.EVENT_NAME,

m.COUNT_ALLOC,

m.CURRENT_NUMBER_OF_BYTES_USED AS mem_sum,

(m.CURRENT_NUMBER_OF_BYTES_USED / 1024 / 1024.0) AS mem_sum_mb,

t.NAME,

t.TYPE,

t.PROCESSLIST_ID,

LEFT(t.PROCESSLIST_INFO, 10)

FROM

performance_schema.memory_summary_by_thread_by_event_name m

JOIN performance_schema.threads t

USING (THREAD_ID)

WHERE

t.PROCESSLIST_ID != CONNECTION_ID()

ORDER BY

m.CURRENT_NUMBER_OF_BYTES_USED desc

LIMIT 10;

sys库中的视图基于 performance_schema 提供了更易读和易用的性能数据汇总

SELECT * FROM sys.memory_by_thread_by_current_bytes LIMIT 10;

​​​​​​​​​

内存分布详情

SELECT * FROM sys.memory_global_by_current_bytes order by current_alloc desc LIMIT 10;

按用户排序

SELECT * FROM sys.memory_by_user_by_current_bytes;

参考

GreatSQL 运行时内存太高,超过90%怎么办(重发,附解决办法)-CSDN博客

MySQL内存使用率高且不释放问题排查与总结_Mysql_脚本之家

MySQL 8.0不再担心被垃圾SQL搞爆内存 - GreatSQL - 博客园

MySQL内存为什么不断增高,怎么让它释放 - 墨天轮

MySQL进程内存一直在涨,怎么办? - 墨天轮

相关推荐
薛定谔的算法4 小时前
phoneGPT:构建专业领域的检索增强型智能问答系统
前端·数据库·后端
Databend5 小时前
Databend 亮相 RustChinaConf 2025,分享基于 Rust 构建商业化数仓平台的探索
数据库
得物技术6 小时前
破解gh-ost变更导致MySQL表膨胀之谜|得物技术
数据库·后端·mysql
Java水解7 小时前
【MySQL】从零开始学习MySQL:基础与安装指南
后端·mysql
Raymond运维11 小时前
MariaDB源码编译安装(二)
运维·数据库·mariadb
沢田纲吉11 小时前
🗄️ MySQL 表操作全面指南
数据库·后端·mysql
RestCloud1 天前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud1 天前
为什么说零代码 ETL 是未来趋势?
数据库·api
ClouGence1 天前
CloudCanal + Paimon + SelectDB 从 0 到 1 构建实时湖仓
数据库
Java水解1 天前
Mysql查看执行计划、explain关键字详解(超详细)
后端·mysql