pg_squeeze to rozszerzenie PostgreSQL o otwartym kodzie źródłowym, które umożliwia automatyczne i przezroczyste naprawianie rozdętych tabel.

  • automatyczna kompresja
  • brak szerokiego blokowania tabeli
  • proces przebiega w tle

PostgreSQL używa mechanizmu o nazwie MVCC (Multi Version Concurrency Control) do przechowywania danych. Jak sama nazwa wskazuje, MVCC będzie przechowywać różne wersje wiersza, aby obsługiwać jak najwięcej współbieżności. W pewnym momencie te dodatkowe rzędy należy usunąć z systemu pamięci masowej i właśnie tam pojawia się VACUUM.

W przeciwieństwie do wbudowanych poleceń „VACUUM FULL” lub CLUSTER, w przypadku „pg_squeeze” nie ma dłuższych okresów blokowania pełnej tabeli, w związku z czym odczyty i zapisy nie są blokowane podczas przebudowy. Również proces przebudowy jest bardzo wydajny ze względu na nowatorskie podejście polegające na wykorzystaniu plików dziennika transakcji i logicznego dekodowania (zamiast wyzwalaczy) w celu uchwycenia możliwych zmian danych w przebudowywanej tabeli. Przede wszystkim pomaga to zaoszczędzić miejsce na dysku i przepustowość IO, ale co ważniejsze, umożliwia bardzo krótkie czasy blokowania, dzięki czemu idealnie pasuje do krytycznych systemów OLTP.

Jak działa pg_squeeze?

  1. Rozszerzenie jest implementowane jako proces roboczy w tle (schemat wprowadzony w wersji 9.4), które okresowo monitoruje tabele zdefiniowane przez użytkownika.
  2. Gdy wykryje, że tabela przekroczyła „bloat threshold”.
  3. Automatycznie uruchamia i odbudowuje tabelę.

PG Squeeze: Kompresuje tabele lepiej niż vacuum

 

Odbudowywanie odbywa się jednocześnie w tle przy minimalnym nakładzie pamięci i obciążeniach obliczeniowych dzięki zastosowaniu wbudowanych gniazd replikacji Postgres wraz z logicznym dekodowaniem w celu wyodrębnienia możliwych zmian w tabeli podczas przebudowy z XLOG. Próg rozdęcia jest oczywiście konfigurowalny, a obliczanie współczynnika rozdęcia opiera się na Free Space Map (uwzględniając FILLFACTOR) lub pod pewnymi warunkami na rozszerzeniu „pgstattuple”, gdy jest ono dostępne. Ponadto można ustawić wiele parametrów dostosowywania, takich jak „minimalny rozmiar tabeli”, ignorując nieodpowiednie tabele. Ponadto możliwa jest zmiana kolejności przy użyciu indeksu lub przeniesienie tabeli lub indeksów do nowego obszaru tabel.

PG_SQUEEZE 1.2 POBIERANIE

Najnowszą wersję pg_squeeze można pobrać ze strony github.com. W wersji 1.2 rozszerzenie zostało zoptymalizowane w celu zmniejszenia jego wpływu na VACUUM i szybszego udostępniania segmentów WAL do archiwizacji.

github.com

Licencja

  • Licencja PostgreSQL

FAQ

P: Czy to jest bezpieczne? Co się stanie, gdy nastąpi awaria zasilania podczas przebudowy tabeli?

Odp: Tak, jest bezpieczny, ponieważ odbudowa odbywa się w transakcji. Ponadto można również ustawić maksymalny czas blokady, aby rozszerzenie mogło ograniczyć czas potrzebny na przełączenie tabeli.

P: Czym różni się od „pg_repack”?

Odp: Różni się tym, że jest bardziej przyjazny dla zasobów, ponieważ nie używa wyzwalaczy, sam określa automatycznie rozdęte tabele i nie wymaga użycia osobnego narzędzia wiersza poleceń.

P: Jakie są wymagania dotyczące przebudowywania tabel?

Odp: Poza osiągnięciem „bloat threshold”, jedynym wymaganiem zakodowanym na stałe jest to, że tabela musi mieć klucz tożsamości, definiując w ten sposób klucz podstawowy lub unikalne ograniczenie.

P: Czy jest  obsługiwana 12 wersja PostgreSQL?

Odp: Tak, w najnowszej aktualizacji jest.

Chcesz wiedzieć więcej o pg_squeeze?

SKONTAKTUJ SIĘ Z NAMI >>