Привет всем.
Собственно такой вопрос возник.
Как можно исправить, или что можно сделать, чтобы не возникало замедление запросов к базе данных, если в это время выполняется какой-либо тяжелый SELECT, или идет создание индекса (CREATE INDEX CONCURRENTLY), или другая DDL-операция на большой таблице?
Есть у меня база данных - 100 Гб.
Есть приложения, которые делают множество запросов к базе и им важно время отклика.
При выполнении тяжелого запроса, все запросы от сервисов начинают в разы медленнее выполняться (замедление в 10-30 раз, очень критично). Причем запросы сервисов никак не связаны с таблицами, которые участвуют в запросе.
Также при создании индекса без блокировки или другой DDL-операции таблицы начинается замедление. Здесь также таблица не используется сервисами.
Можно ли как-то это обойти? С запросами вопрос еще решить можно, но что делать с DDL? Есть ли у PostgreSQL аналог MySQL'ского 'pt-online-schema' от Percona?
Для начала посмотрите в графики мониторинга что именно растёт. И как именно. Интересны io latency на чтение/запись, CPU, график длительности транзакции и график среднего выполнения запросов. График чекпойнтов, кстати.
Насколько я понимаю, у вас всего 16 гиг памяти. При этом в постгресе на всякие буферы используется 17 гиг. У вас случаем система в своп не проваливается?
Dannerty, тогда, видимо, нужно попробовать увеличить производительность ядер процессора. Ну и 16 гигов для нагруженной базы - это маловато, как по мне.