2013-03-12 3 views
1

Мы - приложение Ruby on rails, работающее на Heroku, и мы используем решение Postgres Heroku для нашей БД.Положите дорогостоящий запрос на фоновый поток, помогите сайту производительности?

У нас очень дорогой запрос БД. Это занимает около 45 секунд. Мы используем memcache для кэширования этого запроса ... но первый раз, когда кто-то идет на страницу, которая запускает этот запрос через 24 часа в кеше, сайт в основном идет вниз по мере запуска этого запроса.

Мы рассматриваем вопрос о размещении запроса на фоновом потоке. Будет ли это хорошо работать с memcache и это поможет производительности сайта? Может ли тот факт, что БД все еще работает над большим запросом, влияет на загрузку других страниц?

+0

Зависит от того, почему «сайт в основном идет вниз». Является ли этот большой запрос причиной блокировки? Голодание других процессов для ввода-вывода? Выплескиваясь на огромные временные файлы и вызывая серьезную диспропорцию? Вам нужно начать с разработки, где система является узким местом и что замедляет другие запросы. Посмотрите на 'pg_locks' и посмотрите http://wiki.postgresql.org/wiki/Lock_Monitoring. Используйте vmstat, top и т. Д. (Если вы можете на Heroku), чтобы наблюдать за загрузкой системы. Посмотрите в 'pg_stat_activity', чтобы узнать, есть ли много запросов в очереди, и если да, то в каком состоянии они находятся. –

ответ

1

Это может помочь, если проблема не является ресурсоемкой на dyno или блокирует базу данных.

Если ни один из случаев не является истинным, вы можете просто что-то вернуть (предыдущая версия, возможно, начать процесс до того, как кеш является устаревшим) для инициирующего клиента и закрутить новый поток.

Если интенсивность находится на динамо, а не база данных, вы можете попробовать развернуть рабочий динамо или scheduled job.

Если ваша база данных заблокирована, вы вернетесь на чертежную доску.

О, и если ваше приложение использует только одно соединение с базой данных, обязательно откройте еще один для потока (динамо позаботится о себе).

Смежные вопросы