MongoDB 創建索引導致鎖庫

MongoDB 創建索引導致鎖庫

  • 背景描述

兩千多萬數據,204G 的數據創建索引,執行 db.collection.ensureIndex({key:1}) 之後,是要鎖庫的,打開另一個終端,任何操作都不能執行。

  • 根本原因

在數據庫建立索引時,默認時 “foreground” 也就是前臺建立索引,但是,當你的數據庫數據量很大時,在建立索引的時會讀取數據文件,大量的文件讀寫會阻止其他的操作,命令沒有顯性指定 background,所以命令會鎖庫。

  • 解決方案

執行 db.collection.ensureIndex({key:1},{background: true}),這樣就不會鎖庫了,建立索引就會在後臺處理了。(注:“{key:1}” 中,1 表示升序 - asc,-1 表示降序 - desc )

在後臺建立索引的時候,不能對建立索引的 collection 進行一些壞滅型的操作,如:運行 repairDatabase,drop,compat,當你在建立索引的時候運行這些操作的會報錯。

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