gpt4 book ai didi

mysql - Rails 应用程序在 Heroku 中真的很慢

转载 作者:太空宇宙 更新时间:2023-11-03 16:01:36 25 4
gpt4 key购买 nike

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 report

NewRelic 表明瓶颈是数据库。但是,这显然不是 DB 花在查询上的时间,因为当我在本地运行时,它不需要那么多。所以我必须假设是延迟导致了它?

最佳答案

数据库请求需要多长时间取决于几个因素:

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

如果您的 Web 服务器由美国 (us-east-1) 的 Heroku 托管,但您的数据库位于圣保罗的 Amazon RDS 上,则对数据库的每个请求都会在总响应时间中增加另外 150 毫秒的延迟的网页。在一个 Web 请求中完成对数据库的请求越多,这个问题就越严重。

我建议将数据库移动到尽可能靠近网络服务器的位置。如果可能的话,在美国的同一个数据中心内(在同一个服务器上是最快的)。或者考虑在圣保罗自己托管网络服务器(可能使用 Amazon OpsWorks)。

关于mysql - Rails 应用程序在 Heroku 中真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23830936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com