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

управление высокой загрузкой базы данных postgresql

Кажется, у меня возникла проблема, из-за которой сервер, на котором запущен postgresql, испытывает довольно высокую нагрузку со средним значением выше 30.

Этот сервер работает как виртуальная машина на виртуальной машине.

Мне интересно, как лучше всего настроить postgresql, чтобы он не перегружал поле.

Если бы я вложил в виртуальную машину больше ресурсов, это решило бы проблему или просто поглотило бы ее. Забивается только CPU, памяти (2GB) вполне достаточно.

«Высокая нагрузка», вероятно, означает много параллельных запросов. Попробуйте выполнить следующий запрос:

SELECT * FROM pg_stat_activity;

Это покажет, что сервер делает в данный момент. Может, вы заметили здесь что-то подозрительное? Запрос, который не следует вызывать так часто?

Также для устранения проблем с производительностью очень полезно установить log_min_duration_statement вариант в postgresql.conf. Это покажет вам запросы, выполнение которых требует много времени. Вероятно, это те, которые вызывают наибольшую нагрузку. Обычно требуется оптимизировать один ошибочный запрос (путем его переписывания, добавления индексов или настройки конфигурации PostgreSQL), чтобы значительно снизить нагрузку на сервер.

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

Если вы используете автоматический вакуум, проверьте статистику таблицы, чтобы убедиться, что она на самом деле работает

Я не могу дать вам файл конфигурации, потому что большинство настроек зависит от вашей среды, и «высокая нагрузка» - это не единственный тип проблемы. Но вот несколько советов, как отслеживать проблемы с производительностью PGSQL.

Ну, прежде всего вам нужно будет проверить, что на самом деле делает ваша база данных. Обычно, когда вы убегаете из БД, у вас есть несколько часто выполняемых тяжелых запросов. Проверьте, какие запросы вы выполняете, а затем используйте EXPLAIN ANALYZE, чтобы получить представление о стоимости каждого запроса.

Затем вы начинаете исследовать, в чем на самом деле проблема. Плохо написанный запрос может снизить производительность, но если запросы выглядят хорошо (и не могут быть оптимизированы), вам нужно будет посмотреть, можете ли вы упростить работу с БД другими способами.

Проверьте вывод EXPLAIN на предмет последовательного сканирования, особенно если вы выполняете его на больших таблицах и в несколько этапов. Проверьте, можете ли вы ввести индексы, которые помогут с вашими запросами. EXPLAIN - это общий инструмент отслеживания производительности запросов.

Не забудьте ВАКУМ и АНАЛИЗ вашей базы данных. Многие дистрибутивы отключают сервис autovacum, и тогда вам приходится выполнять очистку / анализ вручную. Они также могут отключить учет, что сделает процесс анализа менее эффективным. После этого вернитесь и снова объясните, чтобы увидеть, выполняются ли запросы по-другому.

Если ничто другое не поможет, вам придется перестроить структуру базы данных или начать ее распространение, но мой опыт показывает, что вам не нужно этого делать, если только вы не запустите сайт с очень большой нагрузкой на БД или с тысячами одновременных пользователей. Обычно это запросы, которые база данных не может получить оптимальным образом.

Наконец проверьте http://wiki.postgresql.org/wiki/Performance_Optimization для получения дополнительных советов.