pg_dump out of memory

Allgemeines zu PostgreSQL.
robomobil
Neuer Benutzer
Beiträge: 10
Registriert: Mi 1. Mär 2017, 08:01
Wohnort: Köln

pg_dump out of memory

Beitrag von robomobil » Mi 1. Mär 2017, 08:26

Hallo,

ich habe ein Problem bei einem Backup mit pg_dump.

Bei der Sicherung einer Datenbank im Custom Format bekomme ich einen "out of memory" Fehler.
Im Log steht nur "unerwartetes EOF auf Client-Verbindung mit einer offenen Transaktion". Ich finde in
den Messages keinen Hinweis darauf, das der oom Killer zugeschlagen hätte.

Sichere ich die Datenbank im nicht Custom Format läuft es problemlos durch. Da ich auf 30 Servern ca. 160 Datenbanken
Scriptgesteuert sichere möchte ich nicht Ausnahmen vom normalen Verfahren, das ja sonst auch überall klappt, programmieren wenn es einen anderen Weg gibt.

Ich nutze für diese Datenbank Postgres 9.3.5. Ein Update auf eine andere Version ist nicht ohne weiteres möglich,
da diverse Anwendungen dahinter hängen.

Die betroffene Datenbank ist 10GB gross, der Rechner läuft unter SLES, 64bit, die Maschine hat (wie alle anderen) 32 GB Speicher.

Gruß

robomobil

akretschmer
Erfahrener Benutzer
Beiträge: 7418
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: pg_dump out of memory

Beitrag von akretschmer » Mi 1. Mär 2017, 09:09

Erhöhe mal max_locks_per_transaction, evtl. kann das helfen. Du solltest auch die aktuelle 9.3 installieren, das sind NUR Bugfixes, da ändert sich nix in der API. Wenn Du das mit der aktuellen Minor-Release auch bekommst wären weitere Details interessant.

Bei 30 Servern etc.: was hast Du für Anforderungen an die Verfügbarkeit der Backups? Bei einem täglichen Dump gehen Dir u.U. 23 Stunden, 59 Minuten 59 Sekunden produktiver Arbeit flöten. Wie groß sind die Datenbanken? Logische Dumps via pg_dump(all) sind ab einem bestimmten Punkt keine sinnvollen Backups mehr. Und ja: sicherst Du auch die globalen Objekte?
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

robomobil
Neuer Benutzer
Beiträge: 10
Registriert: Mi 1. Mär 2017, 08:01
Wohnort: Köln

Re: pg_dump out of memory

Beitrag von robomobil » Mi 1. Mär 2017, 09:48

Das mit den max_locks_per_transaction (aktuell default eingestellt) probiere ich mal aus wenn ich den Postgres neu starten kann. Und die 9.3.16 zu installieren sollte auch möglich sein.

Zu Erläuterung des Dumps: Die normale Sicherung ist eine inkrementelle File System Sicherung mit WAL Archivierung, dazu noch Snapshots vom OS. Den pg_dump machen wir nur, da wir immer wieder Probleme mit defekten Pages haben und die frühzeitig erkennen müssen. Ich will da nicht auf eine Meldung im Logfile warten.

castorp
Erfahrener Benutzer
Beiträge: 1034
Registriert: Sa 27. Jun 2009, 22:24

Re: pg_dump out of memory

Beitrag von castorp » Mi 1. Mär 2017, 12:11

robomobil hat geschrieben:
Mi 1. Mär 2017, 09:48
Zu Erläuterung des Dumps: Die normale Sicherung ist eine inkrementelle File System Sicherung mit WAL Archivierung, dazu noch Snapshots vom OS. Den pg_dump machen wir nur, da wir immer wieder Probleme mit defekten Pages haben und die frühzeitig erkennen müssen. Ich will da nicht auf eine Meldung im Logfile warten.
Da wäre es vermutlich sinnvoller wenn ihr --data-checksums beim initdb verwendet hättet
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

robomobil
Neuer Benutzer
Beiträge: 10
Registriert: Mi 1. Mär 2017, 08:01
Wohnort: Köln

Re: pg_dump out of memory

Beitrag von robomobil » Mi 1. Mär 2017, 12:59

Haben wir, aber im Log kommt die Meldung nur, wenn auf den defekten Bereich einer Tabelle zugegriffen wird. Das kann u.U. Wochen nach dem Fehler sein und ich muss das einfach früher erfahren.

robomobil
Neuer Benutzer
Beiträge: 10
Registriert: Mi 1. Mär 2017, 08:01
Wohnort: Köln

Re: pg_dump out of memory

Beitrag von robomobil » Do 2. Mär 2017, 06:45

Moin,

ich habe jetzt die max_locks_per_transaction vom default 64 auf 256 gesetzt und nach Restart der DB einen Dump gemacht. Leider mit dem gleichen Ergebnis. Können höhere Werte 1024 oder mehr da etwas bringen?

Die Meldung "Speicher aufgebraucht" kommt übrigens nach "pg_dump: sichere Datenbankdefinition", wahrscheinlich (?) beim ersten Copy Out der Tabellen.

castorp
Erfahrener Benutzer
Beiträge: 1034
Registriert: Sa 27. Jun 2009, 22:24

Re: pg_dump out of memory

Beitrag von castorp » Do 2. Mär 2017, 07:50

Wie hoch ist denn work_mem eingestellt? Vielleicht hilft es ja das zu erhöhen?
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'

robomobil
Neuer Benutzer
Beiträge: 10
Registriert: Mi 1. Mär 2017, 08:01
Wohnort: Köln

Re: pg_dump out of memory

Beitrag von robomobil » Do 2. Mär 2017, 08:25

Work_men steht auf default (1MB). Aber greift das überhaupt beim Dump? Laut Handbuch: Specifies the amount of memory to be used by internal sort operations and hash tables before writing to temporary disk files.

Ich probiers einfach mal aus.

robomobil
Neuer Benutzer
Beiträge: 10
Registriert: Mi 1. Mär 2017, 08:01
Wohnort: Köln

Re: pg_dump out of memory

Beitrag von robomobil » Do 2. Mär 2017, 08:32

Nope, wenn ich den auf 32MB setzte gehts es auch nicht.

akretschmer
Erfahrener Benutzer
Beiträge: 7418
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Re: pg_dump out of memory

Beitrag von akretschmer » Do 2. Mär 2017, 08:57

Aktualisiere erst einmal auf die aktuelle version, prüfe auch, daß die Version von pg_dump aktuell ist. Hat die Tabelle, die das auslöst, Besonderheiten wie z.B. sehr große Felder? Ich kann mich dunkel an einen unserer Kunden mal erinnern, wo wohl durch Charset-Probleme (wandlung von charset A nach charset B) TEXT oder BYTEA-Felder so groß wurden, daß da ein Buffer überlief. Das wurde dann aber gefixt in einer späteren Minor-Version.
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten