1. 程式人生 > 資料庫 >MongoDB如何正確中斷正在建立的索引詳解

MongoDB如何正確中斷正在建立的索引詳解

我們在使用 MongoDB 的時候,會出現需要給一個已經存在的大集合的某個欄位增加索引的情況。

索引分為前臺索引和後臺索引,對應到 pymongo 中建立索引的程式碼:

import pymongo
handler = pymongo.MongoClient().yourdb.yourcol
# 前臺索引
handler.create_index(‘欄位名‘)
# 後臺索引
handler.create_index(‘欄位名‘,background=True)

如果集合裡面有很多資料,並且你使用的是前臺索引,那麼此時,建立索引會把這個集合鎖起來,所有對這個集合的寫入操作都會掛起。直到索引建立完成為止。如果使用的是後臺索引,那麼建立索引的過程不會影響資料寫入。

但有時候,本來想建立後臺索引,卻忘記加 background=True引數。此時怎麼辦?因為大集合建立索引有時候可能需要好幾個小時,掛起的寫入資料會堆積在記憶體裡面,把記憶體撐爆。

此時,千萬不要重啟 MongoDB,因為重啟以後,之前沒有完成的索引建立操作,依然會自動啟動繼續建立。

正確的做法是殺掉建立索引的程序。

此時,我們可以在 MongoDB Shell 或者 Robo 3T裡面操作。

這裡以 Robo 3T為例,首先開啟對應的集合,如下圖所示:

然後把命令欄裡面的內容修改為:

db.currentOp()

返回的內容如下圖所示:

建立索引的程序,可以在引數裡面看到類似於

"lockType": "write"

這樣的字欄位。在它附近,可以找到一個欄位叫做 opid。

然後在命令欄輸入命令:

db.killOp(opid)

殺掉程序。

然後重新建立後臺索引即可。

到此這篇關於MongoDB如何正確中斷正在建立的索引的文章就介紹到這了,更多相關MongoDB中斷正在建立的索引內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!