一次坑爹的MySQL問題查找

清明假日前一天湃缎,我們進行了服務(wù)器升級,然后第二天嗓违,同事給我來了一個電話知残,網(wǎng)站訪問異潮茸卡頓佳窑,在MySQL里面發(fā)現(xiàn)大量的slow log父能。

于是我立刻放棄了休假的打算,連上了服務(wù)器溉委,首先查看slow log爱榕,發(fā)現(xiàn)即使是單條記錄的主鍵查詢,也耗時將近1s多黔酥,這是完全不可能的事情。然后show processlist棵帽,發(fā)現(xiàn)大量的語句狀態(tài)為statistics逗概,根本不能快速的執(zhí)行完成忘衍。

然后查看了機器的CPU,發(fā)現(xiàn)MySQL的CPU很高隶垮,但IO的負載異常的低秘噪,表明MySQL真的在處理很大量的請求指煎。我們不停地show processlist至壤,發(fā)現(xiàn)有些select語句查詢枢纠,row examined竟然有幾十萬行之多,然后看語句,發(fā)現(xiàn)了很蛋疼的問題脓斩。類似如下:

SELECT * FROM tbl WHERE group = 123 and parent = 2

我們使用的是鄰接表模型在MySQL里面存儲樹狀結(jié)構(gòu)随静,也就是每條記錄需要存儲父節(jié)點的ID吗讶,上面那條語句就是在一個group里面查詢某個節(jié)點下面的子節(jié)點。

然后這個表里面的索引竟然只有g(shù)roup重绷,至于原因膜毁,貌似是最開始設(shè)計的同學認為一個group里面的數(shù)據(jù)不可能很多,即使全examined一次也無所謂爽茴∈易啵可是偏偏,一個用戶蛋疼的就往一個group里面放了幾十萬的數(shù)據(jù)昌简,然后纯赎,任何一次查詢都會極大地拉低整個MySQL的性能。經(jīng)過這一次犬金,再一次讓我意識到六剥,組里面的小盆友的MySQL知識還需要提升疗疟,如何用好索引,寫過高效的查詢語句真的不是一件簡單的事情策彤。

于是我們立刻更新了索引,然后慢查詢馬上就沒有了裹刮。但沒有了超時,我們?nèi)匀话l(fā)現(xiàn)囊咏,MySQL的CPU異常的高梅割,show processlist的時候出現(xiàn)了很多system lock的情況,表明寫入并發(fā)量大户辞,一直在爭鎖底燎。通過日志發(fā)現(xiàn)弹砚,一個用戶不停地往自己的group里面增加文件,而從升級之前到第二天下午朱沃,這個用戶已經(jīng)累計上傳了50w的文件茅诱。

最開始我們懷疑是被攻擊了瑟俭,但通過日志,發(fā)現(xiàn)這個用戶的文件都是很正常的文件失暴,并且完全像是在正常使用的微饥。但仍不能排除嫌疑,于是我們立刻升級了一臺服務(wù)器,將LVS的流量全部切過去(幸好放假了简软,不然一臺機器鐵定頂不住)痹升,但令我們吃驚的是,記錄的訪問請求壓根沒有這個用戶任何的信息肛跌,但是文件仍然在不停地新增衍慎。然后通過show processlist查看,MySQL的請求全部是另外幾臺機器發(fā)過來的稳捆,但另外幾臺機器現(xiàn)在已經(jīng)完全沒有流量了麦轰。

于是我們立刻想到了異步任務(wù),會不會有某個異步任務(wù)死循環(huán)導致不停地插入末荐,但監(jiān)控rabbitmq新锈,卻發(fā)現(xiàn)仍然沒有該用戶的任何信息壕鹉。這時候,一個同事看代碼负乡,突然發(fā)現(xiàn)脊凰,一個導致死循環(huán)的操作根本沒扔到異步任務(wù)里面狸涌,而是直接在服務(wù)里面go了一個coroutine跑了。于是我們立刻將其他幾臺機器重啟朝捆,然后MySQL正常了懒豹。

從晚上升級,到第二天真正發(fā)現(xiàn)問題并解決儒老,因為我們的代碼bug驮樊,導致了我們整個服務(wù)幾乎不可用,不可不說是一個嚴重的教訓挖腰。

  • MySQL索引設(shè)計不合理曙聂,導致極端情況下面拖垮了整個性能鞠鲜。
  • 代碼健壯性不足,對于可能引起死循環(huán)的應(yīng)用沒有做更多的檢查處理贤姆。
  • 日志缺失,很多偷懶不寫日志坐漏,覺得沒啥用碧信,但偏偏遇到問題了才會有用砰碴。
  • 統(tǒng)計缺失呈枉,沒有詳細的統(tǒng)計信息趁尼,用來監(jiān)控整個服務(wù)酥泞。
  • 沒有更健壯的限頻限容策略芝囤,雖然我們開啟了凡人,但因為程序內(nèi)部bug,導致完全沒用。

有些時候耳幢,只有做好了完全的準備,才能更好的應(yīng)對對突發(fā)情況睛藻,畢竟我們是在做產(chǎn)品启上,要對用戶負責,也要對自己的職業(yè)負責店印。

最后冈在,這次的教訓再一次說明,節(jié)假日前一天晚上升級按摘,后果很嚴重包券。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市炫贤,隨后出現(xiàn)的幾起案子溅固,更是在濱河造成了極大的恐慌,老刑警劉巖兰珍,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侍郭,死亡現(xiàn)場離奇詭異,居然都是意外死亡掠河,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進店門嵌削,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艇劫,你說我怎么就攤上這事蟹演。” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵涛舍,是天一觀的道長。 經(jīng)常有香客問我亭敢,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任痢掠,我火速辦了婚禮,結(jié)果婚禮上医舆,老公的妹妹穿的比我還像新娘。我一直安慰自己惫东,他們只是感情好胁黑,可當我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布力喷。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上录肯,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死蘸劈,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的屁商。 我是一名探鬼主播雾袱,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屡谐!你這毒婦竟也來了剑梳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤骂倘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡恤煞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腻异。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡矫户,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情征字,我是刑警寧澤袖肥,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布历恐,位于F島的核電站寸癌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弱贼。R本人自食惡果不足惜蒸苇,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吮旅。 院中可真熱鬧溪烤,春花似錦、人聲如沸鸟辅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匪凉。三九已至枪眉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間再层,已是汗流浹背贸铜。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工堡纬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蒿秦。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓烤镐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棍鳖。 傳聞我的和親對象是個殘疾皇子炮叶,可洞房花燭夜當晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容