佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 一次因mongo查詢不存在字段引發(fā)的事故記錄

一次因mongo查詢不存在字段引發(fā)的事故記錄

熱門標(biāo)簽:服務(wù)外包 網(wǎng)站排名優(yōu)化 百度競價排名 鐵路電話系統(tǒng) AI電銷 呼叫中心市場需求 地方門戶網(wǎng)站 Linux服務(wù)器

話說今天的一個小小的查詢失誤給了我比較深刻的教訓(xùn),也讓我對mongo有了更深刻的理解,下面我們來說說這個事情的原委:

我們經(jīng)常使用阿里云子賬號在DMS上查詢線上數(shù)據(jù)庫數(shù)據(jù),今天也是平常的一次操作

集合:

XXXX_messagebr>數(shù)據(jù)量約 600萬

我執(zhí)行了下面的mongo查詢:

db.XXXX_message.find({"channel_id": "1000000009XXXX700XXXX"}).limit(20);

但是上述語句中的 "channel_id" 字段不存在,真實字段應(yīng)該是channel(有索引),屬于失誤操作

在執(zhí)行過程中,我發(fā)現(xiàn)查詢時間很久,于是中斷了查詢又重試了兩次,還是很久,最后中斷了查詢,我意識到我想查的字段可能錯了,于是看了下集合索引,使用正確的字段檢索得到結(jié)果

但就在這時候,一場事故也在悄然醞釀,2分鐘后,阿里云監(jiān)控中心打來告警電話,mongo數(shù)據(jù)庫cpu、iops異常升高

起初并沒有意識到是這個查詢導(dǎo)致的,還以為是半小時前發(fā)布的版本可能有問題,于是立即回滾了版本并開始項目檢查

查了許久,并沒有查到可能造成本次數(shù)據(jù)庫異常告警的原因,項目對該庫的依賴的操作的地方非常少。

當(dāng)我們苦苦想不到原因的時候,我們?nèi)ゲ榱讼孪嚓P(guān)慢sql日志,果然一道耗時約1800000ms的慢sql日志引起了我們的注意

這時候我似乎意識到了點什么,我立馬查阿里云控制臺查詢歷史核對了我剛才查詢的時間和數(shù)據(jù)庫cpu、磁盤iops異常升高的時間節(jié)點

完全對上了,該起事故持續(xù)半小時左右,那條沒有被成功中斷的sql也執(zhí)行了半小時左右

這讓我很震驚,一次控制臺查詢居然導(dǎo)致整個數(shù)據(jù)庫出現(xiàn)如此嚴(yán)重的問題,mongo底層沒有考慮過不存在字段查詢問題嗎?

我慢慢平復(fù)心情,仔細(xì)回顧這件事情,我嘗試著從mongo和mysql的底層去理解這個問題

mongo本身是集合型數(shù)據(jù)庫,意味著每個集合文檔都可以有自己獨立的數(shù)據(jù)結(jié)構(gòu),和mysql等關(guān)系型數(shù)據(jù)庫的很重要的區(qū)別就是它沒有固定的表結(jié)構(gòu),它包容且隨性

當(dāng)在查詢一個不存在的字段的時候,它仍然按照普通查詢檢索數(shù)據(jù),這時候它會全表掃描,也就是說在上述失誤語句中,mongo底層檢索了整個集合的數(shù)據(jù)集,

遍歷了該集合所有的磁盤塊,這才導(dǎo)致磁盤iops升高且cpu升高。

這次經(jīng)歷讓我覺得我有必要記錄下相關(guān)心得,可能對于很多高級技術(shù)人員,這些東西都是很容易理解和規(guī)避的事情,但大多數(shù)人對此可能并沒有深刻認(rèn)識

這次事故讓我對技術(shù)多了一層敬畏,這有助于我在今后的代碼實踐和操作中更加謹(jǐn)慎和多一層思考,希望大家以此為戒!此文共勉!

到此這篇關(guān)于一次因mongo查詢不存在字段引發(fā)的事故記錄的文章就介紹到這了,更多相關(guān)mongo查詢不存在字段的事故內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

標(biāo)簽:黃山 衡水 湘潭 仙桃 湖南 銅川 崇左 蘭州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一次因mongo查詢不存在字段引發(fā)的事故記錄》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    依安县| 陆河县| 防城港市| 常州市| 通化市| 鄱阳县| 山阴县| 贡觉县| 光山县| 从化市| 常山县| 专栏| 灵璧县| 贡觉县| 通州区| 宜黄县| 蓬莱市| 西充县| 隆昌县| 屏东市| 大理市| 英吉沙县| 鲜城| 威信县| 南部县| 隆安县| 凤凰县| 内黄县| 延长县| 黄石市| 阿拉善盟| 广河县| 秭归县| 福清市| 汽车| 白玉县| 景德镇市| 宁乡县| 红安县| 南阳市| 蓬莱市|