Postgres: Jak mogę zobaczyć wszystkie instrukcje SQL wykonywane przez serwer bazy danych?


23

Jestem w trakcie sprawdzania każdej instrukcji SQL, którą aplikacja tworzy względem bazy danych, ze względu na wydajność. Czy istnieje prosty sposób na zarejestrowanie wszystkich instrukcji wykonywanych przez serwer bazy danych PostgreSQL? Dzięki.


W tym objaśnieniu wyjaśniono, jak zobaczyć bieżące uruchomione zapytanie tutorialdba.com/2016/11/pgstatactivity-view-explanation-in.html
nijam

Odpowiedzi:


27

Opcja konfiguracji, której szukasz, to log_statement = "all"(jeśli potrzebujesz tylko instrukcji) lub log_min_statement_duration = <some number>jeśli zaraz po „wolnych” zapytaniach (dla pewnej wartości „slow”). Więcej informacji na temat konfiguracji rejestrowania można znaleźć na stronie http://www.postgresql.org/docs/current/static/runtime-config-logging.html .


1
Rejestrowanie wszystkich instrukcji jest zabójcą wydajności (jak stwierdzono w oficjalnych dokumentach). Jednak 8.4 ma fajną cechę polegającą na uzyskiwaniu explain analyzepowolnego zapytania przy remisie, który został wykonany, możesz chcieć rozpocząć testowanie z tym, ponieważ 8.4 nie jest jeszcze wydany, ale fajnie jest wiedzieć, że zdarzyło się to w czasie wykonywania , jeśli wynik analizy wyjaśnienia jest OK, prawdopodobnie masz problemy z ograniczeniami We / Wy lub procesora, ale przynajmniej będziesz wiedział, że to nie samo zapytanie
serverhorror

5
Naprawdę podoba mi się opcja log_statement = 'mod'. Pokazuje tylko tworzenie, aktualizację i usuwanie oraz pomija wszystkie wybrane instrukcje. Świetnie, jeśli próbujesz dowiedzieć się, który kod modyfikuje jakieś pole.
Don Kirkby,

5

auto_explainModuł jest bardzo przydatny do tego celu. Będzie nie tylko rejestrować instrukcje, będzie rejestrować ich plany wykonania, a nawet rejestrować instrukcje działające w ramach funkcji PL / PgSQL. Skuteczność działania jest dość niska, chyba że włączysz analizę, w którym to przypadku poniesiesz sporo narzutu czasowego dla wszystkich zapytań.

Zobacz auto_explainw dokumentacji.


Zauważ, że „auto_explain” jest modułem, dlatego nie działa na bazach danych AWS RDS Postgres :(
johntellsall

1
@johntellsall obsługuje RDS auto_explain, jest na ich liście błogosławionych modułów. Zobacz dokumentację na docs.aws.amazon.com/AmazonRDS/latest/UserGuide/...
Craig Ringer

3

Oczywiście możesz samodzielnie wykryć najwolniejsze zapytania, ale radzę używać pgFouine - analizatora logów PostgreSQL. Jest łatwy w instalacji i bardzo przydatny.

Przykładowe raporty: tu i tutaj .


Użyłem pgFouine w projekcie i zidentyfikowałem kilka miejsc, w których indeks bardzo by pomógł.
Paul Tomblin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.