技术分享 | MySQL内存使用率高问题排查

embedded/2025/3/26 6:02:17/

本文为墨天轮数据库管理服务团队第51期技术分享,内容原创,如需转载请联系小墨(VX:modb666)并注明来源。

一、问题现象

问题实例sql>mysql进程实际内存使用率过高

二、问题排查

2.1 参数检查

sql>mysql版本 :8.0.39,慢日志没有开启,innodb\_buffer\_pool\_size 12G(机器内存62G,相对配置较低),临时文件在/tmp目录下

2.2 检查内存使用

 SELECT @@key_buffer_size,@@innodb_buffer_pool_size ,@@innodb_log_buffer_size ,@@tmp_table_size ,@@read_buffer_size,@@sort_buffer_size,@@join_buffer_size ,@@read_rnd_buffer_size,@@binlog_cache_size,@@thread_stack,(SELECT COUNT(host) FROM  information_schema.processlist where command<>'Sleep')\G;

2.3 存储过程、函数、视图

-- 存储过程、函数
SELECT  Routine_schema, Routine_type
FROM information_schema.Routines
WHERE  Routine_schema not in ('sql>mysql','information_schema','performance_schema','sys')
GROUP BY Routine_schema, Routine_type; 
-- 视图
SELECT  TABLE_SCHEMA , COUNT(TABLE_NAME) 
FROM information_schema.VIEWS
WHERE TABLE_SCHEMA not in ('sql>mysql','information_schema','performance_schema','sys')
GROUP BY TABLE_SCHEMA ;
-- 触发器
SELECT TRIGGER_SCHEMA, count(*) FROM information_schema.triggers 
WHERE  TRIGGER_SCHEMA not in ('sql>mysql','information_schema','performance_schema','sys')
GROUP BY TRIGGER_SCHEMA;

2.4 排查实际占用

1、总内存使用

SELECT 
SUM(CAST(replace(current_alloc,'MiB','')  as DECIMAL(10, 2))  ) 
FROM sys.memory_global_by_current_bytes
WHERE current_alloc like '%MiB%';

2、分事件统计内存

 SELECT event_name,SUM(CAST(replace(current_alloc,'MiB','')  as DECIMAL(10, 2))  )FROM sys.memory_global_by_current_bytesWHERE current_alloc like '%MiB%' GROUP BY event_name  ORDER BY SUM(CAST(replace(current_alloc,'MiB','')  as DECIMAL(10, 2))  ) DESC ;
sql>mysql> 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;

3、账号级别统计

sELECT user,event_name,current_number_of_bytes_used/1024/1024 as MB_CURRENTLY_USED
FROM performance_schema.memory_summary_by_account_by_event_name
WHERE host<>"localhost"
ORDER BY  current_number_of_bytes_used DESC LIMIT 10;

2.4 操作系统排查

1、top shift+m

2、ps命令 sql>mysql相关进程使用内存情况

ps eo user,pid,vsz,rss $(pgrep -f 'sql>mysqld')

3、pmap 命令

while true; do pmap -d 3020273 | tail -1; sleep 2; done

pmap -X -p 3020273 > /tmp/memsql>mysql.txt

RSS 就是这个process 实际占用的物理内存。 Dirty: 脏页的字节数(包括共享和私有的)。 Mapping: 占用内存的文件、或[anon](分配的内存)、或[stack](堆栈)。 writeable/private 表示进程所占用的私有地址空间大小,也就是该进程实际使用的内存大小。

(1)首先使用/top/free/ps在系统级确定是否有内存泄露。如有,可以从top输出确定哪一个process。 (2)pmap工具是能帮助确定process是否有memory leak。确定memory leak的原则: writeable/private (‘pmap –d’输出)如果在做重复的操作过程中一直保持稳定增长,那么一定有内存泄露。

4、检查大页配置

三、解决方案

1)临时关闭:

echo never >> /sys/kernel/mm/transparent_hugepage/enabled
echo never >> /sys/kernel/mm/transparent_hugepage/defrag

2)永久关闭,下一次重启后生效:

在 /etc/rc.local 文件中加入如下内容:

#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
echo never > /sys/kernel/mm/transparent_hugepage/defrag

墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。

服务官网:https://www.modb.pro/service


http://www.ppmy.cn/embedded/174541.html

相关文章

【江协科技STM32】软件I2C协议层读写MPU6050驱动层

回顾知识点&#xff1a; 【STM32】I2C通信协议&MPU6050芯片-学习笔记-CSDN博客 接线图 整体思路 I2C初始化 软件I2C只需要用GPIO读取函数就可以&#xff0c;不用I2C库函数&#xff1b; ① 把SCL和SDA都初始化成开漏输出模式&#xff08;开漏输出不只是只能输出、也可以输…

C# 语法糖

三元运算符 &#xff1f;&#xff1a; 使用前 int value -2; if (value < 0) {value 0; } else {value 1; } 使用后 int value -2; value value < 0 ? 0 : 1; Null 合并操作符 &#xff1f;&#xff1f; 使用前 string value GetString(); if (value null…

MySQL请求处理全流程深度解析:从SQL语句到数据返回

MySQL请求处理全流程深度解析&#xff1a;从SQL语句到数据返回 一、MySQL架构全景图 MySQL采用经典的 C/S架构 和 分层设计&#xff0c;其核心模块协同工作流程如下&#xff1a; #mermaid-svg-pAjkxRXUlfrCCRoj {font-family:"trebuchet ms",verdana,arial,sans-se…

HCIP交换机hybrid接口实验

目录 一、实验拓扑 二、实验需求 三、需求分析 四、实验步骤 1、交换机上的配置 SW1&#xff1a; SW2: SW3: 2、路由器上的配置 五、实验结果 1.dhcp获取结果验证 2.连通性测试 六、本练习难点 一、实验拓扑 二、实验需求 1、PC1和PC3所在接口为access接口&#x…

基于视觉的核桃分级与套膜装置研究(大纲)

基于视觉的核桃分级与套膜装置研究&#xff1a;从设计到实现的完整指南 &#xff08;SolidWorks、OpenCV、STM32开发实践&#xff09; &#x1f31f; 项目背景与目标 1.1 为什么选择视觉分级与套膜&#xff1f; 产业痛点&#xff1a; 中国核桃年产量全球第一&#xff0c;但…

执行adb指令报错:error: more than one device/emulator原因及解决方法

1、排查步骤 查看设备详细信息 运行以下命令&#xff0c;观察设备的型号和状态&#xff1a; adb devices 2、在没有连接设备的情况下显示如下 List of devices attached 192.168.1.100:5555 3、可能存在的问题及解决方法&#xff1a; a.断开所有设备后检查拔掉 USB 线&a…

redis分片集群如何解决高并发写问题的?

不使用分片集群&#xff0c;仅使用主从复制和哨兵模式下&#xff0c;可以有多个主从集群&#xff0c;但每个主从集群一般只有一个活跃的主节点并执行写操作&#xff0c;每个主从集群的数据也可能&#xff08;应该&#xff09;是不同的&#xff0c;同时每个主从集群存储的数据没…

Android Compose 切换按钮深度剖析:从源码到实践(五)

Android Compose 切换按钮深度剖析&#xff1a;从源码到实践 一、引言 在现代 Android 应用开发中&#xff0c;用户交互体验至关重要。切换按钮&#xff08;Toggle Button&#xff09;作为一种常见的交互组件&#xff0c;允许用户在两种状态之间进行切换&#xff0c;例如开 /…