mysql 内存占用高排查

查看MySQL进程内存使用情况:
查看MySQL进程ID的内存使用情况,使用top命令:top -p pid。

显示状态视图关键变量:Threads_connected 持续增加可能表明有大量已关闭的连接。

检查InnoDB缓冲池配置:
显示“innodb_buffer_pool_size”等变量 查看缓冲池大小。

命中率分析:Innodb_buffer_pool_read_requests/Innodb_buffer_pool_reads,理想值接近1 00%。

问题解决查询语句:
查看慢查询日志:查找执行时间较长的查询语句。

检查大查询:优化查询语句,避免全表扫描。

检查内存分配:
检查操作系统内存使用情况:确保其他进程没有过度占用它。

分析MySQL内存分配策略:调整排序缓冲区、连接缓冲区等设置。

通用解决方案;不要依赖特定的命令和变量。

mariadb内存占用高如何排查

抱歉,这个 MariaDB 内存使用问题真是令人头疼。
我以前遇到过这个问题,而且很复杂。

首先,需要使用top或htop查看MariaDB、mysqld进程占用了多少内存。
再次使用free -h可以查看整个系统还有多少内存,还剩下多少。
如果MariaDB占用超过一半并且还在继续攀升,你应该快速检查你的配置,看看查询是否有问题。

然后,登录MySQLShell,运行命令,查看Buffer参数,如sort_buffer_size、join_buffer_size、tmp_table_size。
如果这些家伙设置得太高,它们就会占用内存。
我已经遇到过一个案例。
有朋友设置sort_buffer_size为8 MB,一个连接就占用了好几MB。
当然内存还不够。

顺便说一句,您还需要检查表缓存和查询缓存。
虽然MariaDB 1 0.1 .7 之后查询缓存消失了,但如果旧版本超过6 4 MB,写入太多会浪费内存。

硬件和系统级优化,仅此而已。
对于内存扩展,服务器内存必须至少容纳1 .5 倍的数据量。
我曾经有一个客户,有1 0GB的数据,配备了1 6 -3 2 GB的内存。
优化内存通道。
如果您的主板支持,请使用对称通道。
例如,四个 8 GB 通道优于两个 1 6 GB 通道。
调优NUMA架构,用于多CPU服务器,使用numactl或设置innodb_numa_interleave以避免内存局部性。

如果需要长期监控,可以使用pt-mysql-summary或​​者mysqltuner.pl来查看InnoDBBufferPool的成功率和KeyBuffer的使用率,通过慢查询日志定位问题,优化执行计划。

部署后,重启服务或重新建立连接,监控缓冲池使用情况,然后监控内存分配。

这个过程确实很复杂,需要一步一步来完成。