Rails应用程序具有以下功能:
它的一些模型从外部MySQL数据库访问数据。以下代码用于将外部数据库设置为模型:
class Foo < ActiveRecord::Base
establish_connection ENV['EXTERNAL_DATABASE_URL']
self.table_name = 'foos'
...
end
在我的笔记本上本地运行应用程序,我有以下请求执行时间:
Completed 200 OK in 374ms (Views: 118.1ms | ActiveRecord: 198.6ms)
当我将其上传到Heroku并在那里使用应用程序时,相同的请求具有以下执行时间
Completed 200 OK in 8000ms (Views: 901.6ms | ActiveRecord: 6609.2ms)
当我在Heroku上运行时,ActiveRecord和Views时间都非常大。
修改
NewRelic显示瓶颈是数据库。但是,显然不是DB花在查询上的时间,因为当我在本地运行时,它并不需要那么多。所以我必须假设这是造成它的延迟?
答案 0 :(得分:2)
数据库请求需要多长时间取决于以下几个因素:
当您的Web服务器由Heroku在美国(us-east-1)托管,但您的数据库位于圣保罗的Amazon RDS上时,对数据库的每个请求都会在整个响应时间内增加150毫秒的延迟的网页。在一个Web请求中对数据库的请求越多,这个问题就越大。
我建议尽可能将数据库移到Web服务器上。如果可能,在美国的同一数据中心内(在同一台服务器上最快)。或者考虑自己在圣保罗(也许是亚马逊OpsWorks)托管网络服务器。