磐维数据库(PanWeiDB)是由中国移动基于中国本土开源数据库openGauss打造的自研数据库产品,主要面向ICT基础设施。它具有高性能、高可靠性、高安全性和高兼容性的特点,能够支持集中式、分布式、云原生、一体机等多种应用场景。目前,磐维数据库已在中国移动的多个省(区、市)公司及专业公司部署应用。
案例背景
本文将分享江西移动公司处理客户通测试库环境数据库启动异常的问题过程。问题为:将xlog清理完后,通过强制生成一个新的xlog文件启动数据库后又异常关闭,本次分享将展示从发现问题到解决问题的全过程。
环境描述
- OS版本:BCLinux for Euler 21.10 (LTS-SP2)
- DB版本:panweidb 3.0.0
- 兼容模式:A模式
- 数据库架构:单机模式
问题描述
接到业务反馈,客户通系统的应用程序无法连接磐维测试库环境。排查发现是磁盘空间不足导致宕机,在清理空间后重启数据库发现重启完后马上就会宕机。
问题分析
1、接到业务反馈的问题后,首先登录数据库环境,查看数据库日志,发现最新日志的日期是2天前的。随后通过改日志发现了宕机的原因:Not space left on

主机磁盘满了,于是对目录进行了分析并清理。
2、分析发现只有xlog目录可以清理。于是使用了以下命令清理
find /database/panweidb/data/pg_xlog -mmin +360 -type f -name “0000*” | xargs rm -f
根据以往的经验,该目录会被清空,且启动时报错。然后根据没有xlog文件启动报错处理方法进行处理。

3、启动成功后发现数据库很快就宕机了,随后重启分析日志,发现如下信息:

还有LSN的信息:[BACKEND] PANIC: The Page’s LSN[539790542680] bigger than want set LSN [539219726136],PANIC 级别的错误表明发生了严重的内部错误,导致数据库实例崩溃。
2024-11-04 10:35:53.626 67283309.3054 kft 22748641294080 Vastbase JDBC Driver 3210049 dn_6001 42809 1688849860263974 [BACKEND] PANIC: The Page's LSN[539790542680] bigger than want set LSN [539219726136]
2024-11-04 10:35:53.626 67283309.3054 kft 22748641294080 Vastbase JDBC Driver 3210049 dn_6001 42809 1688849860263974 [BACKEND] STATEMENT: UPDATE QRTZ_SCHEDULER_STATE SET LAST_CHECKIN_TIME = $1 WHERE SCHED_NAME = 'nwgt_cheduler' AND INSTANCE_NAME = $2
2024-11-04 10:35:53.626 67283309.3054 kft 22748641294080 Vastbase JDBC Driver 3210049 dn_6001 42809 1688849860263974 [BACKEND] BACKTRACELOG: tid[2905329]'s backtrace:
/database/panweidb/app/bin/panweidb(_Z9errfinishiz+0x783) [0x11f5f73]
/database/panweidb/app/bin/panweidb(_Z11elog_finishiPKcz+0x1e2) [0x11f6ac2]
/database/panweidb/app/bin/panweidb(_Z11heap_updateP12RelationDataS0_P15ItemPointerDataP13HeapTupleDatajP12SnapshotDatabP14TM_FailureDataP13LockTupleModeb+0x2da3) [0x1b87533]
分析结论
日志中提到的错误是“页面的 LSN 大于要设置的 LSN”。这意味着在处理某个数据页时,该页的 LSN 值大于预期的 LSN 值,这通常是由于数据页的不一致或损坏引起的。在这个报错是的JDBC连接引起的,可以得出由于新的xlog和程序的LSN值相差太大,导致数据库重启之后又宕机。
解决方法
本次遇到的问题有两种解决办法,分别如下:
- 启动的时候让业务把应用程序停止,随后手动刷新几个xlog文件,在通知业务重启应用程序。(推荐该方法)
- 通过错误信息提到的lsn号和pg_controldata得到的信息,判断出数据库异常之前使用的xlog文件名和相关lsn号,通过logid和logseg推断出异常之前的xlog文件名,并通过命令生成xlog文件,可以续上程序在数据库宕机之前的lsn位置。(不推荐)
pg_resetxlog -l 00000001000007d000000ae -D /database/panweidb/data -f

总结
在清理磁盘空间时,要注意清理的文件和清理的命令,本次遇到的问题主要是通过,pg_resetxlog生成一个xlog文件解决,但由于应用程序在数据库重启后不断重连,且新xlog文件的LSN值和程序的不一致,就导致了一直重启一直宕机的现象。




