openGauss数据库pg_xlog爆满问题解决
文章目录
- 问题现象
- 问题定位
- 解决办法
- 总结
问题现象
最近有一个之前搭的环境登不上了,好久没用想拿来测试的时候发现启动不了。启动时报错:[Errno 28] No space left on device
query也不行了,提示没有空间了。
查询磁盘使用情况 df -h ,果然100%
这个环境当时安装的是主备,看了下备库的服务器,发现不知道啥时候已经被删库了,安装用户都不在了。
问题定位
进一步排查主库服务器,发现opt目录下的空间最可疑。
[root@opengauss1 /]# du -lh --max-depth=1
根据经验直奔data/dn目录,果然就是这里 ,pg_xlog下面产生了过多日志文件。
看了下文件个数,有1500多个。
[root@opengauss1 pg_xlog]# ls -l |wc -l 1591
但是pg_xlog是WAL日志,是不能直接删除的。我们在另外空闲的空间下/tmp新建目录,再挪一部分xlog过去
[omm@opengauss1 ~]$ cd /tmp/ [omm@opengauss1 tmp]$ ll total 0 -rw-r--r-- 1 root root 0 Mar 22 11:40 ck_monitor.lock drwxr-x--- 2 root root 40 Sep 29 10:00 his-matrixagent_job -rw-r--r-- 1 root root 0 Mar 22 11:40 monitor.lock dr-xr-x--- 2 root root 40 May 27 2022 pub drwx------ 3 root root 60 May 6 2022 systemd-private-ff4a118aad534bfe95b6b390fe984558-chronyd.service-Cy8Q8X drwx------ 3 root root 60 May 6 2022 systemd-private-ff4a118aad534bfe95b6b390fe984558-systemd-logind.service-KrDeKX [omm@opengauss1 tmp]$ mkdir xlog_mv_322
回到 pg_xlog目录 执行迁移
[omm@opengauss1 pg_xlog]$ ls -ltr | head -n 100 | awk '{print "mv "$9 " /tmp/xlog_mv_322/"}' | sh
再尝试重新启动数据库。因为我的备库已经完全废弃了,只能指定以主库模型重启 加 -M primary参数。
[omm@opengauss1 pg_xlog]$ gs_ctl start -D /opt/huawei/install/data/dn/ -M primary
主库启动成功。登进去查看逻辑复制槽。
[omm@opengauss1 pg_xlog]$ gsql -d postgres -p 15400 -r gsql ((openGauss 3.0.0 build 02c14696) compiled at 2022-04-01 18:12:19 commit 0 last mr ) NOTICE : The password has been expired, please change the password. Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. openGauss=# select * from pg_replication_slots; slot_name | plugin | slot_type | datoid | database | active | xmin | catalog_xmin | restart_lsn | dummy_standby -----------+--------+-----------+--------+----------+--------+------+--------------+-------------+--------------- dn_6002 | | physical | 0 | | f | | | 1/4C6B8F70 | f (1 row)
删除失效逻辑复制槽
openGauss=# select * from pg_drop_replication_slot('dn_6002'); WARNING: replicationSlotMinLSN is InvalidXLogRecPtr!!! WARNING: replicationSlotMaxLSN is InvalidXLogRecPtr!!! pg_drop_replication_slot -------------------------- (1 row) openGauss=# select * from pg_replication_slots; slot_name | plugin | slot_type | datoid | database | active | xmin | catalog_xmin | restart_lsn | dummy_standby -----------+--------+-----------+--------+----------+--------+------+--------------+-------------+--------------- (0 rows)
查看相关参数
openGauss=# show wal_keep_segments; wal_keep_segments ------------------- 16 (1 row) openGauss=# show max_size_for_xlog_prune; max_size_for_xlog_prune ------------------------- 2147483647kB (1 row) openGauss=# show enable_xlog_prune; enable_xlog_prune ------------------- on (1 row) openGauss=# show archive_mode; archive_mode -------------- off (1 row) openGauss=# \q
综合看下来, max_size_for_xlog_prune参数的问题,它表示如果有备机断连且xlog日志大小大于此阈值,则回收日志。但是,默认值 给 的 太大了2048G,但是我这个环境只有40G,磁盘撑爆了。
解决办法
知道了问题,那么解决方法就是修改max_size_for_xlog_prune为4G,多余的日志 让DB自动清理。
[omm@opengauss1 pg_xlog]$ gs_guc reload -D /opt/huawei/install/data/dn/ -c "max_size_for_xlog_prune=4194304"
再去查看空间已经释放。
问题解决,主库又能继续坚持工作了。
总结
当归档或流复制发生异常时,事务日志会不断生成,如果默认值没修改,可能会造成磁盘撑爆,直接导致DB挂掉还起不来。遇到pg_xlog爆满时,先备份一部分pg_xlog日志到其他地方,删掉较早时间的日志,等有一定磁盘空间后再尝试启动数据库,然后设置合适的参数值,最后修复问题。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一起单测引起的项目加载失败惨案
作者:京东科技 宋慧超 一、前言 最近在开发一个功能模块时,在功能自测阶段,通过使用单测测试功能的完整性,在测试单测联通性使用到静态方法测试时,发现单测报错,通过查阅解决方案发现需要对Javaassist包进行排包或者升版本处理。通过排包解决掉单测报错,在部署项目时发现频繁报bean注入失败问题,最终定位发现是因为对Javaassist包排包引起的bean加载失败。故而对Javaassist包相关知识进行学习整理文章如下。 单测相关报错信息如下: Powermock - java.lang.IllegalStateException: Failed to transform class 解决单测报错的文章链接: https://stackoverflow.com/questions/32854688/powermock-java-lang-illegalstateexception-failed-to-transform-class 二、问题复现 1、前期准备 首先使用了Spring框架新建一个demo,并写一个简单测试类对问题进行复现。 **UserService**的定义: pu...
- 下一篇
橙单低代码 v2.8.2 发布,支持钉钉流程编辑器接入第三方
新版功能 工作流,支持钉钉风格流程编辑器,目前已同时支持两种高颜值流程编辑器。 多租户,支持动态多数据源。 多租户,数据实时同步服务优化后合并。 基础架构,在线表单、工作流和报表打印等编辑器的 UI 做了进一步的优化和统一。 图和真相
相关文章
文章评论
共有0条评论来说两句吧...