wie man den Fortschritt eines großen postrgresql-Dumps verfolgt

13

Gibt es eine Möglichkeit, den Fortschritt eines pg_dumpVorgangs auf einer großen Datenbank (dh> 1 GB) zu sehen? Durch das Hinzufügen der -vOption wird nur Text auf dem Bildschirm ausgegeben, es werden jedoch keine aussagekräftigen Tracking-Informationen angezeigt.

Abbood
quelle

Antworten:

7

Sie können einen groben Fortschritt anhand der Inhaltsverzeichnisliste sehen.

Rufen Sie zunächst das Inhaltsverzeichnis der wiederherzustellenden Objekte ab:

pg_restore -l -f list.toc db.dump

Anschließend können Sie die Inhaltsverzeichnisliste zeilenweise anzeigen und die Ausgabe von Verbose oder Abfrage pg_stat_activity vergleichen, um festzustellen, wo sich pg_restore in der Inhaltsverzeichnisliste befindet.

Es ist jedoch nur eine grobe Schätzung. Erstens, weil das Laden jedes Elements aus der Inhaltsverzeichnisliste sehr viel Zeit in Anspruch nimmt (z. B. sind Schemas schnell, das Laden von Daten großer Tabellen und das Erstellen von Indizes jedoch nicht). Wenn Sie -j verwenden, wird ein Element wiederhergestellt bevor ein vorheriger fertig ist. Außerdem bin ich mir nicht zu 100% sicher, ob pg_restore genau der TOC-Liste folgt, wenn Sie -L nicht verwenden, aber ich denke, dass dies der Fall ist.

MatheusOl
quelle
Ich bin durch diese Antwort verwirrt - die ursprüngliche Frage gibt an, eine Datenbank zu
sichern
2

Gültig für Unix / Linux-Umgebungen:

Mit dem Dienstprogramm Pipe Viewer (pv) können Sie den Sicherungsfortschritt verfolgen. Der pv animiert Ihre Shell mit Details zur verstrichenen Zeit und den übertragenen Bytes.

Unten sehen Sie ein Beispiel für das Speichern mit den Dienstprogrammen pv und split, um die großen Speicherauszugsdateien in kleinen Blöcken zu speichern. Es kann nützlich sein, es später an einen anderen Ort zu übertragen.

# dump the PREDATA in clear text into a .PREDATA.SQL text file
pg_dump -s -o --section=pre-data  -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".PREDATA.sql"

# dump the POSTDATA in clear text into a .PREDATA.SQL text file
pg_dump -s -o --section=post-data -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".POSTDATA.sql"

# dump the DATA into the .DATA.dump compressed (binary) file
pg_dump -Fc   --section=data      -n $schemaname $DatabaseConnString | pv | split -d -b $chunksize - $backuppath/$backupfilename".DATA.dump"

Der Nachteil - dieser Ansatz funktioniert nicht, wenn die Option pg_dump -Fd (Speicherauszug in Ordner) verwendet wird.

R0B0T-B0BA
quelle