【问题标题】:First MongoDB query ultra slow on LinodeLinode 上的第一个 MongoDB 查询超慢
【发布时间】:2014-01-31 11:40:30
【问题描述】:

当我启动我的 Rails 应用程序并打开一个需要查询我的 MongoDB 数据库的页面时,会出现以下问题:

  • 在我的本地机器上,执行查询和渲染全部大约需要 1600 毫秒
  • 在我的 linode 上,大约需要 4 分钟 来执行第一个查询并呈现所有内容

之后一切都变得更快了,缓存,页面立即加载等等。

但真的,4 分钟?这是为什么?这是MongoDB从磁盘加载到内存的过程吗?为什么它比在我的本地机器上花费的时间长这么多?

这是因为在 Linode 上共享了硬盘驱动器吗?我在运行iostat时注意到很多活动@

$ iostat -d 2   

Linux 3.12.6-x86_64-linode36 (linode)   01/31/2014  _x86_64_    (8 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda           1129.69     43026.47        17.62 1940251345     794504
xvdb            248.43      2572.50       698.08  116005452   31479356

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
xvda           4491.50    179012.00         0.00     358024          0
xvdb              0.00         0.00         0.00          0          0

【问题讨论】:

  • 没有足够的信息来了解您的性能问题可能是什么。我建议您首先比较本地环境和 linode 环境在资源(RAM、CPU、I/O)和软件版本(服务器/rails/gem 版本)方面的差异。您还需要区分生成页面所涉及的软件的时间(例如,数据库查询、Rails 应用程序和浏览器渲染),以了解哪个方面“慢”。
  • 我肯定会启用 MongoDB query profiler 并确保您已定义 appropriate indexes 以改善慢查询。您确实需要考虑在应用程序中交付页面所涉及的整个堆栈,而不仅仅是数据库。您的本地计算机可能有更多内存、更快的磁盘、不同的软件版本等。

标签: ruby-on-rails mongodb memory io linode


【解决方案1】:

据我了解,Mongo 会将所有数据从磁盘加载到内存中,因此我猜您可能在该阶段遇到了性能下降的问题。在启用应用程序之前,用几个查询来对数据库进行预热可能是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多