記一次mysql內存佔用過大-不釋放問題排查

問題描述:

接線上報警,mysql所在服務器內存剩餘不足,這個實例內存問題是週期性爆發的,通過監控看到內存平均2天就被用盡掉256GB。

排查思路:

1、單個實例佔用內存256GB,首先想到的是bufferpool,確認配置

show global variables like '%innodb_buffer_pool_size%';

30GB,

SELECT @@innodb_buffer_pool_instances;

innodb_buffer_pool_instances配置的是1

2、查看當前實例內存表佔用

SELECT SUM(max_data_length)/1024/1024 AS MEMORY_MB FROM information_schema.tables WHERE ENGINE='memory';
64MB

3、當前實例非系統賬號連接爲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/ 用於查看你的內存配置是否合理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章