Freigeben über


Bewährte Methoden für pg_dump und pg_restore für Azure Database for PostgreSQL – Flexibler Server

GILT FÜR: Azure Database for PostgreSQL – Flexibler Server

In diesem Artikel werden Optionen und bewährte Methoden zur Beschleunigung von pg_dump und pg_restore überprüft. Außerdem werden die besten Serverkonfigurationen für die Ausführung von pg_restore erläutert.

Bewährte Methoden für pg_dump

Sie können mit dem Hilfsprogramm pg_dump eine Azure Database for PostgreSQL – Flexibler Server-Datenbank in eine Skript- oder Archivdatei extrahieren. Einige der Befehlszeilenoptionen, die Sie verwenden können, um die gesamte Abbildsicherungszeit mithilfe von pg_dump zu verringern, werden in den folgenden Abschnitten aufgeführt.

Verzeichnisformat (-Fd)

Diese Option gibt ein Verzeichnisformatarchiv aus, das als Eingabe für pg_restore verwendet werden kann. Standardmäßig ist die Ausgabe komprimiert.

Parallelaufträge (-j)

Mit pg_dump können Sie Abbildsicherungsaufträge mit der Option für Parallelaufträge gleichzeitig ausführen. Diese Option reduziert die Gesamtzeit für Sicherungen, führt aber andererseits auch zu einer höheren Auslastung auf dem Datenbankserver. Sie sollten nach genauer Überwachung der Quellservermetriken wie CPU, Arbeitsspeicher und IOPS (Eingabe-/Ausgabevorgänge pro Sekunde) einen Parallelauftragswert ermitteln.

Wenn Sie einen Wert für die Option für Parallelaufträge festlegen, erfordert pg_dump Folgendes:

  • Die Anzahl der Verbindungen muss der Anzahl der parallelen Aufträge +1 entsprechen, sodass Sie den max_connections-Wert entsprechend festlegen müssen.
  • Die Anzahl der Parallelaufträge sollte kleiner oder gleich der Anzahl der vCPUs sein, die dem Datenbankserver zugewiesen sind.

Komprimierung (-Z0)

Diese Option gibt den zu verwendenden Komprimierungsgrad an. Null bedeutet keine Komprimierung. Die Nullkomprimierung während des pg_dump-Prozesses kann zu einem Leistungsgewinnen beitragen.

Tabellenüberfrachtung und -leerung

Bestimmen Sie vor dem Start des pg_dump-Prozesses, ob eine Tabellenleerung erforderlich ist. Überfrachtete Tabellen verlängern die erforderliche Zeit für pg_dump erheblich. Führen Sie die folgende Abfrage aus, um Tabellenüberfrachtungen zu identifizieren:

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;

Die Spalte dead_pct in dieser Abfrage gibt den Prozentsatz inaktiver Tupel im Vergleich zu den aktiven Tupeln an. Ein hoher Wert für dead_pct bei einer Tabelle kann darauf hindeuten, dass die Tabelle nicht ordnungsgemäß geleert wurde. Weitere Informationen finden Sie unter Autovacuum-Tuning in Azure Database for PostgreSQL – Flexibler Server.

Für jede Tabelle, die Sie identifizieren, können Sie eine manuelle Leerungsanalyse ausführen, indem Sie Folgendes ausführen:

vacuum(analyze, verbose) <table_name> 

Verwenden eines PITR-Servers

Sie können pg_dump auf einem Online- oder Liveserver ausführen. Es erstellt auch dann konsistente Sicherungen, wenn die Datenbank gerade verwendet wird. Andere Benutzer*innen werden nicht daran gehindert, die Datenbank zu verwenden. Berücksichtigen Sie die Datenbankgröße und andere Geschäfts- oder Kundenanforderungen, bevor Sie den pg_dump-Prozess starten. Bei kleinen Datenbanken kann pg_dump möglicherweise auch auf dem Produktionsserver ausgeführt werden.

Für große Datenbanken können Sie einen PITR-Server (Point In Time Recovery, Zeitpunktwiederherstellung) vom Produktionsserver aus erstellen und den pg_dump-Prozess auf dem PITR-Server ausführen. Das Ausführen von pg_dump auf einem PITR-Server wird als kalte Ausführung bezeichnet. Bei diesem Ansatz müssen Sie sich keine Gedanken über zusätzliche CPU-, Arbeitsspeicher- oder E/A-Auslastung machen, die bei der Ausführung von pg_dump auf einem Produktionsserver auftritt. Sie können pg_dump auf einem PITR-Server ausführen und den PITR-Server nach Abschluss des pg_dump-Prozesses entfernen.

Syntax für pg_dump

Verwenden Sie die folgende Syntax für pg_dump:

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

Bewährte Methoden für pg_restore

Sie können das Hilfsprogramm pg_restore verwenden, um eine Azure Database for PostgreSQL – Flexibler Server-Datenbank aus einem von pg_dump erstellten Archiv wiederherzustellen. Einige Befehlszeilenoptionen zum Verringern der Gesamtwiederherstellungszeit werden in den folgenden Abschnitten aufgeführt.

Parallele Wiederherstellung

Wenn Sie gleichzeitig mehrere Aufträge ausführen, können Sie die Zeit für das Wiederherstellen einer großen Datenbank auf einem Zielserver mit mehreren virtuellen Kernen (vCore) verkürzen. Die Anzahl der Aufträge darf maximal der Anzahl der dem Zielserver zugewiesenen vCPUs entsprechen.

Serverparameter

Wenn Sie Daten auf einem neuen Server oder einem Server außerhalb der Produktionsumgebung wiederherstellen, können Sie die folgenden Serverparameter vor dem Ausführen von pg_restore optimieren:

work_mem = 32 MB
max_wal_size = 65.536 (64 GB)
checkpoint_timeout = 3.600 (60 min)
maintenance_work_mem = 2.097.151 (2 GB)
autovacuum = off
wal_compression = on

Nachdem die Wiederherstellung abgeschlossen ist, müssen Sie alle diese Parameter wieder Ihren Workloadanforderungen anpassen.

Hinweis

Befolgen Sie die obigen Empfehlungen oben nur, wenn genügend Arbeitsspeicher und Datenträgerspeicherplatz vorhanden sind. Wenn Sie über einen kleinen Server mit 2, 4 oder 8 vCores verfügen, legen Sie die Parameter entsprechend fest.

Weitere Überlegungen

  • Deaktivieren Sie vor dem Ausführen von pg_restore Hochverfügbarkeit (HA).
  • Analysieren Sie nach Abschluss der Wiederherstellung alle migrierten Tabellen.

Syntax für pg_restore

Verwenden Sie die folgende Syntax für pg_restore:

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

  • -Fd: Das Verzeichnisformat.
  • -j: Die Anzahl der Aufträge.
  • -C: Starten der Ausgabe mit einem Befehl zum Erstellen der Datenbank selbst und dann zum erneuten Herstellen einer Verbindung mit ihr.

Beispiel für die Syntax:

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

Überlegungen zu VMs

Erstellen Sie eine VM in derselben Region und Verfügbarkeitszone, vorzugsweise dort, wo sich sowohl Ihr Ziel- als auch Ihr Quellserver befindet. Erstellen Sie alternativ mindestens den virtuellen Computer näher am Quellserver oder einem Zielserver. Sie sollten Azure Virtual Machines mit einem lokalen SSD-Hochleistungsdatenträger verwenden.

Weitere Informationen zu den SKUs finden Sie unter:

Nächste Schritte