Czy istnieje odpowiednik PostgreSQL dla programu profilującego SQL Server?

84

Muszę zobaczyć zapytania przesłane do serwera PostgreSQL. Zwykle użyłbym programu profilującego SQL Server, aby wykonać tę akcję w środowisku SQL Server, ale jeszcze nie znalazłem, jak to zrobić w PostgreSQL. Wygląda na to, że jest sporo płatnych narzędzi, mam nadzieję, że istnieje wariant open source.

BozoJoe
źródło

Odpowiedzi:

59

Możesz użyć ustawienia konfiguracji log_statement, aby uzyskać listę wszystkich zapytań do serwera

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

Po prostu ustaw to i ścieżkę do pliku logowania, a będziesz mieć listę. Możesz również skonfigurować go tak, aby rejestrował tylko długo działające zapytania.

Następnie możesz wziąć te zapytania i uruchomić na nich EXPLAIN, aby dowiedzieć się, co się z nimi dzieje.

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

Joshua Smith
źródło
1
idealnie, rzucił ogon -f przeciwko niemu
BozoJoe
6
Cóż, trudno nazwać pliki dziennika .csv „odpowiednikiem programu SQL Server profiler” ...
Feofilakt
31

Dodając do odpowiedzi Joshua, aby zobaczyć, które zapytania są aktualnie uruchomione, po prostu wydaj następującą instrukcję w dowolnym momencie (np. W oknie zapytania PGAdminIII):

SELECT datname,procpid,current_query FROM pg_stat_activity;

Przykładowe dane wyjściowe:

     datname    | procpid | current_query
 ---------------+---------+---------------
  mydatabaseabc |    2587 | <IDLE>
  anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;
  mydatabaseabc |   15851 | <IDLE>
 (3 rows)
vladr
źródło
4
W mojej wersji PG (9.3) użyłem następującego zapytania: SELECT nazwa_danych, pid, nazwa_użytkownika, nazwa_aplikacji, adres_klienta, zapytanie FROM pg_stat_activity; pg_stat_activity to widok bazy danych 'postgresql'
mrmuggles
3
SELECT client_addr, state_change, zapytanie FROM pg_stat_activity;
Dmitry Dyachkov
3
Długość kolumny „zapytanie” jest za krótka, aby wyświetlić długie zapytania.
Dejan Janjušević
25

Odkryłem pgBadger ( http://dalibo.github.io/pgbadger/ ) i jest to fantastyczne narzędzie, które wielokrotnie uratowało mi życie. Oto przykład raportu: http://dalibo.github.io/pgbadger/samplev4.html . Jeśli go otworzysz i przejdziesz do menu „górnego”, zobaczysz najwolniejsze zapytania i czasochłonne zapytania. Następnie możesz zapytać o szczegóły i zobaczyć ładne wykresy, które pokazują zapytania według godziny, a jeśli użyjesz przycisku szczegółów, możesz zobaczyć tekst SQL w ładnej formie. Widzę więc, że to narzędzie jest bezpłatne i doskonałe.

Giovanni Porcari
źródło
2
Całkiem niezłe narzędzie. Użyłem tego samouczka, aby go zainstalować, ponieważ oficjalny dokument jest dość rozwlekły
mrmuggles
5
Tylko uwaga, narzędzie jest przeznaczone tylko dla systemów * nix, co jest do bani dla użytkowników systemu Windows
Alex Klaus
+1, ponieważ OP poprosił o narzędzie takie jak Sql Server Profiler, a nie opcje konfiguracji, aby ręcznie wyodrębnić potrzebne informacje o wydajności.
EAmez
17

Muszę zobaczyć zapytania przesłane do serwera PostgreSQL

Opcjonalnie, jeśli używasz pgAdmin (na moim zdjęciu jest to pgAdmin 4 v2.1). Zapytania można obserwować na karcie „Pulpit nawigacyjny”: zapytanie pgadmin4 z aplikacji, dashboard

Andrey Kotov
źródło
2
To nie może pokazać długich instrukcji SQL. Kod SQL zostaje obcięty.
Dejan Janjušević
0

Możesz użyć rozszerzenia pg_stat_statements .

Jeśli uruchamiasz bazę danych w dockerze, po prostu dodaj to polecenie, w docker-compose.ymlprzeciwnym razie po prostu spójrz na instrukcje instalacji dla swojej konfiguracji:

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

A następnie w bazie danych uruchom zapytanie:

CREATE EXTENSION pg_stat_statements;

Teraz, aby zobaczyć operacje, które zajęły więcej czasu:

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

Lub baw się innymi zapytaniami dotyczącymi tego widoku, aby znaleźć to, czego szukasz.

Felipe Pereira
źródło