1. 程式人生 > >MongoDB 建立索引導致鎖庫

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,當你在建立索引的時候執行這些操作的會報錯。