Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Jak przenieść dane na inny dysk - przestrzenie tabel (tablespace)
Kiedy baza rośnie, prędzej czy później jeden wolumen przestaje wystarczać - albo miejscem, albo wydajnością. Przestrzenie tabel, czyli tablespace, to mechanizm, który pozwala rozłożyć dane PostgreSQL na kilka fizycznych lokalizacji bez przenoszenia całej bazy. Możesz trzymać gorące, często czytane tabele na szybkim SSD, a archiwalne na dużym, tańszym dysku. Pokażemy, jak to bezpiecznie skonfigurować i na co uważać, żeby nie uszkodzić instancji.
Najczęściej problem zaczyna się od alertu, że partycja z katalogiem danych zbliża się do zapełnienia, a rozbudowa tego wolumenu jest trudna albo kosztowna. Masz za to podpięty drugi, duży dysk, który stoi pusty. Alternatywnie sytuacja jest wydajnościowa: kilka tabel jest ekstremalnie gorących i chciałbyś je trzymać na najszybszym nośniku, a przy tym nie kupować drogiego SSD na całą, w dużej części zimną bazę. Bez przestrzeni tabel utknąłbyś, bo wszystkie pliki bazy siedzą w jednym katalogu wskazanym przez zmienną PGDATA i nie da się ich rozdzielić na poziomie systemu plików bez ryzyka.
PostgreSQL domyślnie zapisuje wszystko w jednym katalogu danych - to tam trafiają pliki tabel, indeksów, dziennik transakcji i konfiguracja. Ten katalog wyznacza jeden konkretny wolumen, więc rozmiar bazy jest ograniczony pojemnością tej jednej partycji, a szybkość odczytu i zapisu - parametrami tego jednego dysku. Nie da się bezpiecznie ręcznie przenieść plików tabel gdzie indziej, bo PostgreSQL trzyma sztywne powiązania między obiektami a ich plikami i nie zniesie samowolki na poziomie systemu plików. Przestrzeń tabel rozwiązuje to na poziomie samej bazy: to nazwany wskaźnik na katalog w innej lokalizacji, który PostgreSQL zna i którym sam zarządza. Dzięki temu możesz świadomie zdecydować, że dany obiekt ma fizycznie leżeć na innym dysku, a baza zadba o resztę.
CREATE TABLESPACE szybki LOCATION '/mnt/ssd/pg_szybki';. Od tej chwili baza wie o nowej lokalizacji.CREATE TABLE zamowienia (...) TABLESPACE szybki;. Nowe indeksy też możesz kierować tam osobno klauzulą TABLESPACE.ALTER TABLE archiwum SET TABLESPACE wolny;. Uwaga - ta operacja blokuje tabelę na czas przenoszenia, więc rób ją w oknie serwisowym.ALTER DATABASE moja_baza SET TABLESPACE wolny;, ale wymaga to, by do tej bazy nikt nie był podłączony.SET default_tablespace = 'szybki'; - działa dla obiektów tworzonych bez jawnej klauzuli TABLESPACE.Listę wszystkich przestrzeni tabel wraz z ich lokalizacjami zobaczysz w psql poleceniem \db+. Żeby potwierdzić, w której przestrzeni fizycznie leży dany obiekt, sprawdź katalog systemowy - przydatna jest funkcja pg_tablespace_location(oid), która zwraca ścieżkę dla wskazanej przestrzeni. Po przeniesieniu tabeli warto też zajrzeć na docelowy dysk narzędziem systemowym pokazującym zajętość: miejsce powinno przyrosnąć na nowym wolumenie i zwolnić się na starym. Rozmiar samej przestrzeni tabel policzysz funkcją pg_tablespace_size('nazwa'), co pozwoli monitorować, jak zapełnia się nowy dysk.
Wróć do listy: 100 najczęstszych pytań i problemów z PostgreSQL

Sprawdź szkolenie: Administracja, replikacja i tuning baz danych PostgreSQL
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Sprawdź szkolenie: Zaawansowana administracja PostgreSQL (HA, DR, monitoring, skalowanie)
To szkolenie może być dofinansowane z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...