【发布时间】: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