攝影:產品經理
廚師:kingname
咱們在使用 MongoDB 的時候,會出現須要給一個已經存在的大集合的某個字段增長索引的狀況。ide
索引分爲前臺索引和後臺索引,對應到 pymongo 中建立索引的代碼:3d
import pymongo handler = pymongo.MongoClient().yourdb.yourcol # 前臺索引 handler.create_index('字段名') # 後臺索引 handler.create_index('字段名', background=True)
若是集合裏面有不少數據,而且你使用的是前臺索引,那麼此時,建立索引會把這個集合鎖起來,全部對這個集合的寫入操做都會掛起。直到索引建立完成爲止。若是使用的是後臺索引,那麼建立索引的過程不會影響數據寫入。code
但有時候,原本想建立後臺索引,卻忘記加 background=True參數。此時怎麼辦?由於大集合建立索引有時候可能須要好幾個小時,掛起的寫入數據會堆積在內存裏面,把內存撐爆。blog
此時,千萬不要重啓 MongoDB,由於重啓之後,以前沒有完成的索引建立操做,依然會自動啓動繼續建立。索引
正確的作法是殺掉建立索引的進程。進程
此時,咱們能夠在 MongoDB Shell 或者 Robo 3T裏面操做。內存
這裏以 Robo 3T爲例,首先打開對應的集合,以下圖所示:產品
而後把命令欄裏面的內容修改成:it
db.currentOp()
返回的內容以下圖所示:
class
建立索引的進程,能夠在參數裏面看到相似於
"lockType": "write"
這樣的字字段。在它附近,能夠找到一個字段叫作 opid。
而後在命令欄輸入命令:
db.killOp(opid)
殺掉進程。
而後從新建立後臺索引便可。