linux 占用缓存前10_MySQL基于linux的内存分析

导读:

作者:知数堂学员-邓志航;MySQL DBA,天生的MySQL爱好者,热衷于为他人解决问题,善于总结和分享。对数据平台构建和排查疑难问题有非常浓厚的兴趣


一、简介:  MySQL基于linux的内存分析 二、关键指标定义 1、底层分配和释放内存
2、使用C标准库的malloc()或者mmap(),就可以在堆和文件映射段分配内存了,通过free()或者ummap()进行释放
3、top关注进程
  • virt是虚拟内存占用量,即便没有使用,只要申请过,就会算进去,mysql申请的virt memory是不会释放的
  • res 是实际占用内存,但是不包含共享内存和swap占用
  • share 是共享内存大小
  • mem% 是进程占用物理内存的百分比 
注意:通常情况下虚拟内存的占用会远远大于真实内存,但是如果相等,就表明申请的全部用到
4、free -m
  • Buffer(缓冲区) 是对磁盘数据的缓存,用来合并多次小写成为一次大写
  • Cache(缓存) 是文件数据的缓存,用来进行文件的读写,数据库针对cache的使用率非常高,因为都是从文件读取数据到内存的

三、MySQL层

1、全局级别 innodb_buffer_pool,innodb_log_buffer_size

2、会话级别 session

  • 查询相关变量  sort_buffer_size,join_buffer_size,tmp_table_size等

  • 事务相关变量  binlog_cache_size

  • 会话相关变量  thread_stack

四、常见问题场景

  • 场景1 
    描述 linux使用了全部内存,并且占用了swap空间,甚至导致了oom-killer
  • 场景2
    描述 linux使用了还有大量剩余内存,但是却使用了swap空间 
  • 场景3
    描述 linux使用了全部内存,并且占用了swap空间,但是与场景1不同点在于,mysql的innodb_buffer_pool设置的非常少.但是通过top却发现大量的内存被mysql申请占用

五、通用解决方式

1、加大内存,innodb_buffer_pool,拆分数据库 应对场景1(内存使用不足)2、可能是由于numa导致的解决方式有以下几种,应对场景2(由于numa问题导致)
  • mysql配置文件添加 innodb_numa_interleave=on
  • mysql启动时候添加 numactl --interleave=all  参数

  • Linux Kernel启动参数中加上numa=off
3、进行问题排查
  • pmap -d 看一下进程的内存情况,发现anoa的量很大(anoa代表进程主动申请内存)
  • 打开mysql关于内存使用的统计 
update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%'
  • 应该是由于thread导致的,所以根据thread进行分析具体占用(5.7),具体语句:
定位具体thread_id
select thread_id,event_name, SUM_NUMBER_OF_BYTES_ALLOC from memory_summary_by_thread_by_event_name order by SUM_NUMBER_OF_BYTES_ALLOC desc limit 20;
定位具体线程
select * from threads where thread_id=thread
4、进行线程的具体分析

六、总结

内存问题一般深入都比较复杂,有些方面需要分析线程源码,希望借此为大家分析问题提供一个思路。

END

15949ee342792bf4cf5a16893de50d53.png

c21d4c11c65aa1508cbfe82d97f09980.png

99af38c9aa1af9dc0314485be4b18451.gif

扫码加入QQ技术交流群

(群号:793818397)

317c060a64ea27950ebf7ee32120cf79.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值