SQL Academy · Lekcja

Planowanie pojemności i audyty bloatu

Prognozować wzrost zajętości dysku i IOPS, regularnie kontrolować bloat tabel i indeksów oraz planować modernizacje przed wyczerpaniem zasobów

Lekcja 4 z 414 kroki

Planowanie pojemności i audyty bloatu to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 4 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 należy prognozować

Aby dobrać rozmiar bazy danych na następne 6–12 miesięcy, należy prognozować:

  • Wykorzystanie dysku (dane + WAL + indeksy)
  • Zapotrzebowanie na IOPS
  • Zestaw roboczy w pamięci RAM
  • Liczbę połączeń

Wzrost zajętości dysku

Należy śledzić ostatnie trendy wzrostu:

SELECT pg_size_pretty(pg_database_size(current_database()));
SELECT pg_size_pretty(pg_total_relation_size(t.oid)) AS total,
       relname
FROM pg_class t
WHERE relkind = 'r'
ORDER BY pg_total_relation_size(t.oid) DESC LIMIT 20;

Śledzenie wzrostu poszczególnych tabel

Należy zaplanować zadanie rejestrujące metryki i przedstawić je na wykresie:

INSERT INTO size_history (ts, tablename, size_bytes)
SELECT NOW(), relname, pg_total_relation_size(oid)
FROM pg_class WHERE relkind = 'r';

Szacowanie IOPS

Tabele intensywnie korzystające z operacji odczytu są widoczne w pg_stat_user_tables:

SELECT relname, seq_tup_read, idx_tup_fetch,
       seq_tup_read + idx_tup_fetch AS total_reads
FROM pg_stat_user_tables
ORDER BY total_reads DESC LIMIT 20;

Dobieranie rozmiaru pamięci RAM

shared_buffers ≈ 25% pamięci RAM. effective_cache_size ≈ 75% (wskazówka dla planera, a nie przydział pamięci). work_mem na połączenie × liczba połączeń nie powinny przekraczać dostępnej pamięci RAM.

Audyt nabrzmienia tabel

Należy znaleźć tabele z największą liczbą martwych wierszy:

SELECT relname,
       n_live_tup,
       n_dead_tup,
       round(n_dead_tup::numeric / NULLIF(n_live_tup, 0), 2) AS dead_ratio,
       last_autovacuum
FROM pg_stat_user_tables
ORDER BY n_dead_tup DESC
LIMIT 20;

Nabrzmienie indeksów

Należy użyć pgstattuple lub wbudowanych narzędzi:

CREATE EXTENSION pgstattuple;

SELECT relname,
       pg_size_pretty(pg_relation_size(indexrelid)) AS size,
       (pgstatindex(indexrelid::regclass)).leaf_fragmentation
FROM pg_stat_user_indexes
ORDER BY pg_relation_size(indexrelid) DESC LIMIT 20;

Nieużywane indeksy

Należy je znaleźć i usunąć — zwiększają liczbę operacji zapisu:

SELECT schemaname, relname, indexrelname,
       pg_size_pretty(pg_relation_size(indexrelid))
FROM pg_stat_user_indexes
WHERE idx_scan = 0
  AND indexrelname NOT LIKE '%_pkey'
ORDER BY pg_relation_size(indexrelid) DESC;

Audyt połączeń

Ilu klientów jest połączonych i jaki jest ich stan:

SELECT datname, usename, application_name, state, COUNT(*)
FROM pg_stat_activity
GROUP BY 1,2,3,4 ORDER BY 5 DESC;

Długotrwałe transakcje

Przyczyna zablokowania procesu vacuum:

SELECT pid, state, xact_start, NOW() - xact_start AS xact_age, query
FROM pg_stat_activity
WHERE xact_start IS NOT NULL
ORDER BY xact_age DESC NULLS LAST LIMIT 20;

WAL i archiwa

Należy monitorować tempo generowania WAL, aby dobrać rozmiar przestrzeni na archiwum:

SELECT pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), '0/0')) AS total_wal_generated;

Planowanie przełączania awaryjnego

Dysk repliki powinien mieć taki sam rozmiar jak dysk serwera głównego. Należy upewnić się, że tempo nadrabiania zaległości przez replikę jest ≥ tempu zapisu na serwerze głównym.

Podsumowanie

Planowanie pojemności polega na przedstawianiu właściwych metryk na wykresach.

  • Wzrost rozmiaru poszczególnych tabel
  • Współczynnik martwych wierszy
  • Nieużywane indeksy
  • Długotrwałe transakcje blokujące vacuum
  • Liczba połączeń

Szybkie sprawdzenie

Jaki widok należy odpytać, aby znaleźć tabele z największą liczbą martwych wierszy na potrzeby planowania vacuum?

Bezpłatny start

Ucz się SQL dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
46
Lekcje
183

Często zadawane pytania

Czy lekcja „Planowanie pojemności i audyty bloatu” jest bezpłatna?

Tak — pełny tekst „Planowanie pojemności i audyty bloatu” 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 „Planowanie pojemności i audyty bloatu”?

Prognozować wzrost zajętości dysku i IOPS, regularnie kontrolować bloat tabel i indeksów oraz planować modernizacje przed wyczerpaniem zasobów Ć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 4 z 4.

Ile czasu zajmuje lekcja „Planowanie pojemności i audyty bloatu”?

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