Dlaczego partycjonować: przycinanie i konserwacja
Rozumieć korzyści z partycjonowania: przycinanie zakresu zapytań, szybszy VACUUM i łatwiejszą archiwizację
Dlaczego partycjonować: przycinanie i konserwacja 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.
Czym jest partycjonowanie?
Podział jednej tabeli logicznej na wiele tabel fizycznych (partycji), z których każda zawiera podzbiór wierszy. Zapytania skanują tylko odpowiednie partycje.
Po co?
Duże tabele powodują problemy:
- Indeksy stają się ogromne, a wyszukiwanie wolniejsze
- VACUUM trwa wiele godzin
- Kopie zapasowe tworzą się długo
- Niektóre zapytania wykonują niepotrzebne skanowania
Partycjonowanie rozwiązuje wszystkie cztery problemy.
Eliminowanie partycji
Planer może POMIJAĆ partycje, które nie mogą spełnić warunku WHERE:
EXPLAIN SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Only March partition scanned; older partitions skipped.
-- Plan rows: 1M, not 100B.Kiedy partycjonować
Partycjonowanie warto zastosować, gdy:
- tabela ma rozmiar co najmniej 100 GB
- istnieje naturalny klucz partycjonowania (data, dzierżawca, region)
- większość zapytań filtruje dane według tego klucza
- stare dane można zarchiwizować lub usunąć
Kiedy NIE partycjonować
Nie należy partycjonować tabeli tylko dlatego, że brzmi to ciekawie:
- Tabele o rozmiarze kilku GB lub mniejszym nie odnoszą z tego korzyści
- Jeśli zapytania nie filtrują danych według klucza partycjonowania, NIE następuje eliminowanie partycji
- Partycjonowanie zwiększa złożoność operacyjną (zarządzanie partycjami)
Strategie partycjonowania
PostgreSQL obsługuje trzy strategie:
- Range — partycje obejmują zakresy wartości (daty, identyfikatory)
- List — partycje przechowują określone wartości (kraje, dzierżawcy)
- Hash — haszowanie modulo zapewniające równomierny rozkład
Tanie usuwanie
Usunięcie partycji jest natychmiastowe — nie wymaga usuwania wiersz po wierszu:
DROP TABLE events_2023;
-- 100GB gone in milliseconds, no VACUUM aftermath.Łatwiejsze utrzymanie
VACUUM, REINDEX i ANALYZE działają dla poszczególnych partycji. Okna konserwacyjne można dopasować do pojedynczych partycji zamiast potrzebować jednej ogromnej operacji.
Mniejsze indeksy na partycję
Każda partycja ma własne indeksy. B-tree na partycji o rozmiarze 1 GB ma mniej poziomów niż na partycji o rozmiarze 1 TB — wyszukiwanie jest szybsze.
Partycjonowanie to narzędzie, nie magiczne rozwiązanie
Partycjonowanie nie zapewnia bezpłatnego wzrostu wydajności — daje eliminowanie partycji w zapytaniach filtrujących dane według klucza partycjonowania oraz ułatwia utrzymanie. Jeśli te korzyści nie mają zastosowania, partycjonowanie tylko zwiększy złożoność.
Natywne partycjonowanie deklaratywne PostgreSQL
Dostępne od PG 10. Każda partycja jest rzeczywistą tabelą:
CREATE TABLE events (
id BIGSERIAL,
ts TIMESTAMPTZ NOT NULL,
user_id BIGINT,
data JSONB
) PARTITION BY RANGE (ts);
CREATE TABLE events_2024_01 PARTITION OF events
FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');Przed PG10: partycjonowanie przez dziedziczenie
Starsze systemy używają dziedziczenia tabel i wyzwalaczy. Nie należy stosować tego rozwiązania w nowym kodzie — partycjonowanie deklaratywne jest prostsze i szybsze.
Podsumowanie
Partycjonowanie sprawdza się w przypadku dużych tabel dzielonych według przedziałów czasowych lub dzierżawców.
- Eliminowanie partycji pomija nieistotne partycje
- Utrzymanie poszczególnych partycji jest szybsze
- DROP TABLE zastępuje DELETE na 100 GB
- To nie magia — pomaga tylko wtedy, gdy zapytania korzystają z klucza partycjonowania
Szybki test
Partycjonują Państwo tabelę według miesięcy, a następnie uruchamiają SELECT * FROM events WHERE country = 'US' bez filtra daty. Czy partycjonowanie pomoże?
Często zadawane pytania
Czy lekcja „Dlaczego partycjonować: przycinanie i konserwacja” jest bezpłatna?
Tak — pełny tekst „Dlaczego partycjonować: przycinanie i konserwacja” 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 „Dlaczego partycjonować: przycinanie i konserwacja”?
Rozumieć korzyści z partycjonowania: przycinanie zakresu zapytań, szybszy VACUUM i łatwiejszą archiwizację Ć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 „Dlaczego partycjonować: przycinanie i konserwacja”?
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
- Dlaczego partycjonować: przycinanie i konserwacja
- Partycjonowanie zakresowe, listowe i haszujące
- Odłączanie i dołączanie partycji
- Wydajne wykonywanie zapytań obejmujących partycje