GaussDB xlog堆积故障处理

举报
GaussDB 数据库 发表于 2025/12/09 09:28:59 2025/12/09
【摘要】 性能类故障
    • 故障现象

    单个或者多个DN xlog目录持续增大,长时间不回收,导致磁盘空间不足,当达到磁盘使用阈值时,DN会被自动设置为只读,业务不可用。

    • 故障原因

    可能原因有以下:

    1. xlog相关参数配置不合理。
    2. delay_xlog_recycle文件残留。
    3. 逻辑复制槽占用。
    4. 备份失败。
    5. 业务数据持续写入,xlog回收速率无法追赶上生成速率。
    6. 降副本后,被删除的副本还在复制槽列表中。
    • 处理方法

    步骤 1     登录DBS运维管理平台,

    步骤 2     在实例管理-实例列表界面根据实例ID搜索到对应的实例,点击更多-实例监控,查看xlog数量监控指标。

    212.png

    如上图,展示全部节点的xlog数量监控指标。

    步骤 3     登录故障的DN节点,进入到DN的数据目录,DN数据目录可通过查询集群状态获取,查看xlog个数。

    cm_ctl query -Cvd

    2131.png

    如上图,/opt/gaussdb/engine/data/dn_6001dn_6001的数据目录。

    ll /opt/gaussdb/engine/data/dn_6001/pg_xlog/ |wc -l

    2132.png

    说明:

    1. 公有云或者HCS场景进入数据目录需要进入沙箱或者数据目录前加/var/chroot

    2. /opt/gaussdb/engine/data/dn_6001/pg_xlog为示例DN数据目录,需根据实际情况修改。

    步骤 4     gsql连接DN,查看集群当前xlog相关的参数。

    gsql -d postgres -p 40000 -U user -W password -r -m
    
    show checkpoint_segments;
    
    show wal_keep_segments;
    
    show max_size_for_xlog_prune;
    
    show enable_xlog_prune;

    214.png

    参数说明:

    checkpoint_segments:设置checkpoint_timeout周期内所保留的最少WAL日志段文件数量。每个日志文件大小为16MB

    wal_keep_segments:保留事务日志文件的最小数目。

    当日志量达到一定量时,日志才会触发回收,该值的计算方式是:wal_keep_segments +checkpoint_segments * 2 + 1 ,假设checkpoint_segments设置128wal_keep_segments设置128,日志量就是 (128 + 128 * 2 + 1)=385个。若该值设置很大,可能会导致磁盘占用过多。如果查询xlog数量不足该阈值且配置阈值过大,考虑调低以上参数。

    max_size_for_xlog_prune:在enable_xlog_prune打开时生效,机制如下:

    若有备机断连,当主机历史日志数量大于该参数值,会强制回收。

    如果有任何一个备机正在build,那么该参数不会生效,主机日志会全量保留,防止build操作由于日志回收重复失败。

    enable_xlog_prune:设置在任一备机断联时,主机是否根据xlog日志的大小超过参数max_size_for_xlog_prune的值而回收日志。

    说明:

    1. 分布式gsql连接DN,需要首先获取当前DN的端口号,集中式DN默认端口号为8000

    2. DN的端口号可通过cm_ctl query -Cvdp命令查询获取。

    3. 如果连接备DN,需要gsql命令后需加“-m”参数。

    若参数设置不合理,需重新设置参数,若需重新设置参数,联系华为技术支持。

    若以上参数设置合理,继续执行以下步骤。

    步骤 5     查看DN数据目录下是否有delay_xlog_recycle文件。

    V500R001C10版本,当DN数据目录下有delay_xlog_recycle文件时,说明是备份失败导致,下一次备份成功,xlog回收会正常触发。

    若非以上原因,继续执行以下步骤;

    步骤 6     确认是否存在逻辑复制槽占用。

    gsql -d postgres -p 40000 -U user -W password -r -m
    
    select * from pg_get_replication_slots();
    
    grep 'attempting to remove WAL segments older than log file' postgresql-yyyy-mm-dd_******.log

    2161.png

    说明:

    分布式gsql连接DN,需要首先获取当前DN的端口号,集中式DN默认端口号为8000

    如上图,逻辑复制槽replication的restart_lsn为4/8AE62280。

    2162.png

    如上图,DN日志中的日志点一直为000000010000000400000088,未推进,这与逻辑复制槽的restart_lsn刚好一致,说明xlog不回收是由与逻辑复制槽阻塞,参考处理步骤1

    若有逻辑复制槽,确认对应的LSN是否为pg_log日志中attempting to remove WAL segments newer than log file对应的xlog编号,若对应,则说明为逻辑复制槽占用导致,需要清理逻辑复制槽解决,若不对应,继续向下执行。

    若非以上原因,继续执行。

    步骤 7     确认是否备份失败导致。

    确认gs_roach占用的槽位的LSN是否为pg_log日志中attempting to remove WAL segments newer than log file对应的xlog编号。

    select * from pg_get_replication_slots();
    
    grep 'attempting to remove WAL segments older than log file' postgresql-yyyy-mm-dd_******.log

    2171.png

    2172.png

    如上图中,gs_roach_full表示正在全备,gs_roach_inc表示正在增备。

    2173.png

    如上图中,000000010000000500000081中的第二个8位,00000005于逻辑复制槽(/8800E250)中的5对应,如果备份任务流已失败,则xlog堆积是由于备份失败导致。

    若是,则说明是备份失败导致,待下次备份正常触发则可以正常回收。

    若不涉及,继续向下执行。

    步骤 8     确认是否进行过降副本操作。

    如果进行过降副本操作,登录xlog堆积的DN节点查询,确认删除的副本是否还在复制槽列表中,如果还在,说明降副本后复制槽没有删除,需要清理残留的复制槽,参考处理步骤1

    gsql -d postgres -p 40000 -U user -W password -r -m
    
    select * from pg_get_replication_slots();

    218.png

    若非以上都不涉及,联系华为技术支持。

    说明:

    分布式gsql连接DN,需要首先获取当前DN的端口号,集中式DN默认端口号为8000

    步骤 9     当主DN存在导入数据等大批量业务时,备DN回放速度赶不上主DN xlog产生速度时,xlog短时间内也不会回收。

    cm_ctl query -rv

    219.png

     步骤 10     删除逻辑复制槽。

    select * from pg_drop_replication_slot('replication');

    须知:删除逻辑复制槽为高危操作,执行前需联系华为技术支持确认。

    步骤 11     上述场景不包含,联系华为技术支持。

    ----结束

    • 快速恢复

    1、当前xlog堆积,未达到磁盘使用阈值,业务无感知,满足快速恢复。

    2、当xlog堆积,造成DN只读,快速恢复参考DN故障-状态ReadOnly


    【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。