更新时间:2024-09-02 GMT+08:00

残留文件管理函数应用

使用步骤

  1. 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。
  2. 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。
  3. 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。

pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。

使用示例

以当前两个用户自建的数据库db1、db2为例:

  1. 在CN上获取集群的所有残留文件记录:
    1
    db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的
    

    当前集群中:

    • dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。
    • 残留文件在residualfile列展示。
    • filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。
  2. 调用pgxc_verify_residualfiles()函数对db1库进行验证:
    1
    db1=# SELECT * FROM pgxc_verify_residualfiles();
    

    因为verify类函数都是database级别,所以当前在db1库中调用verify函数时,只对属于db1的残留文件进行验证。

    可以再次调用get函数查看是否验证完成:

    1
    db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6;
    

    如上图所示,已确认db1数据库中的残留文件都已经验证,db2数据库中的残留文件都未进行验证。

  3. 调用 pgxc_rm_residualfiles()函数删除残留文件。
    1
    db1=# SELECT * FROM pgxc_rm_residualfiles();
    

  4. 再次调用pgxc_get_residualfiles()函数检查删除后的结果。

    结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。

    同时可以看到查询出9条结果,与之前查询出的结果想比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中:

  5. 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。
    1. 进入db2数据库,并调用验证函数:

      此时可以查询验证的结果:

    2. 调用删除函数:

    3. 再查询删除的结果:

      此时因为 8342 结尾的记录文件中残留文件已经全部删除,所以整个记录文件也被删除并备份到backup目录下,所以查询到0条记录。