Почему наши запросы к базе данных Rails медленные, несмотря на кэширование базы данных Heroku?

Ранее мы использовали базу данных Heroku Basic, но обнаружили, что операции на нашем сайте, связанные с тяжелыми запросами к базе данных, выполняются очень медленно. Мы обновились до базы данных Heroku Crane 3 дня назад в надежде, что это поможет решить проблему. Однако запросы кажутся такими же медленными. Даже выполнение одной и той же операции дважды подряд кажется медленным, хотя я ожидаю, что это будет быстро из-за кэширования.

Размер нашей базы данных составляет всего 15,4 МБ, в то время как используемая нами база данных Crane обеспечивает 400 МБ кэш-памяти. Теоретически кажется, что вся база данных может кэшироваться, что обеспечивает очень быструю обработку запросов. Должно ли это быть так? Как мы можем решить или устранить проблему? Кроме того, является ли кеш-диск блочным или основанным на запросах (т. е. нам нужно запускать один и тот же запрос дважды, чтобы извлечь выгоду из кэширования?)

Спасибо.


person Jason    schedule 03.02.2013    source источник


Ответы (2)


К вашему сведению, я работаю в команде Heroku Postgres.

В общем, Postgres будет кэшировать базовые данные таблицы, которые он извлекает с диска, поэтому вам придется работать с ними хотя бы один раз, чтобы загрузить их в память. Однако, если вы выполняете сложные запросы, кэширование данных не принесет вам многого, и иногда Rails не может делегировать достаточно работы базе данных, оставляя ЦП вашего приложения ограниченным, а базу данных недостаточно загруженной.

Я бы углубился в оптимизацию ваших запросов и индексов, чтобы позволить Postgres немного лучше творить чудеса. Вы можете начать с запуска EXPLAIN и EXPLAIN ANALYZE, чтобы выяснить, какая часть вашего запроса занимает много времени.

Хорошие ресурсы для оптимизации использования БД: http://www.freebsddiary.org/postgresql-analyze.php и http://wiki.postgresql.org/wiki/Performance_Optimization

Пример использования EXPLAIN в rails: Понимание того, как оптимизировать запрос с помощью данных объяснения Postgres/rails

person GregB    schedule 03.02.2013

с такой маленькой базой данных вы не должны увидеть никаких проблем с производительностью. Я бы профилировал приложение и выделял медленные части, как я рекомендую здесь: Rails Настройка производительности для производства?

person J_McCaffrey    schedule 05.02.2013