Мне нужно увидеть запросы, отправленные на сервер PostgreSQL. Обычно я бы использовал профилировщик SQL Server для выполнения этого действия в мире SQL Server, но я еще не нашел, как это сделать в PostgreSQL. Похоже, что существует довольно много платных инструментов, я надеюсь, что есть вариант с открытым исходным кодом.
Есть ли PostgreSQL-эквивалент профилировщика SQL Server?
Ответы (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
Добавляя к ответу Джошуа, чтобы увидеть какие запросы сейчас выполняются, просто введите следующий оператор в любое время (например, в окне запроса 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)
Я обнаружил pgBadger (http://dalibo.github.io/pgbadger/), и это фантастический инструмент, который много раз спасал мне жизнь. Вот пример отчета: http://dalibo.github.io/pgbadger/samplev4.html < / а>. Если вы откроете его и перейдете в «верхнее» меню, вы увидите самые медленные запросы и запросы, требующие много времени. Затем вы можете спросить подробности и увидеть красивые графики, которые показывают запросы по часам, а если вы используете кнопку подробностей, вы можете увидеть текст SQL в красивой форме. Итак, я вижу, что этот инструмент бесплатный и идеальный.
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). Вы можете наблюдать за запросами на вкладке «Панель управления»:
Вы можете использовать расширение 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;
Или поиграйте с другими запросами в этом представлении, чтобы найти то, что вы ищете.