Czy możliwe jest uzyskanie historii zapytań wykonanych w postgres

Czy możliwe jest uzyskanie historii zapytań wykonanych w postgres? i czy można uzyskać czas potrzebny na każde zapytanie? Obecnie próbuję zidentyfikować wolne zapytania w aplikacji, nad którą pracuję.

Używam Postgres 8.3.5

Author: Chiwai Chan, 2009-10-06

8 answers

Nie ma historii w samej bazie danych, jeśli używasz psql, możesz użyć "\ s", aby zobaczyć tam historię poleceń.

Możesz uzyskać przyszłe zapytania lub inne rodzaje operacji w plikach dziennika, ustawiając log_statement w postgresql.plik conf. To, co prawdopodobnie chcesz zamiast tego, to log_min_duration_statement , które Jeśli ustawisz na 0, zarejestruje wszystkie zapytania i ich czas trwania w dziennikach. Może to być pomocne, gdy twoje aplikacje wejdą w życie, jeśli ustawisz to na wyższa wartość zobaczysz tylko długie zapytania, które mogą być pomocne w optymalizacji(możesz uruchomić EXPLAIN ANALYZE na zapytaniach, które tam znajdziesz, Aby dowiedzieć się, dlaczego są powolne).

Kolejną przydatną rzeczą w tej dziedzinie jest to, że jeśli uruchomisz psql i powiesz mu "\timing", pokaże on, jak długo trwa każde polecenie po tym. Więc jeśli Masz plik sql, który wygląda tak:

\timing
select 1;

Możesz uruchomić go z odpowiednimi flagami i zobaczyć każde polecenie przeplatane z tym, jak długo ono wziął. Oto jak i jak wygląda wynik:

$ psql -ef test.sql 
Timing is on.
select 1;
 ?column? 
----------
        1
(1 row)

Time: 1.196 ms

Jest to przydatne, ponieważ nie musisz być superużytkownikiem bazy danych, aby go używać, w przeciwieństwie do zmiany pliku konfiguracyjnego, i jest łatwiejsze w użyciu, jeśli tworzysz nowy kod i chcesz go przetestować.

 72
Author: Greg Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-06 04:37:04

Jeśli chcesz zidentyfikować wolne zapytania, niż Metoda jest użycie ustawienia log_min_duration_statement (w postgresql.conf lub set per-database with ALTER DATABASE SET).

Po zalogowaniu danych możesz użyć grepa lub niektórych specjalistycznych narzędzi-takich jakpgFouine lub mój własnyanalyzer - który nie ma odpowiednich dokumentów, ale mimo to działa całkiem dobrze.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-06 06:35:50

Jeśli pytaniem jest Zobacz historię zapytań wykonanych w wierszu poleceń. Odpowiedź to

Zgodnie z Postgresql 9.3, Spróbuj \? w wierszu poleceń znajdziesz wszystkie możliwe polecenia, w tym przeszukiwaniu historii,

  \s [FILE]              display history or save it to file

W linii poleceń spróbuj \s. Spowoduje to wyświetlenie historii zapytań, które zostały wykonane w bieżącej sesji. możesz również zapisać do pliku, Jak pokazano poniżej.

hms=# \s /tmp/save_queries.sql
Wrote history to file ".//tmp/save_queries.sql".
hms=# 
 1
Author: Allahbakash.G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-17 09:29:42

Możesz użyć jak

\s 

Pobierze ci całą historię poleceń terminala, aby wyeksportować go do pliku za pomocą

\s filename
 1
Author: DARK_C0D3R,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-08-18 12:06:03

PgBadger to kolejna opcja-również tutaj: https://github.com/dhamaniasad/awesome-postgres#utilities

Wymaga dodatkowej konfiguracji z wyprzedzeniem, aby przechwycić niezbędne dane w dziennikach postgres, zobacz oficjalną stronę internetową.

 0
Author: Vincent De Smet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 06:20:31

Dla tych, którzy używają UI Navicat:

Musisz ustawić swoje preferencje, aby używać pliku jako where do przechowywania historii.

Jeśli to jest puste, Navicat będzie pusty.

Tutaj wpisz opis obrazka

PS: nie mam powiązania ani związku z Navicat lub jego oddziałów. Szukam pomocy.

 0
Author: JayRizzo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-09 23:45:58

Nie ma historii w samej bazie danych, ale jeśli używasz narzędzia do zarządzania danymi DataGrip, możesz sprawdzić historię twojego uruchomienia w datagrip. Tutaj wpisz opis obrazka

 0
Author: Hoque MD Zahidul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-17 06:26:36

Nie loguje się, ale jeśli rozwiązujesz problemy z wolno działającymi zapytaniami w czasie rzeczywistym, możesz odpytywać widok pg_stat_activity, aby zobaczyć, które zapytania są aktywne, użytkownik/połączenie, z którego pochodzą, kiedy zostały uruchomione, itp. Np...

SELECT *
FROM pg_stat_activity
WHERE state = 'active'

Zobacz pg_stat_activity Zobacz dokumenty .

 0
Author: Molomby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-10 03:28:10