Best practices voor pg_dump en pg_restore voor Azure Database for PostgreSQL - Flexible Server

VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server

In dit artikel worden opties en aanbevolen procedures besproken voor het versnellen van pg_dump en pg_restore. Ook worden de beste serverconfiguraties voor het uitvoeren van pg_restore uitgelegd.

Aanbevolen procedures voor pg_dump

U kunt het hulpprogramma pg_dump gebruiken om een flexibele Azure Database for PostgreSQL-serverdatabase te extraheren in een scriptbestand of archiefbestand. Enkele van de opdrachtregelopties die u kunt gebruiken om de totale dumptijd te verminderen met behulp van pg_dump worden vermeld in de volgende secties.

Mapindeling (-Fd)

Met deze optie wordt een archief met mapindeling uitgevoerd dat u kunt invoeren voor pg_restore. Standaard wordt de uitvoer gecomprimeerd.

Parallelle taken (-j)

Met pg_dump kunt u dumptaken gelijktijdig uitvoeren met behulp van de optie parallelle taken. Deze optie vermindert de totale dumptijd, maar verhoogt de belasting op de databaseserver. We raden u aan om bij een parallelle taakwaarde te komen nadat u de metrische gegevens van de bronserver, zoals CPU, geheugen en IOPS-gebruik (invoer-/uitvoerbewerkingen per seconde), nauwkeurig hebt gecontroleerd.

Wanneer u een waarde instelt voor de optie parallelle taken, hebt pg_dump het volgende nodig:

  • Het aantal verbindingen moet gelijk zijn aan het aantal parallelle taken +1, dus zorg ervoor dat u de max_connections waarde dienovereenkomstig instelt.
  • Het aantal parallelle taken moet kleiner zijn dan of gelijk zijn aan het aantal vCPU's dat is toegewezen voor de databaseserver.

Compressie (-Z0)

Met deze optie geeft u het compressieniveau op dat moet worden gebruikt. Nul betekent geen compressie. Nulcompressie tijdens het pg_dump proces kan helpen bij prestatieverbeteringen.

Tabelbloats en vacuüm

Voordat u het pg_dump-proces start, moet u overwegen of tabelvacuüming nodig is. Bloat op tabellen neemt aanzienlijk toe pg_dump tijden. Voer de volgende query uit om tabelbloats te identificeren:

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;

De dead_pct kolom in deze query is het percentage dode tuples in vergelijking met live tuples. Een hoge dead_pct waarde voor een tabel kan erop wijzen dat de tabel niet goed wordt leeggezogen. Zie Autovacuum-afstemming in Azure Database for PostgreSQL - Flexible Server voor meer informatie.

Voor elke tabel die u identificeert, kunt u een handmatige vacuümanalyse uitvoeren door het volgende uit te voeren:

vacuum(analyze, verbose) <table_name> 

Een PITR-server gebruiken

U kunt een pg_dump uitvoeren op een online- of liveserver. Het maakt consistente back-ups, zelfs als de database wordt gebruikt. Het blokkeert niet dat andere gebruikers de database gebruiken. Houd rekening met de grootte van de database en andere zakelijke of klantbehoeften voordat u het pg_dump proces start. Kleine databases kunnen goede kandidaten zijn voor het uitvoeren van een pg_dump op de productieserver.

Voor grote databases kunt u een herstelserver (point-in-time) maken vanaf de productieserver en het pg_dump proces uitvoeren op de PITR-server. Het uitvoeren van pg_dump op een PITR zou een cold run-proces zijn. De afweging voor deze aanpak is dat u zich geen zorgen hoeft te maken over extra CPU-, geheugen- en IO-gebruik dat wordt geleverd met een pg_dump proces dat wordt uitgevoerd op een werkelijke productieserver. U kunt pg_dump uitvoeren op een PITR-server en vervolgens de PITR-server verwijderen nadat het pg_dump proces is voltooid.

Syntaxis voor pg_dump

Gebruik de volgende syntaxis voor pg_dump:

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

Aanbevolen procedures voor pg_restore

U kunt het hulpprogramma pg_restore gebruiken om een flexibele Azure Database for PostgreSQL-serverdatabase te herstellen vanuit een archief dat is gemaakt door pg_dump. Een aantal opdrachtregelopties voor het verminderen van de totale hersteltijd worden weergegeven in de volgende secties.

Parallel herstellen

Door meerdere gelijktijdige taken te gebruiken, kunt u de tijd beperken die nodig is om een grote database op een multi-vCore-doelserver te herstellen. Het aantal taken kan gelijk zijn aan of kleiner zijn dan het aantal vCPU's dat is toegewezen voor de doelserver.

Serverparameters

Als u gegevens herstelt naar een nieuwe server of niet-productieserver, kunt u de volgende serverparameters optimaliseren voordat u pg_restore uitvoert:

work_mem = 32 MB
max_wal_size = 65536 (64 GB)
checkpoint_timeout = 3600 #60min
maintenance_work_mem = 2097151 (2 GB)
autovacuum = uit
wal_compression = op

Nadat het herstellen is voltooid, moet u ervoor zorgen dat al deze parameters op de juiste wijze worden bijgewerkt volgens de vereisten van de workload.

Notitie

Volg de voorgaande aanbevelingen alleen als er voldoende geheugen en schijfruimte beschikbaar zijn. Als u een kleine server met 2, 4 of 8 vCores hebt, stelt u de parameters dienovereenkomstig in.

Andere overwegingen

  • Schakel hoge beschikbaarheid (HA) uit voordat u pg_restore uitvoert.
  • Analyseer alle tabellen die worden gemigreerd nadat het herstellen is voltooid.

Syntaxis voor pg_restore

Gebruik de volgende syntaxis voor pg_restore:

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

  • -Fd: De mapindeling.
  • -j: Het aantal taken.
  • -C: Begin de uitvoer met een opdracht om de database zelf te maken en maak vervolgens opnieuw verbinding met de database.

Hier volgt een voorbeeld van hoe deze syntaxis kan worden weergegeven:

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

Overwegingen voor virtuele machines

Maak een virtuele machine in dezelfde regio en beschikbaarheidszone, bij voorkeur waar u zowel uw doelservers als bronservers hebt. Of maak minimaal de virtuele machine dichter bij de bronserver of een doelserver. U wordt aangeraden Azure Virtual Machines te gebruiken met een lokale SSD met hoge prestaties.

Zie voor meer informatie over de SKU's:

Volgende stappen