云服务器内容精选

  • pgxc_rm_residualfiles() 描述:pgxc_rm_residualfiles的CN统一查询函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表3 pgxc_rm_residualfiles()返回字段 名称 类型 描述 nodename text 节点名。 result bool 是否已经完成删除。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_rm_residualfiles(); nodename | result | filepath | notes --------------+--------+---------------------------+------- cn_5001 | t | pgrf_20200910170129360401 | dn_6001_6002 | t | pgrf_20200908160211441546 | (2 rows)
  • pg_rm_residualfiles(filepath) 描述:用于删除当前实例中指定残留文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:text 返回值类型:record 函数返回字段如下: 表1 pg_rm_residualfiles(filepath)返回字段 名称 类型 描述 result bool 是否已经完成删除。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_residualfiles('pgrf_20200908160211441599'); result -------- t (1 row) 残留文件只有在调用pg_verify_residualfiles()进行verify后才能被真正删除。 删除动作不区分数据库,指定文件中所有已经verify的文件都会被删除。 如果指定文件中记录的所有文件都已经被删除,指定文件会被移除并备份到$PGDATA/pg_residualfile/backup目录下。
  • pg_rm_residualfiles() 描述:用于删除当前实例中所有的残留文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表2 pg_rm_residualfiles()返回字段 名称 类型 描述 result bool 是否已经完成删除。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_residualfiles(); result | filepath | notes --------+---------------------------+------- t | pgrf_20200908160211441546 | (1 row) 残留文件只有在调用pg_verify_residualfiles()进行验证后才能被真正删除。 删除动作不区分数据库,指定文件中所有已经验证的文件都会被删除。 如果指定文件中记录的所有文件都已经被删除,指定文件会被移除并备份到$PGDATA/pg_residualfile/backup目录下。
  • 使用示例 以当前两个用户自建的数据库db1、db2为例: 在CN上获取集群的所有残留文件记录: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的 当前集群中: dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。 残留文件在residualfile 列展示。 filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。 调用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数据库中的残留文件都未进行验证。 调用 pgxc_rm_residualfiles()函数删除残留文件。 1 db1=# SELECT * FROM pgxc_rm_residualfiles(); 再次调用pgxc_get_residualfiles()函数检查删除后的结果。 结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。 同时可以看到查询出9条结果,与之前查询出的结果想比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中: 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。 进入db2数据库,并调用验证函数: 此时可以查询验证的结果: 调用删除函数: 再查询删除的结果: 此时因为 8342 结尾的记录文件中残留文件已经全部删除,所以整个记录文件也被删除并备份到backup目录下,所以查询到0条记录。
  • 使用步骤 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。 pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。
  • pgxc_rm_scan_residualfiles_archive(query_flag) 描述:pg_rm_scan_residualfiles_archive()的CN统一执行函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数说明:query_flag。参数类型int,用于表示执行范围,1表示CN,2表示主DN,4表示备DN,通过或运算可以得到查询并集,如1|2=3表示CN+主DN,1|2|4=7表示CN+主DN+备DN,默认值是7。 返回类型:record 返回信息如下: 表8 返回字段 名称 类型 描述 nodename name 节点名称。 instance_id text 实例名称。 count bigint 归档中已删除的残留文件文件数量。 size bigint 归档中已删除的残留文件总大小,单位为byte。 示例: 1 2 3 4 5 6 7 SELECT * FROM pgxc_rm_scan_residualfiles_archive(); node_name | instance_id | count | size --------------+-------------+-------+------- dn_6001_6002 | dn_6001 | 4 | 81920 cn_5001 | cn_5001 | 1 | 40960 dn_6007_6008 | dn_6008 | 1 | 24576 (3 rows
  • pgxc_archive_scan_residualfiles(query_flag) 描述:pg_archive_scan_residualfiles()的CN统一执行函数。该函数为集群级函数,与当前所在的数据库相关,在CN实例上运行。 参数说明:query_flag。参数类型int,用于表示执行范围,1表示CN,2表示主DN,4表示备DN,通过或运算可以得到查询并集,如1|2=3表示CN+主DN,1|2|4=7表示CN+主DN+备DN,默认值是7。 返回类型:record 返回信息如下: 表6 返回字段 名称 类型 描述 nodename name 节点名称。 instance_id text 实例名称。 archive text 残留文件归档路径。 count bigint 归档的残留文件文件数量。 size bigint 归档的残留文件总大小,单位为byte。 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_archive_scan_residualfiles(); node_name | instance_id | archive | count | size --------------+-------------+--------------------------------------------------------------+-------+------- cn_5001 | cn_5001 | pg_residualfiles/archive/pgscrf_archive_20231027145050896440 | 1 | 40960 dn_6007_6008 | dn_6008 | pg_residualfiles/archive/pgscrf_archive_20231027145051018138 | 1 | 24576 (2 rows) 此函数只能归档当前登录的数据库中记录过的残留文件,归档时会记录中的残留文件进行相应的校验,校验结果分为以下三种情况: 校验通过:校验通过后会对残留文件进行归档,并标记为已处理。 校验失败:校验失败会跳过归档,并标记为已处理。 延迟校验:延迟校验会跳过归档,通常表示当前未满足校验时机,延迟校验的情况通常和事务完成情况及备机REDO进度有关。 实际归档目录与对应表空间在同一个文件系统下,删除表空间也会删除对应的残留文件归档。 延迟DDL开启后,此函数无法使用。 此函数为重载操作,不支持单节点并发使用,也不建议在业务繁忙和资源负载较高时使用。
  • pg_archive_scan_residualfiles() 描述:用于归档当前节点所连接数据库上所有扫描到的残留文件记录。该函数为实例级函数,与当前所在的数据库相关,可以在任意实例上运行。 返回类型:record 返回信息如下: 表5 返回字段 名称 类型 描述 archive text 残留文件归档路径。 count bigint 归档的残留文件文件数量。 size bigint 归档的残留文件总大小,单位为byte。 示例: 1 2 3 4 5 SELECT * FROM pg_archive_scan_residualfiles(); archive | count | size --------------------------------------------------------------+-------+------- pg_residualfiles/archive/pgscrf_archive_20231027144613791801 | 4 | 81920 (1 row) 此函数只能归档当前登录的数据库中记录过的残留文件,归档时会记录中的残留文件进行相应的校验,校验结果分为以下三种情况: 校验通过:校验通过后会对残留文件进行归档,并标记为已处理。 校验失败:校验失败会跳过归档,并标记为已处理。 延迟校验:延迟校验会跳过归档,通常表示当前未满足校验时机,延迟校验的情况通常和事务完成情况及备机REDO进度有关。 实际归档目录与对应表空间在同一个文件系统下,删除表空间也会删除对应的残留文件归档。 延迟DDL开启后,此函数无法使用。 此函数为重载操作,不支持单节点并发使用,也不建议在业务繁忙和资源负载较高时使用。
  • pg_rm_scan_residualfiles_archive() 描述:用于删除当前节点所有归档的残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 返回类型:record 返回信息如下: 表7 返回字段 名称 类型 描述 count bigint 归档中已删除的残留文件文件数量。 size bigint 归档中已删除的残留文件总大小,单位为byte。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_scan_residualfiles_archive(); count | size -------+------- 4 | 81920 (1 row)
  • pgxc_get_scan_residualfiles(query_flag) 描述:pg_get_scan_residualfiles()的CN统一执行函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数说明:query_flag。参数类型int,用于表示执行范围。1表示CN,2表示主DN,4表示备DN,通过或运算可以得到查询并集,如1|2=3表示CN+主DN,1|2|4=7表示CN+主DN+备DN,默认值是7。 返回类型:record 返回信息如下: 表4 返回字段 名称 类型 描述 nodename name 节点名称。 instance_id text 实例名称。 handled bool 是否已处理。 dbname text 数据库名称。 residualfile text 残留文件路径。 size bigint 文件大小,单位为byte。 inode bigint 残留文件stat信息中的Inode。 atime timestamptz 残留文件stat信息中的Access time。 mtime timestamptz 残留文件stat信息中的Modifie time。 ctime timestamptz 残留文件stat信息中的Chang time。 filepath text 对应pgscrf_meta文件。 notes text 注释。 示例: 1 2 3 4 5 6 7 8 9 10 SELECT * FROM pgxc_get_scan_residualfiles(); node_name | instance_id | handled | dbname | residualfile | size | inode | atime | mtime | ctime | filepath | notes --------------+-------------+---------+----------+---------------------------------------------------------------------+-------+------------+------------------------+------------------------+------------------------+---------------------------------------------------+------- dn_6001_6002 | dn_6001 | f | postgres | base/16323/2147494191 | 81920 | 805444689 | 2023-10-27 14:21:49+08 | 2023-10-27 14:23:08+08 | 2023-10-27 14:23:08+08 | pgscrf_meta_1663_16323_20231027144103839354 | dn_6001_6002 | dn_6001 | f | postgres | base/16323/2147494191_fsm | 0 | 805444690 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | pgscrf_meta_1663_16323_20231027144103839354 | dn_6001_6002 | dn_6001 | f | postgres | base/16323/2147494191_vm | 0 | 805444691 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | pgscrf_meta_1663_16323_20231027144103839354 | dn_6001_6002 | dn_6001 | f | postgres | pg_tblspc/2147484281/PG_9.2_201611171_dn_6001_6002/16323/2147894282 | 0 | 7247789391 | 2023-10-27 14:37:03+08 | 2023-10-27 14:37:03+08 | 2023-10-27 14:37:03+08 | pgscrf_meta_2147484281_16323_20231027144103839826 | cn_5001 | cn_5001 | f | postgres | base/16323/2147784070 | 40960 | 537070896 | 2023-10-27 14:38:59+08 | 2023-10-27 14:39:17+08 | 2023-10-27 14:39:17+08 | pgscrf_meta_1663_16323_20231027144103946217 | dn_6007_6008 | dn_6008 | f | postgres | base/16323/2147784073 | 24576 | 7784666105 | 2023-10-27 14:40:21+08 | 2023-10-27 14:40:34+08 | 2023-10-27 14:40:34+08 | pgscrf_meta_1663_16323_20231027144104171311 | (6 rows)
  • pg_scan_residualfiles() 描述:用于扫描当前节点所连接数据库的所有残留文件记录。该函数为实例级函数,与当前所在的数据库相关,可以在任意实例上运行。 返回类型:record 返回信息如下: 表1 返回字段 名称 类型 描述 residualfile text 残留文件路径。 示例: 1 2 3 4 5 6 SELECT * FROM pg_scan_residualfiles(); pgscrf -------------------------------------------------------------------- pg_residualfiles/pgscrf_meta_1663_16323_20231027143716005244 pg_residualfiles/pgscrf_meta_2147484281_16323_20231027143716005713 (2 rows)
  • pg_get_scan_residualfiles() 描述:用于获取当前节点所有扫描到的残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 返回类型:record 返回信息如下: 表3 返回字段 名称 类型 描述 handled bool 是否已处理。 dbname text 数据库名称。 residualfile text 残留文件路径。 size bigint 文件大小,单位为byte。 inode bigint 残留文件stat信息中的Inode。 atime timestamptz 残留文件stat信息中的Access time。 mtime timestamptz 残留文件stat信息中的Modifie time。 ctime timestamptz 残留文件stat信息中的Chang time。 filepath text 对应pgscrf_meta文件。 notes text 注释。 示例: 1 2 3 4 5 6 7 8 SELECT * FROM pg_get_scan_residualfiles(); handled | dbname | residualfile | size | inode | atime | mtime | ctime | filepath | notes ---------+----------+---------------------------------------------------------------------+-------+------------+------------------------+------------------------+------------------------+---------------------------------------------------+------- f | postgres | base/16323/2147494191 | 81920 | 805444689 | 2023-10-27 14:21:49+08 | 2023-10-27 14:23:08+08 | 2023-10-27 14:23:08+08 | pgscrf_meta_1663_16323_20231027144103839354 | f | postgres | base/16323/2147494191_fsm | 0 | 805444690 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | pgscrf_meta_1663_16323_20231027144103839354 | f | postgres | base/16323/2147494191_vm | 0 | 805444691 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | 2023-10-27 14:21:49+08 | pgscrf_meta_1663_16323_20231027144103839354 | f | postgres | pg_tblspc/2147484281/PG_9.2_201611171_dn_6001_6002/16323/2147894282 | 0 | 7247789391 | 2023-10-27 14:37:03+08 | 2023-10-27 14:37:03+08 | 2023-10-27 14:37:03+08 | pgscrf_meta_2147484281_16323_20231027144103839826 | (4 rows)
  • pgxc_scan_residualfiles(query_flag) 描述:pg_scan_residualfiles()的CN统一执行函数。该函数为集群级函数,与当前所在的数据库相关,在CN实例上运行。 参数说明:query_flag。参数类型int,表示执行范围。1表示CN,2表示主DN,4表示备DN,通过或运算可以得到查询并集,如1|2=3表示CN+主DN,1|2|4=7表示CN+主DN+备DN,默认值是7。 返回类型:record 返回信息如下: 表2 返回字段 名称 类型 描述 nodename name 节点名称。 instance_id text 实例名称。 residualfile text 残留文件路径。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 SELECT * FROM pgxc_scan_residualfiles(); node_name | instance_id | pgscrf --------------+-------------+-------------------------------------------------------------------- dn_6001_6002 | dn_6001 | pg_residualfiles/pgscrf_meta_1663_16323_20231027144103839354 dn_6001_6002 | dn_6001 | pg_residualfiles/pgscrf_meta_2147484281_16323_20231027144103839826 cn_5001 | cn_5001 | pg_residualfiles/pgscrf_meta_1663_16323_20231027144103946217 dn_6007_6008 | dn_6008 | pg_residualfiles/pgscrf_meta_1663_16323_20231027144104171311 (4 rows) SELECT * FROM pgxc_scan_residualfiles(1); node_name | instance_id | pgscrf -----------+-------------+-------------------------------------------------------------- cn_5001 | cn_5001 | pg_residualfiles/pgscrf_meta_1663_16323_20231027144421861628 (1 row) SELECT * FROM pgxc_scan_residualfiles(2); node_name | instance_id | pgscrf --------------+-------------+-------------------------------------------------------------------- dn_6001_6002 | dn_6001 | pg_residualfiles/pgscrf_meta_1663_16323_20231027144424210395 dn_6001_6002 | dn_6001 | pg_residualfiles/pgscrf_meta_2147484281_16323_20231027144424210855 (2 rows) SELECT * FROM pgxc_scan_residualfiles(4); node_name | instance_id | pgscrf --------------+-------------+-------------------------------------------------------------- dn_6007_6008 | dn_6008 | pg_residualfiles/pgscrf_meta_1663_16323_20231027144427492060 (1 row)
  • 使用步骤 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。 pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。
  • 使用示例 以当前两个用户自建的数据库db1、db2为例: 在CN上获取集群的所有残留文件记录: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的 当前集群中: dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。 残留文件在residualfile 列展示。 filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。 调用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数据库中的残留文件都未进行验证。 调用 pgxc_rm_residualfiles()函数删除残留文件。 1 db1=# SELECT * FROM pgxc_rm_residualfiles(); 再次调用pgxc_get_residualfiles()函数检查删除后的结果。 结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。 同时可以看到查询出9条结果,与之前查询出的结果想比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中: 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。 进入db2数据库,并调用验证函数: 此时可以查询验证的结果: 调用删除函数: 再查询删除的结果: 此时因为 8342 结尾的记录文件中残留文件已经全部删除,所以整个记录文件也被删除并备份到backup目录下,所以查询到0条记录。