0Pricing
SQL Academy · Lekcja

pg_stat_statements: najważniejsze zapytania

Włączać pg_stat_statements, znajdować najbardziej obciążające zapytania według łącznego czasu i kierować je do optymalizacji

pg_stat_statements: najważniejsze zapytania to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co zapewnia pg_stat_statements

Jest to narastający rejestr każdego zapytania, znormalizowany według jego struktury — najbardziej użyteczne pojedyncze narzędzie administratora PostgreSQL.

Włączanie rozszerzenia

Jest to rozszerzenie contrib. Należy dodać je do shared_preload_libraries i ponownie uruchomić serwer:

-- postgresql.conf
shared_preload_libraries = 'pg_stat_statements'

-- After restart:
CREATE EXTENSION pg_stat_statements;

Najczęściej wykonywane zapytania według łącznego czasu

Zapytanie „na co zużywany jest procesor”:

SELECT calls,
       total_exec_time,
       mean_exec_time,
       rows,
       query
FROM pg_stat_statements
ORDER BY total_exec_time DESC
LIMIT 10;

Wolne zapytania w pojedynczym wykonaniu

Zapytania, które są wolne przy każdym wykonaniu:

SELECT mean_exec_time, calls, query
FROM pg_stat_statements
WHERE mean_exec_time > 100
ORDER BY mean_exec_time DESC
LIMIT 20;

Częste, tanie zapytania

Milion zapytań trwających po 1 ms nadal stanowi problem:

SELECT calls, mean_exec_time, total_exec_time, query
FROM pg_stat_statements
ORDER BY calls DESC
LIMIT 20;

Normalizacja

pg_stat_statements grupuje zapytania według znormalizowanej struktury — literały są zastępowane przez $N. Dzięki temu „SELECT * FROM users WHERE id = 1” i „= 2” stają się tym samym wierszem.

Resetowanie statystyk

Po wdrożeniu można rozpocząć pomiar od nowa, aby zmierzyć nowe zachowanie:

SELECT pg_stat_statements_reset();

Czas operacji wejścia-wyjścia a czas procesora

Nowsze wersje PG rozdzielają czas wykonywania. shared_blks_hit / shared_blks_read wskazują, czy dane zostały odczytane z pamięci podręcznej, czy z dysku:

SELECT query, shared_blks_hit, shared_blks_read,
       shared_blks_read::FLOAT / NULLIF(shared_blks_hit + shared_blks_read, 0) AS read_ratio
FROM pg_stat_statements
ORDER BY shared_blks_read DESC LIMIT 20;

Czas JIT i planowania

PG 13+ udostępnia total_plan_time. Niektóre zapytania spędzają więcej czasu na PLANOWANIU niż na wykonywaniu — zwykle jest to sygnał, aby użyć przygotowanych instrukcji.

Statystyki według bazy danych i użytkownika

pg_stat_statements działa w całym klastrze. Należy filtrować według kolumn dbid i userid, aby uzyskać widoki dla poszczególnych baz danych lub użytkowników.

Łączenie z EXPLAIN ANALYZE

pg_stat_statements informuje, KTÓRE zapytania są wolne. EXPLAIN ANALYZE informuje, DLACZEGO.

Zastrzeżenia

  • Agregowanie danych według bazy danych i użytkownika może ukrywać problemy — należy analizować łączną wartość
  • Nie śledzi czasu dla poszczególnych wierszy, tylko łączny czas pojedynczego wykonania
  • Statystyki są resetowane przy ponownym uruchomieniu serwera lub wywołaniu funkcji resetującej

Podsumowanie

pg_stat_statements jest niezbędny w środowisku produkcyjnym.

  • Najwyższy łączny czas → największe korzyści z optymalizacji
  • Najwyższa średnia → stała powolność
  • Najwięcej wywołań → problem z częstotliwością
  • Po rozwiązania należy sięgać razem z EXPLAIN

Szybkie sprawdzenie

Włączono pg_stat_statements. Które zapytanie warto przeanalizować w pierwszej kolejności, aby uzyskać największe korzyści z optymalizacji?

Często zadawane pytania

Czy lekcja „pg_stat_statements: najważniejsze zapytania” jest bezpłatna?

Tak — pełny tekst „pg_stat_statements: najważniejsze zapytania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „pg_stat_statements: najważniejsze zapytania”?

Włączać pg_stat_statements, znajdować najbardziej obciążające zapytania według łącznego czasu i kierować je do optymalizacji Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „pg_stat_statements: najważniejsze zapytania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. pg_stat_statements: najważniejsze zapytania
  2. pgBadger do analizy logów
  3. Pula połączeń: PgBouncer
  4. Planowanie pojemności i audyty bloatu
← Powrót do SQL Academy