2016-08-01 22 views
0

CentOS 6.7 postgresql 9.5.3WAL enthält Verweise auf ungültige Seiten

Ich habe DB-Server, die auf Master-Reserve-Replikation sind.

Plötzlich wurde der Postgresql-Prozess des Standby-Servers mit diesen Protokollen gestoppt.

2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]WARNING: page 1671400 of relation base/16400/559613 is uninitialized 
2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]CONTEXT: xlog redo Heap2/VISIBLE: cutoff xid 1902107520 
2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]PANIC: WAL contains references to invalid pages 
2016-07-14 18:14:19.544 JST [][5783e03b.3cdb][0][15579]CONTEXT: xlog redo Heap2/VISIBLE: cutoff xid 1902107520 
2016-07-14 18:14:21.026 JST [][5783e038.3cd9][0][15577]LOG: startup process (PID 15579) was terminated by signal 6: Aborted 
2016-07-14 18:14:21.026 JST [][5783e038.3cd9][0][15577]LOG: terminating any other active server processes 

Und die postgresql Protokolle des Master-Servers waren nichts besonderes.

Aber, Master-Server/var/log/Nachrichten wurde wie folgt aufgelistet.

Jul 14 05:38:44 host kernel: sbridge: HANDLING MCE MEMORY ERROR 
Jul 14 05:38:44 host kernel: CPU 8: Machine Check Exception: 0 Bank 9: 8c000040000800c0 
Jul 14 05:38:44 host kernel: TSC 0 ADDR 1f7dad7000 MISC 90004000400008c PROCESSOR 0:306e4 TIME 1468442324 SOCKET 1 APIC 20 
Jul 14 05:38:44 host kernel: EDAC MC1: CE row 1, channel 0, label "CPU_SrcID#1_Channel#0_DIMM#1": 1 Unknown error(s): memory scrubbing on FATAL area : cpu=8 Err=0008:00c0 (ch=0), addr = 0x1f7dad7000 => socket=1, Channel=0(mask=1), rank=4 
Jul 14 05:38:44 host kernel: 
Jul 14 18:30:40 host kernel: sbridge: HANDLING MCE MEMORY ERROR 
Jul 14 18:30:40 host kernel: CPU 8: Machine Check Exception: 0 Bank 9: 8c000040000800c0 
Jul 14 18:30:40 host kernel: TSC 0 ADDR 1f7dad7000 MISC 90004000400008c PROCESSOR 0:306e4 TIME 1468488640 SOCKET 1 APIC 20 
Jul 14 18:30:41 host kernel: EDAC MC1: CE row 1, channel 0, label "CPU_SrcID#1_Channel#0_DIMM#1": 1 Unknown error(s): memory scrubbing on FATAL area : cpu=8 Err=0008:00c0 (ch=0), addr = 0x1f7dad7000 => socket=1, Channel=0(mask=1), rank=4 
Jul 14 18:30:41 host kernel: 

Der Speicherfehler ist vor 1 Woche gestartet. Also bezweifle ich, dass der Speicherfehler den Fehler von postgresql verursacht.

Meine Frage ist hier.

1) Kann der Speicherfehler des Kernels die Fehlermeldung "WAL enthält Verweise auf ungültige Seiten" von postgresql verursachen?

2) Warum gibt es keine Protokolle im postgresql des Masterservers?

thx.

Antwort

1

Fehlerhafter Speicher kann zu allen Arten von Datenkorruption führen, daher erscheint mir diese Erklärung als gut genug.

Vielleicht gibt es keine Protokolleinträge auf dem Master-PostgreSQL-Server, weil alles, was beschädigt wurde, der WAL-Stream war.

können Sie führen

oid2name 

, um herauszufinden, welche Datenbank hat OID 16400 und dann

oid2name -d <database with OID 16400> -f 559613 

, um herauszufinden, welche Tabelle 559613.

Datei gehört, dass Tabelle größer als 12 GB? Wenn nicht, würde das bedeuten, dass Seite 1671400 tatsächlich ein ungültiger Wert ist.

Sie haben nicht angegeben, welche PostgreSQL-Version Sie verwenden, aber möglicherweise sind in späteren Versionen Replikationsfehler behoben, die zu Replikationsproblemen führen können, auch ohne dass ein Hardwarefehler vorliegt. Lesen Sie die Versionshinweise.

Ich würde eine neue pg_basebackup durchführen und das Slave-System reinitialisieren.

Aber was ich würde wirklich besorgt sein über mögliche Daten Korruption auf dem Master-Server. Block-Prüfsummen sind cool (aktiviert, wenn pg_controldata <data directory> | grep checksum Ihnen 1 gibt), aber möglicherweise werden die Auswirkungen der Speicherbeschädigung nicht erkannt.

Probieren Sie etwas wie

pg_dumpall -f /dev/null 

auf dem Master und sehen, ob es Fehler gibt.

Behalten Sie Ihre alten Backups für den Fall, dass Sie etwas reparieren müssen!

+0

Vielen Dank für Ihre Antwort. Meine postgresql ist ver 9.5.3 – Jinil

+0

Ich glaube nicht, es gab einen bekannten Daten Korruption Bug mit Replikation seit. –