Mongodb

在生產中刪除/創建 MongoDB TTL 索引與 collMod

  • February 1, 2022

我正在使用一個 MongoDB 集合,其中包含超過 2.5 億個文件,這些文件具有現有的 TTL 索引並且以相當高的頻率寫入。我想將索引的 TTL 值從 60 天減少到 30 天,同時盡量減少對生產的影響。看來我有兩個選擇:在後台刪除並重新創建索引或執行collMod 命令來修改索引。collMod 命令的簡單性很吸引人,但我擔心它可能產生的影響,尤其是因為似乎無法在後台執行它。刪除/重新創建索引會導致更少的鎖爭用並且影響更小嗎?

您需要做的第一件事是計算如果將 60 天更改為 30 天,索引將刪除多少文件。這是使用 {TTL_FIELD: $gt:30days} 進行的簡單計數。

如果文件數量很大(“大小”取決於伺服器規格和工作負載),我建議執行增量 Colmod,例如(虛擬碼):

同時達到 30 天{

NUM = 60 天;

NUM = NUM​​ - 門檻值;

db.runCommand({“collMod”:“COLLLECTION”,“index”:{“keyPattern”:{TTL_FIELD:1},“expireAfterSeconds”:NUM }})

等待 2 分鐘;}

如果刪除的文件數量很少,只需一次執行 collMod 或手動執行 2-3 步。

您刪除和重新創建索引的方法需要更多時間,如果您有很多要刪除的文件,則在索引完成時性能會下降。

希望有幫助

引用自:https://dba.stackexchange.com/questions/123761