亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL案例-內存使用率無限增長

發布時間:2020-08-07 20:11:49 來源:ITPUB博客 閱讀:371 作者:wangwenan6 欄目:MySQL數據庫
拖了好久了, 抽空補上  _(:з」∠)_
-------------------------------------------------------------------------------------------------正文---------------------------------------------------------------------------------------------------------------

背景: 收到內存報警的信息以后, 從監控中發現MySQL服務器的內存使用率在不斷的增長;
附圖:
MySQL案例-內存使用率無限增長

雖然進行了重啟, 但是內存占用率依然會不停的增長, 大約在半個月左右的時間內又把內存消耗完畢;

場景: 未搭建場景, 數據庫版本 5.7.12

分析: 
PS: 時間久遠, 截圖僅做分析/示例所用, 不一定是當時候出問題時的數據

嘗試方向1:
首先考慮的是buffer相關的參數是否設置有誤, 畢竟當初crash的時候曾經出現過類似的問題(http://blog.itpub.net/29510932/viewspace-2123096/)
結果: 參數設置都沒什么明顯的問題;

嘗試方向2:
既然設置沒什么問題, 那就看一下內存的占用情況吧~
使用pmap -d  看一下進程的內存情況; 部分信息截圖如下
MySQL案例-內存使用率無限增長

anon代表進程主動申請的內存, 當時對有問題的機器進行統計時, 發現主動申請的內存占了進程內存的95%(當然的..因為buffer都在這里面)
考慮到innodb_buffer_pool的大小只有總內存的50%, 多出來的這些"已申請"的內存實在是有點太多了, 是不是有什么線程申請了大量的內存沒有釋放?

嘗試方向2--檢查線程的內存使用:
MySQL5.7中對ps(performance_schema)進行了拓展, 能統計更多的數據了, 這其中就包括了有關mem的信息;
由于默認是關閉的, 所以現在要臨時打開這些統計數據;

點擊(此處)折疊或打開

  1. update performance_schema.setup_instruments set enabled = 'yes' where name like 'memory%'
執行上述語句之后, 在ps里面就能在mem相關的表里面看到相關的統計信息了; 如下圖:
MySQL案例-內存使用率無限增長

其中CURRENT_NUMBER_OF_BYTES_USED可以近似的當成目前占用的內存總數;
PS: 由于這個統計信息并不會區分共享內存, 所以有可能會出現占用內存為負數, 或者各個項的總和大于實際占用內存總數;

由于是懷疑線程, 所以用CURRENT_NUMBER_OF_BYTES_USED倒序, 查詢Thread相關的表; 結果類似下圖:
MySQL案例-內存使用率無限增長

當時有問題的實例中, 查詢結果結合ps.thread表數據,顯示thread/sql/slave_sql和thread/sql/one_connection(monitor用戶)的內存占用非常高~

嘗試方向2--分析線程:
thread/sql/slave_sql是同步中的SQL線程, 負責復現主庫binlog中的事務, 這個線程占用大量內存卻不進行釋放的現象, 第一反應不是我們自己的問題;
在mysql bug上面找了一圈,發現以前有人提交了類似的bug
(https://bugs.mysql.com/bug.php?id=71197), 狀態為close;
官方給出的解決方案是關閉并行復制, 并且把
rpl相關的信息存在file里面, 而不是table;
MySQL案例-內存使用率無限增長

PS: Nice! 那5.7弄個并行復制不是坑自己么......  _(:з」∠)_

thread/sql/one_connection(monitor用戶)是由用戶創建的, 可以發現是monitor用戶保持的連接, 主要用于自維護的監控插件獲取信息的;
這個至少是能想辦法解決的, 那么看一下monitor線程的詳細信息:
MySQL案例-內存使用率無限增長
查看以后發現memory/sql/String::value占用的內存數最多;
從字面意思理解, 似乎是執行的SQL有點問題, 保存了大量的結果沒有釋放?

聯系了插件的編寫人員, 找到插件的代碼, 仔細看了一圈, 發現代碼在使用cursor執行SQL以后, 沒有close......

對代碼進行fix及推送以后, 內存使用率的增長速度大幅度降低了;

處理結果:
把這個沒有close的經典問題掛到了內部的文檔里面作為反例.......
然后由于一些原因, SQL線程無法釋放已占用內存的問題無法解決, 好在增長的速度并不快, 還在可接受的范圍之內, 暫時做好定期維護(重啟)的準備;
PS: 到目前為止, 出問題的個別實例都沒有再增長到非常高的地步, 目測需要兩個多月才可能會維護(重啟)一次;
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊金霍洛旗| 新龙县| 堆龙德庆县| 铜陵市| 乌兰浩特市| 九寨沟县| 璧山县| 理塘县| 常山县| 手游| 岗巴县| 金寨县| 白水县| 德格县| 平昌县| 武平县| 尼木县| 射阳县| 永善县| 满洲里市| 三台县| 贵南县| 穆棱市| 罗平县| 罗城| 松溪县| 通许县| 武功县| 吉木萨尔县| 东至县| 成武县| 奇台县| 温州市| 韶山市| 九江市| 江山市| 长阳| 普定县| 锡林郭勒盟| 苏尼特左旗| 泰州市|