Performance

MongoDB - 慢速刪除查詢

  • April 29, 2021

我在 MongoDB 中有一個包含 8 億多條記錄的集合。我想做一些清理工作,但刪除操作真的很慢(無法使用)——即使刪除 1000 條記錄也可能需要 10 多分鐘。

集合中一條記錄的結構是這樣的:

{
    'stID' : '00000001',
    'recordID' : '28-4',
    'date' : ISODate('2017-06-06 20:00:00'),
    ......
}

有一個複合索引{'stID' : 1, 'recordID' : 1, 'date' : 1},我的刪除查詢是這樣的:db.coll.remove({ 'stID' : '00000001', 'recordID' : '28-4' }, { multi: true });

數據庫是副本集的一部分,有一個輔助和一個仲裁器,我知道刪除操作必須用要刪除的每條記錄的 _id 填充 oplog,但我仍然很難理解為什麼會這樣慢,尤其是因為:

  • 主節點或輔助節點上沒有大量系統或 IO 活動
  • 次級不落後於初級

我們從未遇到過查找或寫入/更新操作的問題。您能否建議我應該使用哪些其他參數/命令/工具來查看查詢和伺服器的情況。

我們使用的儲存引擎是 WiredTiger。該伺服器在 RAID 1 配置中具有 128GB 的​​ RAM 和快速 SSD 驅動器。

我通過使用提高了性能bulkWrite

db.ig_posts.bulkWrite([
  { deleteMany: { "filter": { /* your query here */ } }
]);

將您的索引之一劃分為組,以便每個組包含不超過 10,000 條記錄。例如,如果您每小時有 2,000 條記錄,請創建一個(或兩個)類似於以下內容的列表:

["2021-04-30T00:00:00Z", "2021-04-30T01:00:00Z", "2021-04-30T02:00:00Z", ...]

執行 for 循環以刪除每小時的記錄。

我能夠在 10 分鐘內刪除大約 1000 萬條記錄。

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