WAL包含对无效页面的引用

时间:2016-08-01 03:54:47

标签: postgresql postgresql-9.5

centos 6.7 postgresql 9.5.3

我正在进行主 - 备复制的数据库服务器。

突然,使用此日志停止了备用服务器的postgresql进程。

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

而且,主服务器的postgresql日志并不特别。

但是,主服务器&var / log / messages列在下面。

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:

内存错误是在1周前开始的。所以,我怀疑内存错误会导致postgresql的错误。

我的问题在这里。

1)内核的内存错误导致postgresql" WAL包含对无效页面的引用"错误?

2)为什么主服务器的postgresql上没有任何日志?

THX。

1 个答案:

答案 0 :(得分:1)

内存故障会导致各种数据损坏,所以这对我来说似乎是一个很好的解释。

也许主PostgreSQL服务器上没有日志条目,因为所有损坏的都是WAL流。

你可以运行

oid2name

找出哪个数据库有OID 16400然后

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

找出哪个表属于文件559613。

该表大于12 GB吗?如果不是,那将意味着页面1671400确实是无效值。

您没有告诉您正在使用哪个PostgreSQL版本,但是可能在以后的版本中修复了复制错误,即使没有出现硬件错误也可能导致复制问题;阅读发行说明。

我会执行一个新的pg_basebackup并重新初始化从属系统。

但我真正担心的是,主服务器上可能存在数据损坏。块校验和很酷(如果pg_controldata <data directory> | grep checksum给你1,则打开),但可能无法检测到内存损坏的影响。

尝试类似

的内容
pg_dumpall -f /dev/null
在主人身上

并查看是否有错误。

保留旧备份,以防需要修理!