关于MySQL内存泄露如何排查的一些思路

本文介绍了排查MySQL内存泄露的思路,包括检查参数配置、存储过程、系统库统计查询以及使用top、free、ps和pmap等系统工具进行分析。重点提到存储过程可能引发内存问题,建议避免使用。通过监控内存变化和使用专业工具,可以有效定位并解决内存泄露问题。
摘要由CSDN通过智能技术生成

点击上方"蓝字"

关注我们,享更多干货!

MySQL使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题。算是比较普遍的现象。

MySQL内存使用率过高,有诸多原因。普遍原因是使用不当,还有MySQL本身缺陷导致的。到底是哪方面的问题,那就需要一个一个进行排查。

下面介绍排查思路:

1.参数配置需要确认,内存是否设置合理

MySQL内存分为全局和线程级:

  • 全局内存(如:innodb_buffer_pool_size,key_buffer_size,innodb_log_buffer_size)。

  • 线程级内存:(如:thread,read,sort,join,tmp 等)只是在需要的时候才分配,并且在操作完毕之后就释放。

  • 线程级内存:线程缓存每个连接到MySQL服务器的线程都需要有自己的缓冲。默认分配thread_stack(256K,512k),空闲时这些内存是默认使用,除此之外还有网络缓存、表缓存等。大致评估会在1M~3M这样的情况。可通过pmap观察内存变化:

mysql> SELECT @@query_cache_size,
     @@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;
*************************** 1. row ***************************
@@query_cache_size:1048576
@@key_buffer_size:8388608
@@innodb_buffer_pool_size:268435456
@@innodb_log_buffer_size:8388608
@@tmp_table_size:16777216
@@read_buffer_size:131072
@@sort_buffer_size:1048576
@@join_buffer_size:1048576
@@read_rnd_buffer_size:2097152
@@binlog_cache_size:8388608
@@thread_stack:524288
(select count(host) from information_schema.processlist where command<>'Sleep'): 1
备注:query_cache_size 8.0版本已经废弃掉了。
2.存储过程&函数&触发器&视图

目前积累的使用经验中,存储过程&函数&触发器&视图 在MySQL场景下是不适合的。性能不好,又容易发现内存不释放的问题,所以建议尽量避免。

  • 存储过程&函数

MySQL 5.7
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值