【问题标题】:MongoDB Query Plan Revision - Write Intensive CollectionMongoDB 查询计划修订 - 编写密集型集合
【发布时间】:2013-12-24 22:37:31
【问题描述】:

MongoDB 官方文档指出,查询优化器将在几个事件后删除并重新评估查询计划,其中之一是“集合收到 1,000 次写入操作”。强> http://docs.mongodb.org/manual/core/query-plans/#query-plan-revision

假设一个集合每秒经历数百次写入操作,查询将遭受性能下降,因为优化器将一次又一次地运行多个计划。

除了使用提示之外,还有什么方法可以解决这个问题吗?可以以某种方式调整优化器以允许更大的流失量吗?

非常感谢,

投资回报率

【问题讨论】:

  • 你有证据表明这是一个问题吗?
  • 进行了以下小测试: 1. 对具有多个候选索引的集合执行查询,将结果集限制为 150 个文档(大于所需阈值)。 2. 第一次执行时,mongod 的详细 (-vv) 输出包含以下内容:“runQuery called Test.demo {}”,然后立即出现以下行:“running multiple plans” 3. 第二次执行相同的查询没有显示“运行多个计划” 4. 将 1,000 个文档插入集合中并重新运行查询 5. 出现“运行多个计划”,执行速度较慢

标签: mongodb


【解决方案1】:

目前我看不到任何方法可以覆盖查询计划评估的这些限制。

话虽如此,仅在超过这些阈值后发生的下一个查询时才会支付罚款。一旦确定哪个计划对标准的响应速度足够快,查询计划程序就会执行多个计划并终止大多数其他计划。

对于写入繁重的系统,假设读取次数不多,并且并非所有查询都在计划程序完成之前执行,该惩罚应该已经减少到最小影响。

【讨论】:

  • 阿尼尔感谢您的评论。不幸的是,我们的案例涉及写入密集型收集,导致立即超过阈值。这会导致(几乎)每个读取查询最终运行多个计划并且执行速度非常慢(当然假设没有任何提示)。
猜你喜欢
  • 2015-11-13
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 2019-05-09
  • 2016-09-27
  • 1970-01-01
相关资源
最近更新 更多