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