Najlepsze rozwiązania dotyczące pg_dump i pg_restore dla usługi Azure Database for PostgreSQL — serwer elastyczny

DOTYCZY: Azure Database for PostgreSQL — serwer elastyczny

W tym artykule opisano opcje i najlepsze rozwiązania dotyczące przyspieszania pg_dump i pg_restore. Wyjaśniono również najlepsze konfiguracje serwera do przeprowadzania pg_restore.

Najlepsze rozwiązania dotyczące pg_dump

Za pomocą narzędzia pg_dump można wyodrębnić elastyczną bazę danych serwera usługi Azure Database for PostgreSQL do pliku skryptu lub pliku archiwum. Kilka opcji wiersza polecenia, których można użyć, aby skrócić ogólny czas zrzutu przy użyciu pg_dump są wymienione w poniższych sekcjach.

Format katalogu (-Fd)

Ta opcja zwraca archiwum w formacie katalogu, które można wprowadzić w celu pg_restore. Domyślnie dane wyjściowe są kompresowane.

Zadania równoległe (-j)

Za pomocą pg_dump można uruchamiać zadania zrzutu współbieżnie przy użyciu opcji zadań równoległych. Ta opcja zmniejsza całkowity czas zrzutu, ale zwiększa obciążenie serwera bazy danych. Zalecamy dotarcie do wartości zadania równoległego po ścisłej monitorowania metryk serwera źródłowego, takich jak procesor CPU, pamięć i liczba operacji we/wy na sekundę (operacje wejścia/wyjścia na sekundę).

Podczas ustawiania wartości dla opcji zadań równoległych pg_dump wymaga następujących elementów:

  • Liczba połączeń musi być równa liczbie zadań równoległych +1, dlatego należy odpowiednio ustawić max_connections wartość.
  • Liczba zadań równoległych powinna być mniejsza lub równa liczbie procesorów wirtualnych przydzielonych dla serwera bazy danych.

Kompresja (-Z0)

Ta opcja określa poziom kompresji do użycia. Zero oznacza brak kompresji. Kompresja zerowa podczas procesu pg_dump może pomóc w zyskać wydajność.

Wzdęcie tabeli i opróżnianie

Przed rozpoczęciem procesu pg_dump należy rozważyć, czy konieczne jest opróżnianie tabeli. Wzdęcie do tabel znacznie zwiększa się pg_dump razy. Wykonaj następujące zapytanie, aby zidentyfikować wzdęcie tabeli:

select schemaname,relname,n_dead_tup,n_live_tup,round(n_dead_tup::float/n_live_tup::float*100) dead_pct,autovacuum_count,last_vacuum,last_autovacuum,last_autoanalyze,last_analyze from pg_stat_all_tables where n_live_tup >0;

Kolumna dead_pct w tym zapytaniu jest procentem martwych krotki w porównaniu z krotkami na żywo. Wysoka dead_pct wartość tabeli może wskazywać, że tabela nie jest prawidłowo opróżniona. Aby uzyskać więcej informacji, zobacz Autovacuum tuning in Azure Database for PostgreSQL - Flexible Server (Dostrajanie automatycznego czyszczenia w usłudze Azure Database for PostgreSQL — serwer elastyczny).

Dla każdej zidentyfikowanej tabeli można przeprowadzić ręczną analizę próżni, uruchamiając następujące polecenie:

vacuum(analyze, verbose) <table_name> 

Korzystanie z serwera PITR

Można wykonać pg_dump na serwerze online lub na żywo. Tworzy spójne kopie zapasowe, nawet jeśli baza danych jest używana. Nie blokuje ona używania bazy danych przez innych użytkowników. Przed rozpoczęciem procesu pg_dump rozważ rozmiar bazy danych i inne potrzeby biznesowe lub klienta. Małe bazy danych mogą być dobrymi kandydatami do wykonywania pg_dump na serwerze produkcyjnym.

W przypadku dużych baz danych można utworzyć serwer odzyskiwania do punktu w czasie (PITR) z serwera produkcyjnego i wykonać proces pg_dump na serwerze PITR. Uruchomienie pg_dump w pitr byłoby zimnym procesem uruchamiania. Kompromisem w przypadku tego podejścia jest to, że nie należy zajmować się dodatkowym użyciem procesora CPU, pamięci i operacji we/wy, które jest dostarczane z pg_dump procesem uruchamianym na rzeczywistym serwerze produkcyjnym. Można uruchomić pg_dump na serwerze PITR, a następnie usunąć serwer PITR po zakończeniu procesu pg_dump.

Składnia pg_dump

Użyj następującej składni dla pg_dump:

pg_dump -h <hostname> -U <username> -d <databasename> -Fd -j <Num of parallel jobs> -Z0 -f sampledb_dir_format

Najlepsze rozwiązania dotyczące pg_restore

Za pomocą narzędzia pg_restore można przywrócić elastyczną bazę danych serwera usługi Azure Database for PostgreSQL z archiwum utworzonego przez pg_dump. W poniższych sekcjach wymieniono kilka opcji wiersza polecenia umożliwiających skrócenie ogólnego czasu przywracania.

Przywracanie równoległe

Korzystając z wielu współbieżnych zadań, można skrócić czas potrzebny na przywrócenie dużej bazy danych na serwerze docelowym z wieloma rdzeniami wirtualnymi. Liczba zadań może być równa lub mniejsza niż liczba procesorów wirtualnych przydzielonych dla serwera docelowego.

Parametry serwera

Jeśli przywracasz dane na nowym serwerze lub serwerze nieprodukcyjnym, możesz zoptymalizować następujące parametry serwera przed uruchomieniem pg_restore:

work_mem = 32 MB
max_wal_size = 65536 (64 GB)
checkpoint_timeout = 3600 #60min
maintenance_work_mem = 2097151 (2 GB)
autovacuum = wyłączone
wal_compression = włączone

Po zakończeniu przywracania upewnij się, że wszystkie te parametry zostały odpowiednio zaktualizowane zgodnie z wymaganiami dotyczącymi obciążenia.

Uwaga

Postępuj zgodnie z poprzednimi zaleceniami tylko wtedy, gdy jest wystarczająca ilość pamięci i miejsca na dysku. Jeśli masz mały serwer z 2, 4 lub 8 rdzeniami wirtualnymi, ustaw odpowiednio parametry.

Inne uwagi

  • Wyłącz wysoką dostępność przed uruchomieniem pg_restore.
  • Przeanalizuj wszystkie tabele, które są migrowane po zakończeniu przywracania.

Składnia pg_restore

Użyj następującej składni dla pg_restore:

pg_restore -h <hostname> -U <username> -d <db name> -Fd -j <NUM> -C <dump directory>

  • -Fd: format katalogu.
  • -j: liczba zadań.
  • -C: Rozpocznij dane wyjściowe za pomocą polecenia , aby utworzyć samą bazę danych, a następnie ponownie nawiązać z nią połączenie.

Oto przykład sposobu wyświetlania tej składni:

pg_restore -h <hostname> -U <username> -j <Num of parallel jobs> -Fd -C -d <databasename> sampledb_dir_format

Zagadnienia dotyczące maszyny wirtualnej

Utwórz maszynę wirtualną w tym samym regionie i strefie dostępności, najlepiej tam, gdzie znajdują się serwery docelowe i źródłowe. Ewentualnie utwórz maszynę wirtualną bliżej serwera źródłowego lub serwera docelowego. Zalecamy używanie usługi Azure Virtual Machines z lokalnym dyskiem SSD o wysokiej wydajności.

Aby uzyskać więcej informacji na temat jednostek SKU, zobacz:

Następne kroki