Есть ли PostgreSQL-эквивалент профилировщика SQL Server?

84

Мне нужно увидеть запросы, отправленные на сервер PostgreSQL. Обычно я бы использовал профилировщик SQL Server для выполнения этого действия в среде SQL Server, но я еще не нашел, как это сделать в PostgreSQL. Похоже, что существует довольно много платных инструментов, я надеюсь, что есть вариант с открытым исходным кодом.

BozoJoe
источник

Ответы:

59

Вы можете использовать параметр конфигурации log_statement, чтобы получить список всех запросов к серверу.

https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement

Просто установите это и путь к файлу журнала, и у вас будет список. Вы также можете настроить его так, чтобы он регистрировал только длительные запросы.

Затем вы можете взять эти запросы и запустить на них EXPLAIN, чтобы узнать, что с ними происходит.

https://www.postgresql.org/docs/9.2/static/using-explain.html

Джошуа Смит
источник
1
идеально, бросил против него хвост -f
BozoJoe
6
Ну, его трудно назвать файлы «эквивалент профилировщика SQL Server» ... .csv журнал
Феофилакт
31

Добавляя к ответу Джошуа, чтобы увидеть, какие запросы в настоящее время выполняются, просто введите следующий оператор в любое время (например, в окне запроса PGAdminIII):

SELECT datname,procpid,current_query FROM pg_stat_activity;

Пример вывода:

     datname    | procpid | current_query
 ---------------+---------+---------------
  mydatabaseabc |    2587 | <IDLE>
  anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;
  mydatabaseabc |   15851 | <IDLE>
 (3 rows)
владр
источник
4
В моей версии PG (9.3) я использовал следующий запрос: SELECT datname, pid, usename, application_name, client_addr, query FROM pg_stat_activity; pg_stat_activity - это представление базы данных postgresql
mrmuggles
3
ВЫБЕРИТЕ client_addr, state_change, запрос FROM pg_stat_activity;
Дмитрий Дьячков
3
Длина столбца «запрос» слишком мала для отображения длинных запросов.
Деян Янюшевич
25

Я открыл для себя pgBadger ( http://dalibo.github.io/pgbadger/ ), и это фантастический инструмент, который много раз спасал мне жизнь. Вот пример отчета: http://dalibo.github.io/pgbadger/samplev4.html . Если вы откроете его и перейдете в «верхнее» меню, вы увидите самые медленные запросы и запросы, отнимающие много времени. Затем вы можете спросить подробности и увидеть красивые графики, которые показывают запросы по часам, а если вы воспользуетесь кнопкой подробностей, вы сможете увидеть текст SQL в красивой форме. Итак, я вижу, что этот инструмент бесплатный и идеальный.

Джованни Поркари
источник
2
Довольно приятный инструмент. Я использовал этот учебник для его установки, так как официальный документ довольно подробный: dhis2.org/analysing-postgresql-logs-using-pgbadger
mrmuggles
5
Замечу, что этот инструмент предназначен только для систем * nix, что отстой для пользователей Windows
Алекс Клаус
+1, поскольку OP запросил такой инструмент, как Sql Server Profiler, не параметры конфигурации, чтобы вручную извлечь необходимую информацию о производительности.
EAmez
17

Мне нужно увидеть запросы, отправленные на сервер PostgreSQL

Как вариант, если вы используете pgAdmin (на моем фото это pgAdmin 4 v2.1). Вы можете наблюдать запросы через вкладку «Личный кабинет»: запрос pgadmin4 из приложения, приборной панели

Андрей Котов
источник
2
Это не может отображать длинные операторы SQL. SQL усекается.
Деян Янюшевич
0

Вы можете использовать расширение pg_stat_statements .

Если вы запускаете db в докере, просто добавьте эту команду, в docker-compose.ymlпротивном случае просто посмотрите инструкции по установке для вашей установки:

command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200

А затем в базе данных запустите этот запрос:

CREATE EXTENSION pg_stat_statements;

Теперь, чтобы увидеть операции, на выполнение которых требовалось больше времени:

SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;

Или поиграйте с другими запросами в этом представлении, чтобы найти то, что вы ищете.

Фелипе Перейра
источник