首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails应用程序在Heroku中非常慢。

Rails应用程序在Heroku中非常慢。
EN

Stack Overflow用户
提问于 2014-05-23 13:46:11
回答 1查看 701关注 0票数 2

Rails应用程序具有以下特性:

的一些模型从外部MySQL数据库访问数据。下面的代码用于将外部数据库设置为模型:

代码语言:javascript
复制
class Foo < ActiveRecord::Base

  establish_connection ENV['EXTERNAL_DATABASE_URL']
  self.table_name = 'foos'

  ...

end

在我的笔记本上本地运行该应用程序,我有以下请求执行时间:

代码语言:javascript
复制
Completed 200 OK in 374ms (Views: 118.1ms | ActiveRecord: 198.6ms)

当我将其上传到Heroku并在那里使用该应用程序时,同一个请求的执行时间如下

代码语言:javascript
复制
Completed 200 OK in 8000ms (Views: 901.6ms | ActiveRecord: 6609.2ms)

当我在Heroku上运行它时,ActiveRecord和视图时间都非常大。

  • 外部数据库可能是问题所在吗?
  • 我怎么查这个?
  • 如果不是的话,会有什么问题?

编辑

NewRelic显示,瓶颈是数据库。但是,这显然不是DB在查询上花费的时间,因为当我在本地运行时,它不会花费那么多时间。所以我必须假设是延迟造成的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 15:10:44

数据库请求所需的时间取决于以下几个因素:

  1. 数据库管理系统需要多长时间才能找到数据?这取决于查询的复杂性、索引的存在和表的大小。
  2. Rails从结果构建ActiveRecord对象需要多长时间?这取决于每个页面上的结果数量。
  3. 从web服务器发送请求到数据库服务器需要多长时间,再加上将结果从数据库服务器发送回web服务器需要多长时间?这个延迟取决于服务器之间的距离。

当您的web服务器由美国的Heroku (美国东部-1)托管,但是您的数据库位于圣保罗的Amazon上时,那么每个对数据库的请求都会给网页的总体响应时间增加150 US的延迟。在一个web请求中,对数据库的请求越多,这个问题就越大。

我建议将数据库尽可能地移动到web服务器。如果可能的话,在美国的同一数据中心内(在同一台服务器上最快)。或者考虑在圣保罗自己托管with服务器(也许是使用亚马逊OpsWorks)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23830936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档