PostgreSQL pg_resetwal处理机制

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB PostgreSQL 版,企业版 4核16GB
推荐场景:
HTAP混合负载
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PostgreSQL pg_resetwal处理机制

pg_resetwal的参数

ControlFile结构及pg_resetwal参数影响的字段

    static struct option long_options[] = {
        {"commit-timestamp-ids", required_argument, NULL, 'c'},
        {"pgdata", required_argument, NULL, 'D'},
        {"epoch", required_argument, NULL, 'e'},
        {"force", no_argument, NULL, 'f'},
        {"next-wal-file", required_argument, NULL, 'l'},
        {"multixact-ids", required_argument, NULL, 'm'},
        {"dry-run", no_argument, NULL, 'n'},
        {"next-oid", required_argument, NULL, 'o'},
        {"multixact-offset", required_argument, NULL, 'O'},
        {"next-transaction-id", required_argument, NULL, 'x'},
        {"wal-segsize", required_argument, NULL, 1},
        {NULL, 0, NULL, 0}
      };

    介绍


    PG11允许用户在线修改WAL段文件大小。以往版本需要重新编译,并且不同--wal-segsize设置的PG相互不兼容。这个值范围1—1024,为2的平方且单位M。当改变大小时建议和-l参数一起使用,设置下一个WAL文件名,防止重复使用之前的名字。下一个段文件名要比当前已存在的都要大,

    该工具会将WAL目录下日志全部删除,并生成一个新WAL段文件。该文件名起名规则:

    1、-l指定的段文件名解析出段号minXlogSegNo

    2、FindEndOfXLOG扫描WAL目录下所有文件得到最大的文件号:

    1)newXlogSegNo为pg_control文件中记录的ckp所属段号

    2)若目录下由比这个号大的,则更新newXlogSegNo为该段号

    3)该段号转换成WAL长度后,除以新段文件大小得到新段文件段号newXlogSegNo,将之+1作为新段文件的段号

    3、原pg_control文件中的ckp作为CHECKPOINT记录写入新段文件里面。该段文件仅写这一个WAL,后面的大小全部清0。

    4、新pg_control文件的checkpoint位置为该文件中CHECKPOINT记录位置。

    5、这个工具比较危险,慎用。

    6、在主备环境中,备机启动不起来,且日志损坏时,主机数据量非常大,全量重新拷贝又耗费时间特别长,此时可以尝试使用这个工具:

    1)比较备机和主机的pg_control文件的checkpoint位置,若备机和主机记录的checkpoint位置相等,则可以执行pg_resetwal,这样重新启动后可以正常构建流复制,数据也不会丢

    2)若备机的checkpoint小,使用这个pg_control文件进行pg_resetwal可能重启后构建不起来流复制。使用主机的pg_control文件进行pg_resetwal,重启后可构建流复制,但丢数据

    3)若备机的checkpoint大,使用这个pg_control文件进行pg_resetwal,可能重启后构建不起来流复制,即使构建起来也丢数据。使用主机的pg_control文件进行pg_resetwal,应该也可以正常。

    4)备机的时间线文件需要清理

    流程


    pg_control文件的更新,然后调用KillExistingXLOG删除pg_wal目录下的所有WAL文件:

             while(errno = 0, (xlde = readdir(xldir)) != NULL){
                    if(IsXLogFileName(xlde->d_name) || IsPartialXLogFileName(xlde->d_name)){
                           snprintf(path,sizeof(path), "%s/%s", XLOGDIR, xlde->d_name);
                           if(unlink(path) < 0){
                                  pg_log_error("couldnot delete file \"%s\": %m", path);
                                  exit(1);
                           }
                    }
             }

      调用函数KillExistingArchiveStatus删除archive_status目录下.ready,.done和.partial.ready、.partial.done文件:

               while(errno = 0, (xlde = readdir(xldir)) != NULL){
                      if(strspn(xlde->d_name, "0123456789ABCDEF") == XLOG_FNAME_LEN&&
                             (strcmp(xlde->d_name+ XLOG_FNAME_LEN, ".ready") == 0 ||
                              strcmp(xlde->d_name + XLOG_FNAME_LEN,".done") == 0 ||
                             strcmp(xlde->d_name + XLOG_FNAME_LEN,".partial.ready") == 0 ||
                              strcmp(xlde->d_name + XLOG_FNAME_LEN,".partial.done") == 0))
                      {
                             snprintf(path,sizeof(path), "%s/%s", ARCHSTATDIR, xlde->d_name);
                             if(unlink(path) < 0){
                                    pg_log_error("couldnot delete file \"%s\": %m", path);
                                    exit(1);
                             }
                      }
               }

        最后调用函数WriteEmptyXLOG创建一个新WAL段文件,并仅写入一个checkpoint记录,其中checkpoint记录来自ControlFile结构



        相关实践学习
        使用PolarDB和ECS搭建门户网站
        本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
        阿里云数据库产品家族及特性
        阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
        目录
        相关文章
        |
        2月前
        |
        监控 关系型数据库 分布式数据库
        【PolarDB开源】PolarDB故障恢复机制:快速恢复与数据一致性保障
        【5月更文挑战第22天】阿里云PolarDB的故障恢复机制保证了云数据库的高可用性和一致性。通过ROW快照备份和增量日志,实现秒级备份和恢复,确保数据安全。日志分析快速定位故障,启用备用实例实现快速恢复。分布式事务和强一致性读等技术保障数据一致性。这套全面的解决方案使PolarDB在云原生数据库中表现出色。
        494 10
        |
        2月前
        |
        关系型数据库 分布式数据库 数据库
        【PolarDB开源】PolarDB-X源码解读:分布式事务处理机制揭秘
        【5月更文挑战第20天】PolarDB-X,PolarDB家族的一员,专注于大规模分布式事务处理,采用2PC协议保证ACID特性。源码解析揭示其通过预提交、一致性快照隔离和乐观锁优化事务性能,以及利用事务日志进行故障恢复。深入理解其事务处理机制对开发者掌握分布式数据库核心技术至关重要。随着开源社区的发展,更多优化方案将涌现,助力构建更强大的分布式数据库系统。
        108 6
        |
        4天前
        |
        监控 关系型数据库 分布式数据库
        PolarDB故障恢复机制:快速恢复与数据一致性保障
        【6月更文挑战第29天】**PolarDB云原生数据库的故障恢复机制确保高可用性与数据一致性。利用ROW快照备份实现秒级备份,结合Redo Log进行时间点恢复。通过日志分析定位故障,快速启动备用实例恢复服务。分布式事务及强一致性读保证数据完整性。PolarDB的高效恢复策略是其在云数据库市场中的关键优势。**
        32 16
        |
        12月前
        |
        关系型数据库 PostgreSQL
        PostgreSQL VFD机制
        PostgreSQL VFD机制
        93 0
        PostgreSQL VFD机制
        |
        关系型数据库 数据库 PostgreSQL
        PostgreSQL 11 新特性解读 : Initdb/Pg_resetwal支持修改WAL文件大小
        PostgreSQL 11 版本的一个重要调整是支持 initdb 和 pg_resetwal 修改 WAL 文件大小,而 11 版本之前只能在编译安装 PostgreSQL 时设置 WAL 文件大小。
        8786 0
        |
        9月前
        |
        存储 关系型数据库 Go
        深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
        深入理解 PostgreSQL 中的 MVCC(多版本并发控制)机制
        138 0
        |
        9月前
        |
        关系型数据库 数据库 PostgreSQL
        PostgreSQL 的事务管理和并发控制机制解析
        PostgreSQL 的事务管理和并发控制机制解析
        186 0
        |
        存储 算法 安全
        SHA-1被攻破了吗? PostgreSQL SCRAM-SHA-256 安全认证机制解救你来了
        标签 PostgreSQL , 认证方法 , SCRAM-SHA-256 , scram , scram-sha-256-plus , SASL , Simple Authentication and Security Layer 背景 PostgreSQL的很多设计非常的工业化,比如开放了许多扩展接口(类型、操作符、索引、扫描、采样、数据库编程语言等)。
        6765 0
        |
        存储 SQL Oracle
        再谈PostgreSQL的膨胀和vacuum机制及最佳实践
        作者介绍 朱贤文,成都文武信息技术有限公司创始人,PostgreSQL中国用户会核心组成员,熟悉数据库,存储和集群技术; 成都文武信息技术有限公司是PostgreSQL和GreenPlum数据库服务的专业厂商,主要产品是ECOX集群管理系统和Hunghu Cloud,专门运行数据库的私有云系统,带高端存储功能。公司总部位于天府软件园。公司网站:w3.ww-it.cn 写本文的原因 这两天有两篇专门介绍PostgreSQL的vacuum机制的技术文章,得到了比较热烈和正面的反馈,让用户可以比较清楚地理解和使用这个特性。 我个人觉得有点小遗憾:这两篇文章没有跳出技术的角度,分析为什么会有这
        345 0
        |
        关系型数据库 数据库 PostgreSQL