Чи існує PostgreSQL еквівалент профайлера SQL Server?


84

Мені потрібно бачити запити, подані на сервер PostgreSQL. Зазвичай я використовував би профілі SQL Server для виконання цієї дії в SQL Server land, але я ще не знайшов, як це зробити в PostgreSQL. Здається, існує досить багато інструментів для оплати, я сподіваюся, що існує варіант з відкритим кодом.

Відповіді:


59

Ви можете використовувати параметр конфігурації log_statement, щоб отримати список усіх запитів до сервера

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

Просто встановіть це, і шлях до журналу, і у вас буде список. Ви також можете налаштувати його для реєстрації лише тривалих запитів.

Потім ви можете взяти ці запити та запустити ПОЯСНЕННЯ на них, щоб з’ясувати, що з ними відбувається.

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 ім'я користувача, pid, ім'я користувача, ім'я_програми, client_addr, запит FROM pg_stat_activity; pg_stat_activity - це вигляд БД 'postgresql'
mrmuggles

3
ВИБЕРІТЬ client_addr, state_change, запит ВІД 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, оскільки операційна програма попросила інструмент, такий як Sql Server Profiler, а не параметри конфігурації для ручного вилучення необхідної інформації про продуктивність.
EAmez,

17

Мені потрібно бачити запити, подані на сервер PostgreSQL

Як варіант, якщо ви використовуєте pgAdmin (на моєму малюнку це pgAdmin 4 v2.1). Ви можете спостерігати за запитами через вкладку "Інформаційна панель": запит pgadmin4 із програми, інформаційної панелі


2
Це не може відображати довгі оператори SQL. SQL стає усіченим.
Деян Янюшевич

0

Ви можете використовувати розширення pg_stat_statements .

Якщо запустити db в docker, просто додайте цю команду 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;

Або пограйте з іншими запитами над цим видом, щоб знайти те, що ви шукаєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.