【问题标题】:mongod(v2.6.5) sharded cluster query latency issue?mongod(v2.6.5) 分片集群查询延迟问题?
【发布时间】:2015-06-20 21:09:34
【问题描述】:

我正在运行一个使用 mongo 分片集群的节点(0.10.26)应用程序。我使用三成员副本集作为分片。这是我的其他配置详情

硬件和操作系统设置

  1. EC2:m3.large(内存:7.5G)
  2. Linux Ubuntu 12.04(内核:3.2.0-69-virtual 64 位)
  3. 磁盘:400 G SSD (EBS)(以 noatime 和 32 预读设置安装)

应用程序的加载模式

  1. 插入速率 = 20-30/秒 大多数插入都是到日志收集的,它们发生了 每时每刻。
  2. 查询率 = 50-100 / 秒
  3. 更新 = ~30 /秒

蒙古人

  1. 存储引擎:默认 (mmapv1)
  2. 索引大小:3.5G
  3. 工作集:270 MB
  4. 猫鼬版本:3.8.25
  5. Mongo 版本:2.6.5

我的应用程序提供了一个接口,可以将日志记录下载为带有特定过滤器的 csv 文件。当我尝试下载 csv 时,应用程序变得非常慢。

经过一番调查,我得出的结论是查询日志需要很长时间(>2 分钟,有时长达 10 分钟) 由于数据库响应慢,应用程序也慢

问题

  1. 为什么查询日志需要很长时间。

    如果我执行explain(),我看到它命中了索引。

    mongostat(延迟 1 秒运行时)表示存在 是否发生了许多页面错误(~800 - 1100)/秒。这页纸 查询返回后故障消退。后续查询返回 几秒钟后。

    工作集 + 索引大小 = 3.7 G

    内存 = 7.5 G。

    日志收集大小 = 50 G

  2. 频繁写入日志集合是否会影响读取操作 在同一个集合上。这种担忧是否适用于我的工作量?

【问题讨论】:

  • 您有一个非常详细的问题(我很高兴从新用户那里看到这个问题),但是您可以在每个帖子中保留一个问题吗?在您的情况下,有 4 个。

标签: linux node.js mongodb amazon-ec2


【解决方案1】:

根据我的说法,我们需要在这里考虑很多事情来解决问题。我不确定 Mongo 方面到底发生了什么,但这里有一些我会看的东西,

  1. 您说您允许用户为日志提供过滤器并创建它的 csv,然后下载。 在这种情况下,csv 文件的平均大小是多少?

---- 如果它太大,那么我可能认为您正在使用游标获取数据,然后将其写入可能是 IO 密集型的文件(页面错误可以证明这一点。)。取而代之的是,您可以检查 MongoExport 和 MongoDump 选项,这些选项专为高效的批量操作而设计。

  1. 您说您正在过滤记录,那么您使用的是什么过滤器?它是最优的吗?你有正确的索引吗?

---- 检查过滤效率。尽管您说您正在使用索引,但查询正在使用索引。仍然可以添加更有效的新索引吗?如果是,请添加它。

  1. 在将记录与过滤器匹配后,您是否正在获取该文档的所有属性(日志记录)?

---- 如果答案是肯定的,那么他们真的需要吗?如果答案是否定的,则尝试仅获取所需的数据。避免不必要的处理。

  1. 我能想到的另一种技术是,如何进行分片?

---- 对于日志,一般搜索过滤器是什么(日期、错误等)?在 NoSQL Dbs 中,应首先确定需求/查询/过滤器,然后再确定模式/集合等。如果您还没有考虑到,那么现在是时候了,因为您的数据库大小很小。一旦它长大了,你以后就不能再做了。

希望这会有所帮助:)

【讨论】:

  • 感谢您的回复。 csv 文件的平均大小为 3-4 MB。我认为索引是最优的。我没有获取所有属性。目前我只有一个碎片。所以所有的数据都是一个分片。
  • 我认为基于您使用的日期或过滤器的分片应该会有所帮助。还要检查批量导出选项。您可以在导出期间通过过滤器。
猜你喜欢
  • 2021-04-01
  • 2016-03-05
  • 1970-01-01
  • 2023-03-04
  • 2017-01-29
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2023-02-02
相关资源
最近更新 更多