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

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


person BozoJoe    schedule 12.03.2010    source источник


Ответы (5)


Вы можете использовать настройку конфигурации 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

person Joshua Smith    schedule 12.03.2010
comment
идеально, бросил хвост -f против него - person BozoJoe; 13.03.2010
comment
Что ж, трудно назвать файлы журнала .csv эквивалентом профилировщика SQL Server ... - person Feofilakt; 06.11.2019

Добавляя к ответу Джошуа, чтобы увидеть какие запросы сейчас выполняются, просто введите следующий оператор в любое время (например, в окне запроса 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)
person vladr    schedule 12.03.2010
comment
В моей версии PG (9.3) я использовал следующий запрос: SELECT datname, pid, usename, application_name, client_addr, query FROM pg_stat_activity; pg_stat_activity - это представление базы данных postgresql - person mrmuggles; 27.08.2015
comment
ВЫБЕРИТЕ client_addr, state_change, запрос FROM pg_stat_activity; - person Dmitry Dyachkov; 31.05.2016
comment
Длина столбца запроса слишком мала для отображения длинных запросов. - person Dejan Janjušević; 06.05.2020

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

person Giovanni Porcari    schedule 13.02.2014
comment
Обратите внимание, что этот инструмент предназначен только для систем * nix, что отстой для пользователей Windows. - person Alex Klaus; 02.01.2018
comment
+1, поскольку OP запросил такой инструмент, как Sql Server Profiler, а не параметры конфигурации, чтобы вручную извлечь необходимую информацию о производительности. - person EAmez; 15.07.2019
comment
Легко установить и легко использовать! sudo apt install pgbadger pgbadger /var/log/postgresql/postgresql-11-main.log Спасибо за рекомендацию! Это инструмент профилировщика, который я искал. github.com/darold/pgbadger#postgresql-configuration - person Sangar82; 07.03.2021

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

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

person Andrey Kotov    schedule 07.04.2018
comment
Это не может отображать длинные операторы SQL. SQL усекается. - person Dejan Janjušević; 06.05.2020

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

Если вы запускаете базу данных в докере, просто добавьте эту команду в 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;

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

person Felipe Pereira    schedule 17.09.2020
comment
Аналогично, SELECT query_start, query, datname FROM pg_stat_activity, где datname = 'имя вашей базы данных', упорядочивается по query_start desc - person cansu; 24.03.2021