Ruby on rails ActiveRecord Postgres在点云(EC2)生产上比Macbook air开发慢8-10倍

Ruby on rails ActiveRecord Postgres在点云(EC2)生产上比Macbook air开发慢8-10倍,ruby-on-rails,performance,postgresql,amazon-ec2,dotcloud,Ruby On Rails,Performance,Postgresql,Amazon Ec2,Dotcloud,我在本地和点云上安装了Rails 3.2.12应用程序。我在Dotcloud上看到ActiveRecord(postgres)的性能非常慢,无法找出原因: 页面加载Macbook Air(rails应用程序处于开发模式): Completed 200 OK in 617ms (Views: 361.3ms | ActiveRecord: 39.1ms) Completed 200 OK in 796ms (Views: 315.3ms | ActiveRecord: 329.4ms) 页面加

我在本地和点云上安装了Rails 3.2.12应用程序。我在Dotcloud上看到ActiveRecord(postgres)的性能非常慢,无法找出原因:

页面加载Macbook Air(rails应用程序处于开发模式):

Completed 200 OK in 617ms (Views: 361.3ms | ActiveRecord: 39.1ms)
Completed 200 OK in 796ms (Views: 315.3ms | ActiveRecord: 329.4ms)
页面加载点云(rails应用程序处于生产模式,数据库和页面相同):

Completed 200 OK in 617ms (Views: 361.3ms | ActiveRecord: 39.1ms)
Completed 200 OK in 796ms (Views: 315.3ms | ActiveRecord: 329.4ms)
这不是一个不稳定的时间,而是所有页面加载的标准性能增量。我的数据库只有16MB,所以不大。postgres服务上的内存分配足够(128MB),仅使用30MB。我检查了我的本地postgres.conf,设置是默认的、未调整的postgresql.app设置

这种糟糕的性能正是云中所期望的吗?web服务器和db服务器之间是否存在网络延迟

非常感谢关于如何调试和修复此问题的想法

作为一名员工,我必须告诉你,如果你想彻底检查一下你的应用程序,看看为什么它没有达到你的期望,你必须这样做。我还应该告诉您,如果您处于沙箱模式,那么与处于其中一个付费层(如Live或Enterprise)相比,您可以期望更低的性能

然而,作为一名开发人员,我可以很快指出您的本地开发环境和您的环境之间的两个关键区别

  • 您的开发环境在同一台主机上运行DBMS(PostgreSQL)和rails应用程序,消除了由于往返数据库而引起的任何明显的延迟。使用dotCloud,它们可能位于不同的主机上,甚至可能位于不同的数据中心

  • 您的开发环境可能使用固态驱动器(SSD)(取决于MacBook Air的使用年限),而您刚刚进入EBS(Amazon Elastic Block Store),这是一种网络连接存储形式(在硬盘驱动器上)

  • 在这两个变化之间,我对响应时间的增加并不完全感到震惊,但我的好奇心被你的ActiveRecord时间增加了290ms而你的总体响应时间只增加了180ms所激发


    我不想猜测您的响应时间在哪里被占用,因此我再次建议您尽快完成,以便我们可以更仔细地查看。如果您这样做,请提及我的名字或此StackOverflow线程,并包括您应用程序的URL。

    云中的硬件是什么?难道Air没有超高速SSD吗?Dotcloud在EC2上,所以不管他们在什么地方。但对于16MB的数据库,postgres应该使用内存并缓存整个内容,而不是依赖于磁盘。。。有没有办法对此进行调整?您需要做的第一件事是在两台机器上的PostgreSQL中启用查询持续时间日志记录,然后比较查询持续时间。看看是DB级别的问题还是更高级别的问题。另外:机器的整体内存状态是什么?磁盘I/O加载?谢谢Charles。应用程序正在实时模式下运行。我假设有这么小的数据库,它应该主要在缓存中。ram和磁盘IO吞吐量应该无关紧要。不管是哪种方式,假设local在dev模式下运行,而dev模式不缓存类等,那么至少可以说,您会期望生产上的性能提高。我已经给约翰开了一张罚单。