问题描述:mysql
接线上报警,mysql所在服务器内存剩余不足,这个实例内存问题是周期性爆发的,经过监控看到内存平均2天就被用尽掉256GB。sql
排查思路:服务器
一、单个实例占用内存256GB,首先想到的是bufferpool,确认配置session
show global variables like '%innodb_buffer_pool_size%';orm
30GB,内存
SELECT @@innodb_buffer_pool_instances;get
innodb_buffer_pool_instances配置的是1io
二、查看当前实例内存表占用innodb
SELECT SUM(max_data_length)/1024/1024 AS MEMORY_MB FROM information_schema.tables WHERE ENGINE='memory';
64MBtable
三、当前实例非系统帐号链接为5,因此计算session共占用最大内存为:
SELECT ( ( @@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@thread_stack
+ @@max_allowed_packet
+ @@net_buffer_length )
) / (1024*1024)*8 AS MEMORY_MB;
315MB
问题老是让咱们秃头,经过free -g查看,cache占用很是的大,想起来numa这个东东,接下来抱着试一试的态度执行了如下操做:
1)mysql开启numa interleave访问(mysql_safe中增长一行代码,不知的同窗自行搜一下哈)
2)重启实例,问题解决
总结:以前遇到的内存问题,通常都是由于bp配置太高,或者链接数猛增配置不合理致使的。这里顺便推荐一款mysql内存计算器,http://www.mysqlcalculator.com/ 用于查看你的内存配置是否合理