Назад | Перейти на главную страницу

postgres становится невыносимо медленным после 130 МБ pg_restore. как исправить?

У меня есть процедура резервного копирования, которая реплицирует производственную базу данных на наш промежуточный сервер. Он работает без проблем, но промежуточная база данных становится невыносимо медленной после восстановления с одного из снимков. Медленно до такой степени, что у моего веб-сервера просто время ожидания и 502-е.

Я проверил, что может быть причиной этого, и выделил две большие таблицы. У нас есть некая таблица сессий с несколькими большими ТЕКСТОВЫМИ полями. Мы храним некоторые неструктурированные данные и в настоящее время храним их в текстовых полях. Как только я уменьшу размер этой таблицы (удалив многие строки), промежуточная среда ускоряется и снова начинает нормально работать.

Я прошел через процедуру pg_reindexing базы данных и попробовал VACUUMing, но это не имеет большого значения. Это все еще очень медленно. Страницы, которым не нужен доступ к двум большим таблицам, работают нормально; страницы, которые не загружаются.

Короче, мне нужна помощь, чтобы ответить на два вопроса.

  1. Есть ли лучший способ сделать дублирование базы данных от производственной до промежуточной, если мой дамп базы данных составляет> 130 МБ, который не вызовет этой проблемы? У меня создалось впечатление, что 130 МБ - это не очень большая база данных. Я подозреваю, что это все в большой таблице сеанса с полями ТЕКСТ, о которых я говорил ранее.

  2. Есть ли способ оптимизировать эту таблицу? Есть ли какие-нибудь настройки, которые я могу сделать после pg_restoring? Боюсь, что в дождливый день мне придется восстанавливать данные из одной из этих резервных копий, и это повлияет на производительность всего сайта.

Заранее спасибо.

Когда вы пылесосите, вы АНАЛИТИРУЕТЕ?

Повторное индексирование не должно помочь: когда вы pg_restore, все эти индексы создаются с нуля.

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

Запустите ANALYZE по всей базе данных после восстановления, это обновит статистику, позволяя оптимизатору запросов создавать эффективные планы запросов.