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
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?
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
- pg_stat_statements: najważniejsze zapytania
- pgBadger do analizy logów
- Pula połączeń: PgBouncer
- Planowanie pojemności i audyty bloatu