【问题标题】:MongoDB very slow deleteMany and removeMongoDB 很慢 deleteMany 和删除
【发布时间】:2022-01-05 11:56:03
【问题描述】:

在具有 2 个副本的 MongoDB 中,我有一个包含超过 1 亿个文档的集合,集合的大小超过 400 GB,索引大小为 150 GB。我必须通过使用我有 TTL 索引的 modifiedOn 字段删除最旧的记录来减小集合的大小。 TTL 索引将删除超过一个月的条目,但我现在必须采取行动。我尝试使用以下方法删除最旧的记录:

db.myCollection.deleteMany({modifiedOn : {"$lt" : new Date(2021, 12, 20}})

db.myCollection.remove({modifiedOn : {"$lt" : new Date(2021, 12, 20}})

我试图增加一天,然后执行查询以减少负载,但完成这些查询至少需要 10 个小时。我知道删除集合是最快的选择,但我想保留最新数据。

为什么即使使用modifiedOn 的索引执行这些查询也需要这么长时间,索引是否太大并且更新它需要这么长时间?删除最旧记录有哪些更好的选择?

【问题讨论】:

  • 删除这么多记录只需要一些时间。也许您可以每月创建一个系列。

标签: mongodb mongodb-query


【解决方案1】:

我建议临时修改 TTL 值 (documentation here):

db.runCommand({
collMod: 'collection',
index: {keyPattern: {field_name: 1}, expireAfterSeconds: 120}
});

【讨论】:

  • 在我的情况下,即使 TTL 也无法继续删除旧条目并且落后了 2 天。在研究了所有其他选项之后,我认为减少 TTL 应该是首选方法,因为没有必要让 2 个竞争进程删除数据(TTL 与删除查询竞争)并且 collMod 操作几乎立即执行。
猜你喜欢
  • 2021-08-19
  • 2021-05-11
  • 2012-04-23
  • 2014-01-09
  • 1970-01-01
  • 2019-11-01
  • 2019-04-09
  • 2012-10-09
  • 2017-01-18
相关资源
最近更新 更多