mysql - Ruby On Rails 很慢...?

标签 mysql ruby-on-rails ruby mongrel

我正在编写一个网络应用程序来监控家具厂的生产流程。它有成千上万的数据要处理。到目前为止,我在 Mongrel + MySQL 上运行 RoR,它真的很慢(某些 View 需要 2-4 分钟)。当我查看 RoR 日志时,数据库查询似乎并不慢(0-10 毫秒)。

RoR 将数据库数据转换为对象时是否很慢? Mongrel 慢吗?

编辑:第一件事:我在开发中。环境。在生产环境中,最慢的 View 需要 2 分钟(在一台性能良好的计算机上会降低到不到 1 分钟,我的已经 5 年了)。借助 ruby​​-prof 和一些常识,我发现了哪些方法会降低应用程序的速度。问题是在大型数据集上循环调用单个 SQL 查询:

ofs = Ofkb.find_by_sql ["..some large SQL query..."]

for of in ofs # About 700-1000 elements
   ops = Operation.find(..the single query..)
   etc.
end

以下是这些方法的 ruby​​-prof 结果:

 %self     total     self     wait    child    calls  name
 32.19     97.91    97.91     0.00     0.00       55  IO#gets (ruby_runtime:0}
 28.31     86.39    86.08     0.00     0.32    32128  Mysql#query (ruby_runtime:0}
  6.14     18.66    18.66     0.00     0.00    12432  IO#write (ruby_runtime:0}
  0.80      2.53     2.42     0.00     0.11    32122  Mysql::Result#each_hash (ruby_runtime:0}

问题是:我真的无法避免那些单一的查询。我有数以千计的事件,我必须从中计算复杂的数据。现在,我在这些方法上使用 memcached,除非您是第一个请求该页面的人,否则这些方法没问题。

最佳答案

我会同意其他人的看法。你必须剖析。在您知 Prop 体是什么导致速度缓慢之前,对您的代码做任何事情都是没有意义的。试图在不了解原因的情况下解决问题,就像感觉不舒服并决定进行大量手术直到感觉好些一样。首先诊断您的问题。它可能是像网络设置这样的小东西,也可能是代码中的一行错误。

分析的一些技巧:

How to Profile Your Rails Application

Performance Testing Rails Applications

At the Forge - Profiling Rails Applications

一旦找到瓶颈,您就可以确定要做什么。

我推荐这些视频: Railslab Scaling Rails

现在根据教授结果修改:

好的。现在您可以看到您的问题是您正在使用基于循环另一个事件记录查询结果的查询进行某种计算,我建议您考虑构建一个自定义 SQL 语句,结合您的初始选择标准和循环计算得到你需要的。您绝对可以通过优化 SQL 来加快速度。

关于mysql - Ruby On Rails 很慢...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/566401/

相关文章:

ruby-on-rails - 服务对象的 Rails 名称约定

ruby-on-rails - NameError:未初始化的常量 Mail::Parsers::ContentTransferEncodingParser

mysql - 查询两列匹配字符串的数据

Ruby:If/else 语句中定义的变量是否可以在 if/else 之外访问?

ruby-on-rails - 使用 Ruby on Rails 在文本区域中保留换行符

php - 在 foreach 方法中清空 PDO DB 查询的结果

php - 如何创建搜索表单,其中用户可以搜索三列。使用 PHP AND SQL AND HTML

ruby - 如何在单例类上定义类变量

mysql - 存储过程 - 错误 #1064

MySQL - 使用不存在的地方返回 null