Ruby On Rails работает медленно ...? - PullRequest
7 голосов
/ 19 февраля 2009

Я пишу веб-приложение для мониторинга производственного процесса на мебельной фабрике. Он имеет тысячи данных для обработки. Пока что я запускаю RoR на Mongrel + MySQL, и это действительно очень медленно (2-4 минуты для некоторых просмотров). Когда я смотрю журналы RoR, кажется, что запросы к базе данных не медленные (0-10 мс).

Замедлен ли RoR при преобразовании данных базы данных в объект? Дворняга медленный?

Редактировать : Первое: я был в dev. окр. В производственной среде самый медленный просмотр занимает 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 для этих методов, и это нормально, если только вы не первый запросите страницу.

Ответы [ 11 ]

0 голосов
/ 19 февраля 2009

Такое длительное выполнение заставило бы меня заподозрить проблему с сетью - может быть, запрос DNS истекает на основном DNS-сервере?

...