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.

Jin Kim
źródło
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 .

womble
źródło
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.

Craig Ringer
źródło
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 .

Surowy_admin
źródło
Użyłem pgFouine w projekcie i zidentyfikowałem kilka miejsc, w których indeks bardzo by pomógł.
Paul Tomblin