Postgres: Как я могу увидеть все операторы SQL, выполняемые сервером базы данных?

23

Я нахожусь в процессе рассмотрения каждого оператора SQL, который приложение делает с базой данных, из соображений производительности. Есть ли простой способ регистрировать все операторы, выполняемые сервером базы данных PostgreSQL? Спасибо.

Джин Ким
источник
В этом следующем объяснении объясняется, как просмотреть текущий запущенный запрос tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Ответы:

27

Опция config, которую вы ищете, это log_statement = "all"(если вы просто хотите операторы), или log_min_statement_duration = <some number>если вы просто после «медленных» запросов (для некоторого значения «slow»). См. Http://www.postgresql.org/docs/current/static/runtime-config-logging.html для получения дополнительной информации о конфигурации регистрации.

romble
источник
1
Регистрация всех заявлений является убийцей производительности (как указано в официальных документах). Тем не менее, в 8.4 есть хорошая возможность получать explain analyzeмедленный запрос при его выполнении, вы можете начать тестирование с этим, так как 8.4 еще не выпущен, но это хорошая возможность узнать, что произошло во время выполнения. , если результаты анализа объяснения в порядке, вы, вероятно, сталкиваетесь с проблемами ввода-вывода или ограничений ЦП, но по крайней мере вы будете знать, что это не сам запрос
serverhorror
5
Мне очень нравится опция log_statement = 'mod'. Он показывает только создает, обновляет и удаляет и пропускает все операторы выбора. Отлично, если вы пытаетесь выяснить, какой код настраивает какое-то поле.
Дон Киркби
5

auto_explainМодуль является очень полезным для этого. Он будет не только регистрировать операторы, он будет регистрировать их планы выполнения и даже может регистрировать операторы, выполняемые в функциях PL / PgSQL. Падение производительности довольно низкое, если вы не включите анализ, и в этом случае у вас будет довольно много временных затрат для всех запросов.

Смотрите auto_explainв документации.

Крейг Рингер
источник
Обратите внимание, что auto_explain является модулем, поэтому он не работает в базах данных AWS RDS Postgres :(
johntellsall
1
@johntellsall RDS поддерживает auto_explain, он находится в их списке благословенных модулей. Смотрите документацию на docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…
Крейг Рингер
3

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

Примеры отчетов: здесь и здесь .

Severe_admin
источник
Я использовал pgFouine в проекте и определил несколько мест, где индекс очень помог бы.
Пол Томблин