置頂 2018年08月16日 20:17:48 RD丨Eric 閱讀數 5549更多程序員
分類專欄: DBmongodb
版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。服務器
本文連接:https://blog.csdn.net/EricLYN/article/details/81747785性能
今天準備對測試環境的mongodb進行壓測,測試一下單實例的狀況億級數據在創建普通索引的狀況下的查詢性能。然而出師未捷身先死,在插入數據的時候被我開的五個線程搞的鎖死了(由於mongo的索引默認是實時創建,在過程當中會鎖死該集合全部操做,沒法讀寫,在數據量大的時候就會出現鎖死的假象)T T .. 。 測試
接着去服務器上命令關閉,結果同樣半天關不了......而後一想反正是測試環境,一怒之下殺了進程(當時個人心裏:!哇咔咔咔讓你拽,不行了吧!哈哈哈哈哈......)。ui
而後重啓的時候我又懵逼了...發現重啓不了了,報了個ERROR: child process failed, exited with error number 14錯誤TT |||。好吧搜唄,看了一些類同問題有讓刪.log的還有讓刪.lock的但最終的解決不了問題。後來多是由於程序員改BUG的習慣我忽然想起了查log,當初配mongo的時候我清晰的記的mongo的log體系很健全(廢話,畢竟也是一個很成熟的DB)。而後我就進到配的日誌路徑下,打開日誌(由於以前查詢解決方案把以前的日誌移到別的地方了,因此cat的時候一下就打開了),打開後一看,緣由就很明顯了!!!大體是說以前關閉的時候索引未創建完,因此形成此次啓動不了!並提示能夠使用--noIndexBuildRetry跳過該因此的創建。spa
因而我用了--noIndexBuildRetry命令,完美啓動了!而後我又特地看了一下個人數據發現以前的那個未完成的索引沒了,因此mongo的跳過就是說直接刪掉了,因而此次我打開日誌,而後創建索引好處是能清晰的看到進度。另外索引創建還能夠使用後臺的方式createIndex({「key」:1},{background:true})這樣能夠在不影響讀寫的狀況下後臺創建索引,好處就是不用鎖死該集合了,壞處就是整個過程會更慢一些。.net
下面總結一下解決該問題步驟:線程
1 進入mongo的日誌目錄打開日誌文件(通常叫mongodb.log)日誌
2 查看具體緣由
3 分析問題,得出結論。像我此次就是./mongod --config /usr/local/mongodb/bin/conf/mongodb.conf --noIndexBuildRetry解決了問題。