更新时间:2025-05-29 GMT+08:00
分享

逻辑复制函数

使用逻辑复制函数时,需要设置GUC参数wal_level为logical。具体配置请参考《特性指南》的“逻辑解码 > 使用SQL函数接口进行逻辑解码”章节。

pg_create_logical_replication_slot('slot_name', 'plugin_name', 'output_order')

描述:创建逻辑复制槽。多租场景下,non-PDB内部创建本DB的复制槽,PDB内部创建本PDB的复制槽。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • plugin_name

    插件名称。

    取值范围:字符串,当前支持mppdb_decoding、sql_decoding、parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding。

  • output_order

    复制槽解码结果输出顺序,该参数为可选参数。

    取值范围:0或1,默认值为0。

    • 0:设为0时,复制槽解码结果按照事务的COMMIT LSN排序。此时复制槽的confirmed_csn为0,此复制槽称为LSN序复制槽。
    • 1:设为1时,复制槽解码结果按照事务的CSN排序。此时复制槽的confirmed_csn为非0值,此复制槽称为CSN序复制槽。

返回值类型:name, text。

示例:
gaussdb=# SELECT * FROM pg_create_logical_replication_slot('slot_lsn','mppdb_decoding',0);
 slotname | xlog_position
----------+---------------
 slot_lsn | 0/6D08B58
(1 row)

gaussdb=# SELECT * FROM pg_create_logical_replication_slot('slot_csn','mppdb_decoding',1);
 slotname | xlog_position
----------+---------------
 slot_csn | 0/59AD800
(1 row)

备注:第一个返回值表示slot_name,第二个返回值在LSN序复制槽和CSN序复制槽下有不同含义。对于LSN序复制槽,该值为复制槽的confirmed_flush,表示COMMIT LSN小于等于该值的事务之后不会被解码输出;对于CSN序复制槽,该值为复制槽的confirmed_csn,表示CSN小于等于该值的事务之后不会被解码输出。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。

pg_create_physical_replication_slot('slot_name', 'isDummyStandby')

描述:创建新的物理复制槽。多租场景下,PDB内部不支持创建物理复制槽。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • isDummyStandby

    预留参数。

    类型:bool

返回值类型:name, text

  • 调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。
  • 由于该函数创建的物理复制槽没有restart_lsn,会被认为是无效槽,在做checkpoint时会被自动删除。

pg_drop_replication_slot('slot_name')

描述:删除流复制槽。多租场景下,non-PDB可以删除non-PDB和PDB的复制槽,PDB内部只能删除本PDB的复制槽。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

返回值类型:void

备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机调用。

pg_logical_slot_peek_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

描述:解码但不推进流复制槽(下次解码可以再次获取本次解出的数据)。多租场景下,non-PDB只能操作本non-PDB的复制槽,PDB只能操作本PDB的复制槽。

参数说明:
  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • upto_lsn

    在CSN序逻辑复制槽上代表日志的CSN,表示解码直到小于等于此CSN的事务日志解码完毕(可能会解码一个CSN大于指定CSN的事务);在LSN序复制槽上代表日志的LSN,表示解码直到COMMIT LSN大于等于该LSN的第一个事务解码完毕。

    取值范围:字符串(代表十六进制格式表示的uint64,在正中间用'/'分割,左右两边各为一个uint32,如某个uint32为0则显示0),如'1/2AAFC60'、'0/A060'或'3A/0'。为NULL时表示不对解码截止的日志位置做限制。

  • upto_nchanges

    解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。

    取值范围:非负整数。

    upto_lsn和upto_nchanges中任一参数达到限制,解码都会结束。

  • options:此项为可选参数,由一系列options_name和options_value一一对应组成。
    • include-xids

      解码出的data列是否包含xid信息。

      取值范围:Boolean,默认值为true。

      • false:设为false时,解码出的data列不包含xid信息。
      • true:设为true时,解码出的data列包含xid信息。
    • skip-empty-xacts

      解码时是否忽略空事务信息。

      取值范围:Boolean,默认值为false。

      • false:设为false时,解码时不忽略空事务信息。
      • true:设为true时,解码时会忽略空事务信息。
    • include-timestamp

      解码信息是否包含commit时间戳。

      取值范围:Boolean,默认值为true。

      • false:设为false时,解码信息不包含commit时间戳。
      • true:设为true时,解码信息包含commit时间戳。
    • only-local

      是否仅解码本地日志。

      取值范围:Boolean,默认值为true。

      • false:设为false时,解码非本地日志和本地日志。
      • true:设为true时,仅解码本地日志。
    • force-binary

      是否以二进制格式输出解码结果。

      取值范围:Boolean型,默认值为false。

      • false:设为false时,以文本格式输出解码结果。
      • true:暂不支持设置。
    • white-table-list

      白名单参数,包含需要进行解码的schema和表名。

      取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例:

      SELECT * FROM pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2');
    • max-txn-in-memory

      内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。

      取值范围:0~100的整型,默认值为0,即不开启此种管控。

    • max-reorderbuffer-in-memory

      内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。

      取值范围:0~100的整型,默认值为0,即不开启此种管控。

    • desc-memory-limit

      内存管控参数,单位为MB,逻辑解码任务维护的表元信息总内存大于该值时,触发淘汰机制清理部分表元信息。

      取值范围:10~1024的整型,默认值为100。

    • include-user

      事务的BEGIN逻辑日志是否输出事务的用户名字。

      取值范围:bool型,默认值为false。

      • false:设为false时,事务的BEGIN逻辑日志不输出事务的用户名字。
      • true:设为true时,事务的BEGIN逻辑日志输出事务的用户名字。
    • exclude-userids

      黑名单用户的OID参数。

      取值范围:指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。

    • exclude-users

      黑名单用户的名字参数。

      取值范围:指定黑名单用户的名字,多个名字通过','分隔;通过dynamic-resolution设置是否动态解析识别用户名字。若解码报错用户不存在而中断,在确定日志产生时刻不存在对应的黑名单用户,可以通过配置dynamic-resolution成true或者从用户黑名单中删除报错用户名字来启动解码继续获取逻辑日志。

    • dynamic-resolution

      是否动态解析黑名单用户名字。

      取值范围:bool型,默认值为true。

      • false:设为false时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码。
      • true:设为true时,当解码观测到黑名单exclude-users中用户不存在时继续解码。
    • enable-ddl-decoding

      逻辑解码控制参数,用于控制是否开启DDL语句的逻辑解码。

      取值范围:bool型,默认值为false。
      • false:设为false时,不开启DDL语句的逻辑解码。
      • true:设为true时,开启DDL语句的逻辑解码。
    • enable-ddl-json-format

      逻辑解码控制参数,用于控制DDL的反解析流程以及输出形式。

      取值范围:bool型,默认值为false。
      • false:设为false时,传送TEXT格式的DDL反解析结果。
      • true:设为true时,传送JSON格式的DDL反解析结果。
    • skip-generated-columns:

      逻辑解码控制参数,用于跳过存储生成列的输出。对UPDATE和DELETE的旧元组无效,相应元组始终会输出存储生成列。

      取值范围:boolean型,默认值为false/off。

      • true/on:值为true/on时,不输出存储生成列的解码结果。
      • false/off:设为false/off时,输出存储生成列的解码结果。

      虚拟生成列不受此参数控制,DML的解码结果始终不会输出虚拟生成列。

    • restart-lsn:

      逻辑解码控制参数,用于指定解码开始点,逻辑解码会从restart-lsn该点往后找到一个一致性点(consistency lsn),然后从consistency lsn点开始解码并输出数据,查找到的一致性点会落盘,记录到复制槽文件中,当下次调用pg_logical_slot_peek_changes没有指定restart-lsn时,则从复制槽文件记录的一致性点开始输出数据。

      取值范围:字符串类型,格式类型为"XXXXXXXX/XXXXXXXX",其中"0/0"为无效值。

      仅多版本数据字典类型的复制槽才支持该选项。

    • decode-sequence:

      逻辑解码控制参数,用来指定是否输出sequence值的变更日志的解码结果。

      取值范围:boolean型,默认值为false。

      • true:暂不支持设置。
      • false:设为false时,不输出sequence值的变更日志的解码结果。

      解码选项decode-sequence当前仅允许设置为false,设置为true会在启动解码时报错退出。

其他配置选项可参考《特性指南》中“逻辑复制 > 逻辑解码 > 逻辑解码选项”章节。

返回值类型:text、xid、text

示例:
gaussdb=# SELECT * FROM pg_logical_slot_peek_changes('slot_lsn',NULL,4096,'skip-empty-xacts','on');
 location  |  xid  |                                                                                            data
-----------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 0/6D0B500 | 46914 | BEGIN 46914
 0/6D0B530 | 46914 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","1"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
 0/6D0B8B8 | 46914 | COMMIT 46914 (at 2023-02-22 17:29:31.090018+08) CSN 94034528
 0/6D0BB58 | 46915 | BEGIN 46915
 0/6D0BB88 | 46915 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","2"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
 0/6D0BF08 | 46915 | COMMIT 46915 (at 2023-02-22 17:31:30.672093+08) CSN 94034568
 0/6D0BF08 | 46916 | BEGIN 46916
 0/6D0BF38 | 46916 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
 0/6D0C218 | 46916 | COMMIT 46916 (at 2023-02-22 17:31:34.438319+08) CSN 94034570
(9 rows)

gaussdb=# SELECT * FROM pg_logical_slot_peek_changes('slot_csn',NULL,4096,'skip-empty-xacts','on');
 location  |  xid  |                                                                                            data
-----------+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 0/0       | 46914 | BEGIN CSN: 94034528
 0/0       | 46914 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","1"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
 0/59ADA60 | 46914 | COMMIT 46914 (at 2023-02-22 17:29:31.090018+08) CSN 94034528
 0/59ADA60 | 46915 | BEGIN CSN: 94034568
 0/59ADA60 | 46915 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","2"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
 0/59ADA88 | 46915 | COMMIT 46915 (at 2023-02-22 17:31:30.672093+08) CSN 94034568
 0/59ADA88 | 46916 | BEGIN CSN: 94034570
 0/59ADA88 | 46916 | {"table_name":"public.t1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
 0/59ADA8A | 46916 | COMMIT 46916 (at 2023-02-22 17:31:34.438319+08) CSN 94034570
(9 rows)

备注:上述函数示例中,slot_lsn/slot_csn为逻辑复制槽名称。

函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN(LSN序复制槽)或CSN(CSN序复制槽)位置、xid和解码内容。其中location列代表CSN时,仅当解码到COMMIT日志时才会更新。

调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。

pg_logical_slot_get_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

描述:解码并推进流复制槽。多租场景下,non-PDB只能操作本non-PDB的复制槽,PDB只能操作本PDB的复制槽。

参数说明:与pg_logical_slot_peek_changes一致,详细内容请参见pg_logical_slot_peek_changes

备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数支持在主机或备机调用,在备机调用会同步推进主机上对应的逻辑复制槽。

在备机上执行该函数,推进主机对应复制槽时需占用主机的一个walsender。由于逻辑解码功能会为每个逻辑复制槽预留walsender,因此正常场景执行该函数会正常推进主机的逻辑复制槽,如果短时间连续执行该函数会导致通知主机推进失败,且没有报错。

pg_logical_slot_peek_binary_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

描述:以二进制格式解码且不推进流复制槽(下次解码可以再次获取本次解出的数据)。多租场景下,non-PDB只能操作本non-PDB的复制槽,PDB只能操作本PDB的复制槽。

参数说明:
  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • upto_lsn

    在CSN序逻辑复制槽上代表日志的CSN,表示解码直到小于等于此CSN的事务日志解码完毕(可能会解码一个CSN大于指定CSN的事务);在LSN序复制槽上代表日志的LSN,表示解码直到COMMIT LSN大于等于该LSN的第一个事务解码完毕。

    取值范围:字符串(代表十六进制格式表示的uint64,在正中间用'/'分割,左右两边各为一个uint32,如某个uint32为0则显示0),如'1/2AAFC60'、'0/A060'或'3A/0'。为NULL时表示不对解码截止的日志位置做限制。

  • upto_nchanges

    解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。

    取值范围:非负整数。

    upto_lsn和upto_nchanges中任一参数达到限制,解码都会结束。

  • options:此项为可选参数,由一系列options_name和options_value一一对应组成。
    • include-xids

      解码出的data列是否包含xid信息。

      取值范围:Boolean,默认值为true。

      • false:设为false时,解码出的data列不包含xid信息。
      • true:设为true时,解码出的data列包含xid信息。
    • skip-empty-xacts

      解码时是否忽略空事务信息。

      取值范围:Boolean,默认值为false。

      • false:设为false时,解码时不忽略空事务信息。
      • true:设为true时,解码时会忽略空事务信息。
    • include-timestamp

      解码信息是否包含commit时间戳。

      取值范围:Boolean,默认值为true。

      • false:设为false时,解码信息不包含commit时间戳。
      • true:设为true时,解码信息包含commit时间戳。
    • only-local

      是否仅解码本地日志。

      取值范围:Boolean,默认值为true。

      • false:设为false时,解码非本地日志和本地日志。
      • true:设为true时,仅解码本地日志。
    • force-binary

      对此函数不生效。

      取值范围:Boolean,均以二进制格式输出结果。

    • white-table-list

      白名单参数,包含需要进行解码的schema和表名。

      取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;schema名和表名间以'.'分隔,不允许存在任意空白符。例:select * from pg_logical_slot_peek_binary_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2');

    • max-txn-in-memory

      内存管控参数,单位为MB,单个事务占用内存大于该值即进行落盘。

      取值范围:0~100的整型,默认值为0,即不开启此种管控。

    • max-reorderbuffer-in-memory

      内存管控参数,单位为GB,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。

      取值范围:0~100的整型,默认值为0,即不开启此种管控。

    • desc-memory-limit

      内存管控参数,单位为MB,逻辑解码任务维护的表元信息总内存大于该值时,触发淘汰机制清理部分表元信息。

      取值范围:10~1024的整型,默认值为100。

    • include-user

      事务的BEGIN逻辑日志是否输出事务的用户名字。

      取值范围:Boolean,默认值为false。

      • false:设为false时,事务的BEGIN逻辑日志不输出事务的用户名字。
      • true:设为true时,事务的BEGIN逻辑日志输出事务的用户名字。
    • exclude-userids

      黑名单用户的OID参数。

      取值范围:指定黑名单用户的OID,多个OID通过','分隔,不校验用户OID是否存在。

    • exclude-users

      黑名单用户的名字参数。

      取值范围:指定黑名单用户的名字,多个名字通过','分隔;通过dynamic-resolution设置是否动态解析识别用户名字。若解码报错用户不存在而中断,在确定日志产生时刻不存在对应的黑名单用户,可以通过配置dynamic-resolution成true或者从用户黑名单中删除报错用户名字来启动解码继续获取逻辑日志。

    • dynamic-resolution

      是否动态解析黑名单用户名字。

      取值范围:Boolean,默认值为true。

      • false:设为false时,当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码。
      • true:设为true时,当解码观测到黑名单exclude-users中用户不存在时继续解码。
    • restart-lsn:

      逻辑解码控制参数,用于指定解码开始点,逻辑解码会从restart-lsn该点往后找到一个一致性点(consistency lsn),然后从consistency lsn点开始解码并输出数据,查找到的一致性点会落盘,记录到复制槽文件中,当下次调用pg_logical_slot_peek_binary_changes没有指定restart-lsn时,则从复制槽文件记录的一致性点开始输出数据。

      取值范围:字符串类型,格式类型为"XXXXXXXX/XXXXXXXX",其中"0/0"为无效值。

      仅多版本数据字典类型的复制槽才支持该选项。

    • decode-sequence:

      逻辑解码控制参数,用来指定是否输出sequence值的变更日志的解码结果。

      取值范围:boolean型,默认值为false。

      • true:暂不支持设置。
      • false:设为false时,不输出sequence值的变更日志的解码结果。

      解码选项decode-sequence当前仅允许设置为false,设置为true会在启动解码时报错退出。

某些配置选项在函数中仅能配置而不实际生效,可参考《特性指南》中“逻辑复制 > 逻辑解码 > 逻辑解码选项”章节。

返回值类型:text、xid、bytea

备注:函数返回解码结果,每一条解码结果包含三列,对应上述返回值类型,分别表示LSN位置、xid和二进制格式的解码内容。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。

pg_logical_slot_get_binary_changes('slot_name', 'upto_lsn', upto_nchanges, 'options_name', 'options_value')

描述:以二进制格式解码并推进流复制槽。多租场景下,non-PDB只能操作本non-PDB的复制槽,PDB只能操作本PDB的复制槽。

参数说明:与pg_logical_slot_peek_binary_changes一致,详细内容请参见•pg_logical_slot_peek_bi...

备注:调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数目前只支持在主机上调用。

pg_replication_slot_advance ('slot_name', 'upto_lsn')

描述:直接推进流复制槽到指定upto_lsn,不输出解码结果。多租场景下,主节点PDB内部推进PDB的复制槽,备节点PDB内部推进复制槽报错。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • upto_lsn

    在CSN序逻辑复制槽上代表推进到的日志CSN位置,下次解码时只会输出比该CSN大的事务结果。如果输入的CSN比当前流复制槽记录的confirmed_csn还要小,则直接返回;如果输入的CSN比当前可获取的最新CSN要大或并未输入,则推进到当前可获取的最新CSN。

    在LSN序复制槽上代表推进到的日志LSN位置,下次解码时只会输出提交位置比该LSN大的事务结果。如果输入的LSN比当前流复制槽记录的推进位置还要小,则报错;如果输入的LSN比当前最新物理日志LSN还要大或并未输入,则推进到当前最新物理日志LSN。

    取值范围:字符串(代表十六进制格式表示的uint64,在正中间用'/'分割,左右两边各为一个uint32,如某个uint32为0则显示0),如'1/2AAFC60'、'0/A060'或'3A/0'。为NULL时表示不对解码截止的日志位置做限制。

返回值类型:name, text

备注:返回值分别对应slot_name和实际推进到的LSN或CSN。调用该函数的用户需要具有SYSADMIN权限或具有REPLICATION权限或继承了内置角色gs_role_replication的权限。此函数支持在主机调用,或在备机对逻辑复制槽调用。在备机调用会同步推进主机上对应的逻辑复制槽。

该函数支持在备机上对逻辑复制槽执行,同步推进主机上对应的逻辑复制槽。在备机上执行该函数,推进主机对应复制槽时需占用主机的一个walsender。由于逻辑解码功能会为每个逻辑复制槽预留walsender,因此正常场景执行该函数会正常推进主机的逻辑复制槽,如果短时间连续执行该函数会导致通知主机推进失败,且没有报错。

pg_logical_get_area_changes('start_lsn', 'upto_lsn', upto_nchanges, 'decoding_plugin', 'xlog_path', 'options_name', 'options_value')

描述:指定lsn区间进行解码,或者指定xlog文件进行解码。

约束条件如下:

  • 当前网络和硬件环境正常。
  • 单条元组大小建议不超过500MB,500MB~1GB之间会报错。
  • 不支持数据页复制这种不落xlog的日志解码。
  • 调用接口时,要求日志级别wal_level=logical,且只有在wal_level=logical期间产生的日志文件才能被解析,如果使用的xlog文件为非logical级别,则解码内容没有对应的值和类型,无其他影响。如果wal_level未被设置成logical级别,则报错不解码。
  • xlog文件只能被完全同构的dn的某个副本解析,以确保可以找到数据对应的元信息。
  • 需要注意一次不要读入过多xlog文件,指定范围解码不指定文件解码的时候推荐一次一个xlog文件的大小,一般情况下,一个xlog文件解码过程中粗估占用内存为xlog文件大小的2~3倍。
  • 不支持VACUUM FULL之前的日志解码。
  • 不能解码扩容前的xlog文件。
  • 此解码方式为根据xlog文本记录数据进行解码,将可解码内容解码出来,不基于事务进行解码,因此不在此xlog里的数据无法解码。若相关xlog日志缺失,缺失日志也无法解码。
  • enable-ddl不打开时:从解码点开始,如果未指定解码文件,会先检测从解码开始点到最新redo值之间是否发生ddl,如果发生ddl则全部不解码;如果指定解码文件,会同时检测解码文件的开始点到文件最后可读内容之间,以及数据目录下xlog开始点到最新redo值之间是否发生ddl,检测到一条ddl则对所有表都不解码。
  • enable-ddl不打开时:不支持toast类型、clob类型和blob类型的字段解码。当enable-ddl打开时:支持相关类型的解码。
  • enable-ddl打开时:支持区间含有DDL的解码,并且可以解码输出DDL语句,输出DDL语句范围请参见《特性指南》中“逻辑复制 > 逻辑解码 > 逻辑解码支持DDL”章节。
  • 为解析某个表的UPDATE和DELETE语句,需为此表配置REPLICA IDENITY属性,在此表无主键时需要配置为FULL,具体配置方式请参见ALTER TABLE章节中“REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING }”字段。

备注:打开三权分立时,只有数据库初始用户可以调用;关闭三权分立时,需要具备系统管理员权限。

参数说明:

  • start_lsn

    指定开始解码的lsn。

    取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码起始的日志位置做限制。

  • upto_lsn

    指定解码结束的lsn。

    取值范围:字符串(LSN,格式为xlogid/xrecoff),如'1/2AAFC60'。为NULL时表示不对解码截止的日志位置做限制。

  • upto_nchanges

    解码条数(包含begin和commit)。假设一共有三条事务,分别包含3、5、7条记录,如果upto_nchanges为4,那么会解码出前两个事务共8条记录。解码完第二条事务时发现解码条数记录大于等于upto_nchanges,会停止解码。

    取值范围:非负整数。

    LSN和upto_nchanges中任一参数达到限制,解码都会结束。

  • decoding_plugin

解码插件,指定解码内容输出格式的so插件。

取值范围:提供mppdb_decoding和sql_decoding两个解码插件。

  • xlog_path

解码插件,指定解码文件的xlog绝对路径,文件级别

取值范围:NULL或者xlog文件绝对路径的字符串。

  • options:此项为可选参数,由一系列options_name和options_value一一对应组成,可以缺省。
    • include-xids

      解码出的data列是否包含xid信息。

      取值范围:bool型,默认值为true。

      false:设为false时,解码出的data列不包含xid信息。

      true:设为true时,解码出的data列包含xid信息。

    • include-timestamp

      解码信息是否包含commit时间戳。

      取值范围:bool型,默认值为true。

      false:设为false时,解码信息不包含commit时间戳。

      true:设为true时,解码信息包含commit时间戳。

    • only-local

      是否仅解码本地日志。

      取值范围:Boolean型,默认值为true。

      false:设为false时,解码非本地日志和本地日志。

      true:设为true时,仅解码本地日志。

    • force-binary

      是否以二进制格式输出解码结果

      取值范围:Boolean型,默认值为false。

      false:设为false时,以文本格式输出解码结果。

      true:暂不支持设置。

    • white-table-list

      白名单参数,包含需要进行解码的Schema和表名。取值范围:包含白名单中表名的字符串,不同的表以','为分隔符进行隔离;使用'*'来模糊匹配所有情况;Schema名和表名间以'.'分隔,不允许存在任意空白符。

    • white-database-list

      白名单参数,包含需要进行解码的database名。取值范围:包含白名单中database名的字符串,不同的database名以','为分隔符进行隔离;不允许存在任意空白符。如果不设置white-database-list时,只解码当前连接的database xlog日志;如果设置white-database-list时,只解码white-database-list里的database xlog日志。如果是对系统库解码时,也支持对系统库中普通表的数据找回。

    • enable-ddl

      支持含有DDL语法的解码。从起始位置到当前最新日志之间,如果出现DDL语法,不影响功能使用。取值范围:0和1。

      • 设置为1:打开状态。该函数支持含有DDL语法的解码。
      • 设置为0:默认关闭状态。该函数不支持含有DDL语法的解码,如果检测到DDL语句,直接退出。
    • data-limit

      解码输出数据量。单位:KB。

      取值范围:大于等于0的整数。默认值0,表示不限制解码结果大小。

      该函数入参data-limit与GUC中data-limit配合使用,解码超过data-limit大小结束。

      规则:

      1. GUC中data-limit设置为0,函数解码data-limit不设置或者设置为0,解码结果无上限。
      2. GUC中data-limit不设置,函数解码data-limit设置为0,解码结果上限为10GB。
      3. GUC中data-limit设置,函数解码data-limit不设置或者设置为0,解码结果上限为GUC中的data-limit。
      4. GUC中data-limit和函数data-limit同时设置,取两者较小值作为解码结果上限。

      解码结果文件大小可能会超过data-limit。

    • xlog_dir:

      支持归档日志文件夹解码,且文件夹名称与WAL日志文件前8位同名。当且仅当enable-ddl = 1,输入的start_lsn 和 upto_lsn 为有效区间,可以进行解码。取值范围:文件夹的全路径。

      具体可参考《特性指南》中“逻辑复制 > 逻辑解码 > 逻辑解码数据找回功能”章节。

      gaussdb=# SELECT * FROM pg_logical_get_area_changes('1/F9FC24C8', '1/FA67B2A0', NULL, 'sql_decoding', NULL ,'enable-ddl','1','xlog_dir','/base/username/xlog_dir/00000000');
    • decode-sequence:

      逻辑解码控制参数,用来指定是否输出sequence值的变更日志的解码结果。

      取值范围:boolean型,默认值为false。

      • true:暂不支持设置。
      • false:设为false时,不输出sequence值的变更日志的解码结果。

      解码选项decode-sequence当前仅允许设置为false,设置为true会在启动解码时报错。

pg_logical_get_area_changes只对以上参数生效。其余参数max-txn-in-memory、include-user、exclude-userids、exclude-users、dynamic-resolution等(详见pg_logical_slot_peel_changes)不生效。

示例:

gaussdb=# CREATE TABLE t1(a int, b int);
CREATE TABLE
gaussdb=# SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 0/5ECBCD48
(1 row)

gaussdb=# INSERT INTO t1 VALUES(1,1);
INSERT 0 1
gaussdb=# UPDATE t1 SET b = 2 WHERE a = 1;
UPDATE 1
gaussdb=# DELETE FROM t1;
DELETE 1
gaussdb=# SELECT * FROM pg_logical_get_area_changes('0/5ECBCD48', NULL, NULL, 'sql_decoding', NULL);
  location  |  xid  |                                       data
------------+-------+----------------------------------------------------------------------------------
 0/5ECBCD78 | 70718 | insert into public.t1 values (1, 1);
 0/5ECBCEA0 | 70718 | COMMIT 70718 (at 2023-11-01 10:58:51.448885+08) 39319
 0/5ECBCED0 | 70719 | delete from public.t1 where a = 1 and b = 1;insert into public.t1 values (1, 2);
 0/5ECBD028 | 70719 | COMMIT 70719 (at 2023-11-01 10:58:56.487796+08) 39320
 0/5ECBD210 | 70720 | delete from public.t1 where a = 1 and b = 2;
 0/5ECBD338 | 70720 | COMMIT 70720 (at 2023-11-01 10:58:58.856661+08) 39321
(6 rows)

--针对带有生成列的表的场景:
gaussdb=# CREATE TABLE t2(a int, b int GENERATED ALWAYS AS (a + 1) STORED);
CREATE TABLE
gaussdb=# SELECT pg_current_xlog_location();
 pg_current_xlog_location
--------------------------
 0/5F62CFE8
(1 row)

gaussdb=# INSERT INTO t2(a) VALUES(1);
INSERT 0 1
gaussdb=# UPDATE t2 set a = 2 where a = 1;
UPDATE 1
gaussdb=# DELETE FROM t2;
DELETE 1
gaussdb=# SELECT * FROM pg_logical_get_area_changes('0/5F62CFE8', NULL, NULL, 'sql_decoding', NULL, 'skip-generated-columns', 'on');
  location  |  xid  |                                data
------------+-------+---------------------------------------------------------------------
 0/5F62D0C8 | 71293 | insert into public.t2 values (1);
 0/5F62D1F0 | 71293 | COMMIT 71293 (at 2023-11-01 11:11:49.452044+08) 39516
 0/5F62D220 | 71294 | delete from public.t2 where a = 1;insert into public.t2 values (2);
 0/5F62D378 | 71294 | COMMIT 71294 (at 2023-11-01 11:11:54.327701+08) 39517
 0/5F62D408 | 71295 | delete from public.t2 where a = 2;
 0/5F62D530 | 71295 | COMMIT 71295 (at 2023-11-01 11:11:58.362057+08) 39518
(6 rows)

pg_get_replication_slots()

描述:获取复制槽列表。多租场景下,non-PDB调用该函数时返回全部信息,PDB调用该函数时返回本PDB的数据。

返回值类型:text、text、text、oid、boolean、xid、xid、text、boolean、text、xid、xid、text

示例:
gaussdb=# SELECT * FROM pg_get_replication_slots();
 slot_name |     plugin     | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush | confirmed_csn | dictionary_csn_min | slot_dictionary_type
-----------+----------------+-----------+--------+--------+------+--------------+-------------+---------------+-----------------+---------------+--------------------+----------------------
 dn_6002   |                | physical  |      0 | t      |      |              | 0/3622B528  | f             |                 |               |                    | 
 dn_6003   |                | physical  |      0 | t      |      |              | 0/3622B528  | f             |                 |               |                    | 
 slot_lsn  | mppdb_decoding | logical   | 131072 | f      |      |        66658 | 0/36252350  | f             | 0/362523D0      |               |               2627 | dictionary table
 slot_test | mppdb_decoding | logical   | 131072 | f      |      |        66658 | 0/36251718  | f             |                 |      10025527 |                    | online catalog
(4 rows)

备注:返回值的slot_name代表复制槽名,plugin代表逻辑复制槽对应的输出插件名称,slot_type代表复制槽的类型(physical代表物理复制槽,logical代表逻辑复制槽),datoid代表复制槽所在的数据库OID,active代表复制槽是否为激活状态(f代表未激活,t代表已激活),xmin代表数据库需为复制槽保留的最早事务的事务号,catalog_xmin代表数据库须为逻辑复制槽保留的最早的涉及系统表的事务的事务号,restart_lsn表示复制槽需要的最早xlog的物理位置,dummy_standby是预留参数,confirmed_flush代表客户端确认接收到的日志位置(逻辑复制槽专用),confirmed_csn代表客户端确认接收到的日志中最后一个事务对应的CSN(逻辑复制槽专用),dictionary_csn_min代表数据库须为逻辑复制槽保留的最早的涉及字典表的事务提交csn,slot_dictionary_type代表逻辑复制槽的类型。

在DN上执行查询,LSN序逻辑复制槽的confirmed_csn查询结果为空,CSN序逻辑复制槽的confirmed_flush查询结果为空。

gs_get_parallel_decode_status()

描述:监控各个解码线程的读取日志队列和解码结果队列的长度,以便定位并行解码性能瓶颈。多租场景下,non-PDB调用该函数时返回全部信息,PDB调用该函数时返回本PDB的数据。

表1 参数含义

字段名称

返回值类型

说明

slot_name

text

复制槽名。

parallel_decode_num

int4

该复制槽的并行解码线程数。

read_change_queue_length

text

每个解码线程读取日志队列的当前长度。

decode_change_queue_length

text

每个解码线程解码结果队列的当前长度。

reader_lsn

text

当前reader线程读取的日志位置。

working_txn_cnt

int8

当前拼接-发送线程中正在拼接的事务个数。

working_txn_memory

int8

拼接-发送线程中拼接事务占用总内存(单位为字节)。

decoded_time

TimestampTz

该复制槽最新解码到的WAL日志时间。

reader_toast_memory

int8

当前reader线程toast占用内存(单位为字节)。

large_transactions

text

当前复制槽解码的大事务信息(最大长度511字节)。

out_buf_memory

int8

当前sender线程使用的out buf占用内存(单位为字节)。

示例:
gaussdb=# SELECT * FROM gs_get_parallel_decode_status();
-[ RECORD 1 ]--------------+-------------------------------------------
slot_name                  | slot1
parallel_decode_num        | 4
read_change_queue_length   | queue0: 0, queue1: 0, queue2: 0, queue3: 0
decode_change_queue_length | queue0: 0, queue1: 0, queue2: 0, queue3: 0
reader_lsn                 | 0/DB2E4C0
working_txn_cnt            | 0
working_txn_memory         | 0
decoded_time               | 2024-04-26 09:57:48+08
reader_toast_memory        | 0
large_transactions         | [xid, first_lsn, memory, entry num] : NULL
out_buf_memory             | 0

decoded_time时间来自检查点日志和事务提交日志,存在一定误差。如果没有解码到任何前述包含时间的日志,则显示“2000-01-01 08:00:00+08”(依照数据库设置的时区而定)。

gs_get_slot_decoded_wal_time(slot_name)

描述:查看某个复制槽最新解码的WAL日志时间。多租场景下,non-PDB可以查看non-PDB或者PDB的某个复制槽信息,PDB调用该函数时返回本PDB某个复制槽的信息。

参数说明:

  • slot_name:

    要查询的复制槽名称。

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

示例:

gaussdb=# SELECT * FROM gs_get_slot_decoded_wal_time('replication_slot');
 gs_get_slot_decoded_wal_time
------------------------------
 2023-01-10 11:25:22+08
(1 row)

备注:返回一列值代表该复制槽最新解码到的WAL日志时间。

返回的时间来自检查点日志和事务提交日志,存在一定误差。如果没有解码到任何前述包含时间的日志,则显示“2000-01-01 08:00:00+08”(依照数据库设置的时区而定)。查询一个当前不存在的逻辑复制槽的最新解码的WAL日志时间时,返回NULL,在gsql中NULL显示和设置有关,可以使用\pset null 'null'设置。

gs_get_logical_decode_parameter()

描述:查询活跃的并行逻辑解码任务参数选项。多租场景下,non-PDB调用该函数时返回全部信息,PDB调用该函数时返回本PDB的数据。

表2 参数含义

字段名称

返回值类型

说明

slot_name

text

复制槽名。

include_xids

bool

解码信息是否包含xid。

include_timestamp

bool

解码信息是否包含时间戳。

skip_empty_xacts

bool

解码结果是否忽略空事务。

only_local

bool

是否只解码当前数据库产生的数据。

include_username

bool

事务的BEGIN日志是否包含用户名。

enable_ddl_decoding

bool

是否开启DDL语句的解码。

enable_ddl_json_format

bool

是否开启DDL的反解析json输出形式。

max_txn_in_memory

int64

事务占用内存最大值(该参数已废弃,不生效)。

max_reorderbuffer_in_memory

int64

当前解码任务最大内存值。

decode_style

char

解码格式。

parallel_decode_num

int64

并行解码的decoder线程数量。

sending_batch

int64

是否批量发送。

parallel_queue_size

int64

并行逻辑解码线程间进行交互的队列长度。

enable_heartbeat

bool

是否输出心跳日志。

slice_id

int64

复制表分片id。

output_start_csn

int64

开始输出的CSN位置。

output_start_lsn

int64

开始输出的LSN位置。

logical_reader_bind_cpu

int64

reader线程绑定CPU的编号。

logical_decoder_bind_cpu_index

int64

decoder线程绑定CPU的索引。

auto_advance

bool

是否自动推进。

skip_generated_columns

bool

是否跳过生成列的结果输出。

big_transaction_limit

int64

判断是否为大事务的内存使用限额(单位字节)。

exclUser

text

黑名单用户的名称列表。

table_white_list

text

白名单表参数。

示例:

test=# select * from gs_get_logical_decode_parameter();
-[ RECORD 1 ]--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
slot_name | slot1
configs   | include_xids: 1, include_timestamp: 1, skip_empty_xacts: 1, only_local: 1, include_username: 1, enable_ddl_decoding: 1, enable_ddl_json_format: 0, max_txn_in_memory: 3072, max_reorderbuffer_in_memory: 1, decode_style: j, parallel_decode_num: 4, sending_batch: 0, parallel_queue_size: 128, enable_heartbeat: 0, slice_id: -1, output_start_csn: 0, output_start_lsn: 0, logical_reader_bind_cpu: -1, logical_decoder_bind_cpu_index: -1, auto_advance: 0, skip_generated_columns: 0, big_transaction_limit: 10, exclUser: , table_white_list: 

gs_logical_parallel_decode_status('slot_name')

描述:获取并行逻辑解码某一复制槽的解码统计信息,包含26行指标。多租场景下,non-PDB调用该函数时返回PDB或者non-PDB的某一复制槽信息,PDB调用该函数时返回本PDB的某一复制槽的数据。

指标定义如下:

Record - (stat_id int, stat_name TEXT, value TEXT)
表3 指标含义

指标名称

说明

slot_name

逻辑解码任务复制槽名称。

reader_lsn

逻辑解码日志位置。

wal_read_total_time

日志模块加载耗时。

wal_wait_total_time

日志模块等待耗时。

parser_total_time

reader线程处理耗时。

decoder_total_time

各decoder线程处理耗时总值。

sender_total_time

sender线程处理耗时。

net_send_total_time

网络发送逻辑日志耗时。

net_wait_total_time

网络等待发送逻辑日志耗时。

net_send_total_bytes

网络发送逻辑日志字节数。

transaction_count

事务数量。

big_transaction_count

大事务数量。

max_transaction_tuples

事务操作元组的最大数量。

sent_transaction_count

发送事务数量(本库)。

spill_disk_transaction_count

落盘事务数量。

spill_disk_bytes

累计落盘字节数量,单位:byte。

spill_disk_count

落盘次数。

input_queue_full_count

各decode线程输入队列FULL次数总数。

output_queue_full_count

各decode线程输出队列FULL次数总数。

dml_count

各decode线程解码WAL日志中DML数量(本库)总数。

dml_filtered_count

各decode线程解码过滤WAL日志中DML数量(本库)总数。

toast_count

涉及TOAST表修改行数。

candidate_catalog_xmin

当前逻辑复制槽catalog_xmin候选点。

candidate_xmin_lsn

推进catalog_xmin所需要的日志确认接收点。

candidate_restart_valid

推进restart_lsn所需要的日志确认接收点。

candidate_restart_lsn

当前逻辑复制槽restart_lsn候选点。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及_?-.字符,且不支持“.”或“..”单独作为复制槽名称。

返回值类型:int、text、text

示例:

gaussdb=# SELECT * FROM gs_logical_parallel_decode_status('replication_slot'); 
 stat_id |          stat_name           |      value
---------+------------------------------+------------------
       1 | slot_name                    | replication_slot
       2 | reader_lsn                   | 0/357E180
       3 | wal_read_total_time          | 266694599
       4 | wal_wait_total_time          | 266691307
       5 | parser_total_time            | 39971
       6 | decoder_total_time           | 81216
       7 | sender_total_time            | 48193
       8 | net_send_total_time          | 19388
       9 | net_wait_total_time          | 0
      10 | net_send_total_bytes         | 266897
      11 | transaction_count            | 7
      12 | big_transaction_count        | 1
      13 | max_transaction_tuples       | 4096
      14 | sent_transaction_count       | 7
      15 | spill_disk_transaction_count | 1
      16 | spill_disk_bytes             | 244653
      17 | spill_disk_count             | 4096
      18 | input_queue_full_count       | 0
      19 | output_queue_full_count      | 0
      20 | dml_count                    | 4097
      21 | dml_filtered_count           | 0
      22 | toast_count                  | 0
      23 | candidate_catalog_xmin       | 17152
      24 | candidate_xmin_lsn           | 0/420A598
      25 | candidate_restart_valid      | 0/420A598
      26 | candidate_restart_lsn        | 0/420A598
(26 rows)

备注:按照指标定义,指标应该满足下列约束关系:

wal_read_total_time >= wal_wait_total_time;

transaction_count >= big_transaction_count;

transaction_count >= sent_transaction_count;

transaction_count >= spill_disk_transaction_count;

dml_count >= dml_filtered_count;

dml_count >= toast_count;

如果spill_transaction_count == 0,那么 spill_disk_bytes == 0;

但由于严格保证需要频繁加锁解锁,将对性能造成较大影响,故上面约束关系在多线程情况下可能不满足。

transaction_count统计的是所有库的事务数量。

sent_transaction_count统计的是本库的发送事务数量,因为非本库事务将不会被发送。

当传入不存在的slot_name时,函数不报错,返回值为空。

gs_logical_parallel_decode_reset_status('slot_name')

描述:重置gs_logical_parallel_decode_status('slot_name')中的指标。多租场景下,non-PDB可以重置PDB和non-PDB的复制槽指标,PDB重置PDB的复制槽指标。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

返回值类型:text

示例:

gaussdb=# SELECT * FROM gs_logical_parallel_decode_reset_status('replication_slot');
 gs_logical_parallel_decode_reset_status
-----------------------------------------
 OK
(1 row)

gaussdb=# SELECT * FROM gs_logical_parallel_decode_status('replication_slot');
 stat_id |          stat_name           |      value
---------+------------------------------+------------------
       1 | slot_name                    | replication_slot
       2 | reader_lsn                   | 0/357E420
       3 | wal_read_total_time          | 0
       4 | wal_wait_total_time          | 0
       5 | parser_total_time            | 0
       6 | decoder_total_time           | 0
       7 | sender_total_time            | 0
       8 | net_send_total_time          | 0
       9 | net_wait_total_time          | 0
      10 | net_send_total_bytes         | 0
      11 | transaction_count            | 0
      12 | big_transaction_count        | 0
      13 | max_transaction_tuples       | 0
      14 | sent_transaction_count       | 0
      15 | spill_disk_transaction_count | 0
      16 | spill_disk_bytes             | 0
      17 | spill_disk_count             | 0
      18 | input_queue_full_count       | 0
      19 | output_queue_full_count      | 0
      20 | dml_count                    | 0
      21 | dml_filtered_count           | 0
      22 | toast_count                  | 0
      23 | candidate_catalog_xmin       | 0
      24 | candidate_xmin_lsn           | 0/0
      25 | candidate_restart_valid      | 0/420A598
      26 | candidate_restart_lsn        | 0/420A598
(26 rows)

备注:传入不存在的slot_name时,函数不报错,返回值为invalid slot name。

不允许对正在进行observe的复制槽进行reset操作,异常信息按优先级如下:
  1. slot_name为空,报错,显示:ERROR: inputString should not be NULL。
  2. slot_name不为空,但不存在,不报错,显示:invalid slot name。
  3. slot_name不为空,但当前slot_name对应的复制槽正在被采样(observing),不报错,显示:can't reset during observing! use gs_logical_decode_stop_observe to stop。

gs_logical_decode_start_observe('slot_name', window, interval)

描述:开启逻辑复制性能指标采样。多租场景下,non-PDB可以开启PDB和non-PDB的逻辑复制性能指标采样,PDB只能开启PDB的逻辑复制性能指标采样。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • window

    指定采样窗口大小

    取值范围:整数类型,最小2, 最大1024,收集最近interval*window时间内采样数据。

  • interval

    性能监控的间隔,时间间隔类型,秒级。

    取值范围:时间间隔类型,最小1s,最大1min,收集最近interval*window时间内采样数据。

    返回值类型:text

示例:

gaussdb=# SELECT * FROM gs_logical_decode_start_observe('replication_slot',20,5);
 gs_logical_decode_start_observe 
---------------------------------
 OK
(1 row)

gaussdb=# select * from gs_logical_decode_start_observe('replication_slot',20,5);
 gs_logical_decode_start_observe 
---------------------------------
 observe has started!
(1 row)

备注:传入不存在的slot_name时,函数不报错,返回值为invalid slot name。

不允许对已经开启observe的复制槽进行开启observe操作,异常信息按优先级如下:
  1. slot_name为空,报错,显示:ERROR: inputString should not be NULL。
  2. slot_name不为空,但不存在,不报错,显示:invalid slot name。
  3. 若window小于2,则显示:window has to be >= 2。
  4. 若window大于1024,则显示:window has to be <= 1024。
  5. 若interval小于1S,则显示:sample interval has to be >= 1s。
  6. 若interval大于60S,则显示:sample interval has to be <= 60s。
  7. slot_name不为空,但当前slot_name对应的复制槽已开启observe,不报错,显示:observe has started!

gs_logical_decode_stop_observe('slot_name')

描述:停止逻辑复制性能指标采样。多租场景下,non-PDB可以停止PDB和non-PDB的逻辑复制性能指标采样,PDB只能停止PDB的逻辑复制性能指标采样。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • 返回值类型:text

示例:

gaussdb=# SELECT * FROM gs_logical_decode_stop_observe('replication_slot');
 gs_logical_decode_stop_observe 
--------------------------------
 OK
(1 row)

gaussdb=# SELECT * FROM gs_logical_decode_stop_observe('replication_slot');
 gs_logical_decode_stop_observe 
--------------------------------
 observe not started!
(1 row)

备注:传入不存在的slot_name时,函数不报错,返回值为invalid slot name。

不允许对已经停止observe的复制槽进行停止observe操作,异常信息按优先级如下:
  1. slot_name为空,报错,显示:ERROR: inputString should not be NULL。
  2. slot_name不为空,但不存在,不报错,显示:invalid slot name。
  3. slot_name不为空,但当前slot_name对应的复制槽已停止observe,不报错,显示:observe not started!

gs_logical_decode_observe_data('slot_name')

描述:展示逻辑复制性能指标采样原始数据。多租场景下,non-PDB调用该函数时返回PDB或者non-PDB的某一复制槽信息,PDB调用该函数时返回本PDB的某一复制槽的数据。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • 返回值类型:setof record

示例:

gaussdb=# SELECT * FROM gs_logical_decode_observe_data('replication_slot');
 slot_name |          sample_time          | reader_lsn | wal_read_total_time | wal_wait_total_time | parser_total_time | decoder_total_time | sender_total_time | net_send_total_time | net_send_total_bytes | transaction_count | big_
transaction_count | sent_transaction_count | spill_transaction_count | spill_disk_bytes 
-----------+-------------------------------+------------+---------------------+---------------------+-------------------+--------------------+-------------------+---------------------+----------------------+-------------------+-----
------------------+------------------------+-------------------------+------------------
 repl      | 2023-01-12 20:09:40.416798+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:09:45.416849+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:09:50.417006+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:09:55.417057+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:00.417115+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:05.417165+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:10.417217+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:15.417271+08 |   49447976 |           776846657 |           776846244 |                65 | {46,11,11,6}       |                56 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:20.417342+08 |   49448264 |           836085882 |           836085442 |                67 | {46,11,11,8}       |                58 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:25.417433+08 |   49448264 |           836085882 |           836085442 |                67 | {46,11,11,8}       |                58 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:30.417526+08 |   49448264 |           836085882 |           836085442 |                67 | {46,11,11,8}       |                58 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:35.417532+08 |   49448264 |           836085882 |           836085442 |                67 | {46,11,11,8}       |                58 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:40.417644+08 |   49448264 |           836085882 |           836085442 |                67 | {46,11,11,8}       |                58 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
 repl      | 2023-01-12 20:10:45.417763+08 |   49448264 |           836085882 |           836085442 |                67 | {46,11,11,8}       |                58 |                   0 |                    0 |                 0 |     
                0 |                      0 |                       0 |                0
(14 rows

备注:传入不存在的slot_name时,函数不报错,返回值为空记录。

gs_logical_decode_observe('slot_name')

描述:展示逻辑复制性能指标数据。多租场景下,在PDB内部仅展示本PDB逻辑复制性能指标数据,在Non-PDB可展示Non-PDB和PDB逻辑复制性能指标数据。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • 返回值类型:setof record

示例:

gaussdb=# SELECT * FROM gs_logical_decode_observe('replication_slot');
    slot_name     |          sample_time          | logical_decode_rate | wal_read_rate | parser_rate  |  decoder_rate  |  sender_rate  | net_send_rate 
------------------+-------------------------------+---------------------+---------------+--------------+----------------+---------------+---------------
 replication_slot | 2023-01-12 20:16:50.42448+08  | 0.000               | 0.000         | 0.000        | 0.000          | 0.000         | 0.000
 replication_slot | 2023-01-12 20:16:55.424537+08 | 0.000               | 0.000         | 0.000        | 0.000          | 0.000         | 0.000
 replication_slot | 2023-01-12 20:17:00.424641+08 | 0.000               | 0.000         | 0.000        | 0.000          | 0.000         | 0.000
 replication_slot | 2023-01-12 20:17:05.424645+08 | 0.000               | 0.000         | 0.000        | 0.000          | 0.000         | 0.000
 replication_slot | 2023-01-12 20:17:10.424795+08 | 0.000               | 0.000         | 0.000        | 0.000          | 0.000         | 0.000
 replication_slot | 2023-01-12 20:17:15.424848+08 | 0.000               | 0.000         | 0.000        | 0.000          | 0.000         | 0.000
 replication_slot | 2023-01-12 20:17:20.424849+08 | 57.600              | 699029.126    | 96000000.000 | 1152000000.000 | 144000000.000 | 0.000
 replication_slot | 2023-01-12 20:17:25.424959+08 | 0.000               | 699029.126    | 96000000.000 | 1152000000.000 | 144000000.000 | 0.000
 replication_slot | 2023-01-12 20:17:30.42496+08  | 0.000               | 699029.126    | 96000000.000 | 1152000000.000 | 144000000.000 | 0.000
 replication_slot | 2023-01-12 20:17:35.425059+08 | 0.000               | 699029.126    | 96000000.000 | 1152000000.000 | 144000000.000 | 0.000

备注:传入不存在的slot_name时,函数不报错,返回值为空记录。若分母为0,则返回最近一次有效数据。若分母不为0,分子为0,则返回0。

指标计算公式:

logical_decode_rate = (reader_lsn1 - reader_lsn2) / (sample_time1 - sample_time2)

wal_read_rate = (reader_lsn1 - reader_lsn2) / (wal_read_total_time1 - wal_read_total_time2) - (wal_wait_total_time1 - wal_wait_total_time2)

parser_rate = (reader_lsn1 - reader_lsn2) / (parser_total_time1 - parser_total_time2)

decoder_rate= (reader_lsn1 - reader_lsn2) / avg(decoder_total_time1[i]- decoder_total_time2[i])

sender_rate = (reader_lsn1 - reader_lsn2) / (sender_total_time1 - sender_total_time2) - (net_send_total_time1 - net_send_total_time2)

net_send_rate = (net_sent_bytes1 - net_sent_bytes2) / (net_send_total_time1 - net_send_total_time2) - (net_wait_total_time1 - net_wait_total_time2)

gs_logical_decode_observe_status('slot_name')

描述:查询指定逻辑解码任务的监控状态。多租场景下,在PDB内部仅查询本PDB逻辑解码任务的监控状态,在Non-PDB可查看Non-PDB和PDB逻辑解码任务的监控状态。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • 返回值类型:text

示例:

gaussdb=# SELECT * FROM gs_logical_decode_observe_status('replication_slot');
 gs_logical_decode_observe_status 
----------------------------------
 START
(1 row)

gaussdb=# SELECT * FROM gs_logical_decode_observe_status('replication_slot');
 gs_logical_decode_observe_status 
----------------------------------
 invalid slot name
(1 row)

gaussdb=# SELECT * FROM gs_logical_decode_stop_observe('replication_slot');
 gs_logical_decode_stop_observe 
--------------------------------
 OK
(1 row)

gaussdb=# SELECT * FROM gs_logical_decode_observe_status('replication_slot');
 gs_logical_decode_observe_status 
----------------------------------
 STOP
(1 row)

备注:传入不存在的slot_name时,函数不报错,返回值为invalid slot name。

gs_get_parallel_decode_thread_info()

描述:在并行解码所在的DN执行,返回当前DN上并行解码的线程信息。多租场景下,non-PDB调用该函数时返回全部信息,PDB调用该函数时返回本PDB的数据。

返回值类型:int64、text、text、int

示例:

gaussdb=# SELECT * FROM gs_get_parallel_decode_thread_info();
    thread_id    | slot_name | thread_type | seq_number
-----------------+-----------+-------------+------------
 140335364699904 | slot1     | sender      |          1
 140335214098176 | slot1     | reader      |          1
 140335325312768 | slot1     | decoder     |          1
 140335291750144 | slot1     | decoder     |          2
 140335274968832 | slot1     | decoder     |          3
 140335258187520 | slot1     | decoder     |          4
 140335165404928 | slot2     | sender      |          1
 140335022864128 | slot2     | reader      |          1
 140335129818880 | slot2     | decoder     |          1
 140335113037568 | slot2     | decoder     |          2
(10 rows)

备注:返回值thread_id代表线程id,slot_name代表复制槽名,thread_type表示线程种类(共三种,sender代表发送线程、reader代表读取线程、decoder代表解码线程),seq_number代表每个线程在当前复制槽中同种线程的序号。其中sender和reader在每个并行解码连接中均只有一个,因此序号均为1,decoder的序号从1排列到当前复制槽解码并行度。

pg_replication_origin_create (node_name)

描述:用给定的外部名称创建一个复制源,并且返回分配给它的内部ID。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • node_name

    待创建的复制源的名称。

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

返回值类型:oid

pg_replication_origin_drop (node_name)

描述:删除一个以前创建的复制源,包括任何相关的重放进度。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • node_name

    待删除的复制源的名称。

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

pg_replication_origin_oid (node_name)

描述:根据名称查找复制源并返回内部ID。如果没有发现这样的复制源,则抛出错误。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • node_name

    要查找的复制源的名称

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

返回值类型:oid

pg_replication_origin_session_setup (node_name)

描述:将当前会话标记为从给定的原点回放,从而允许跟踪回放进度。只能在当前没有选择原点时使用。使用pg_replication_origin_session_reset 命令来撤销。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • node_name

    复制源名称。

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

pg_replication_origin_session_reset ()

描述:取消pg_replication_origin_session_setup()的效果。

备注:调用该函数的用户需要具有SYSADMIN权限。

pg_replication_origin_session_is_setup ()

描述:如果在当前会话中选择了复制源则返回真。

备注:调用该函数的用户需要具有SYSADMIN权限。

返回值类型:boolean

pg_replication_origin_session_progress (flush)

描述:返回当前会话中选择的复制源的重放位置。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • flush

    决定对应的本地事务是否被确保已经写入磁盘。

    取值范围:boolean

返回值类型:LSN

pg_replication_origin_xact_setup (origin_lsn, origin_timestamp)

描述:将当前事务标记为重放在给定LSN和时间戳上提交的事务。只能在使用pg_replication_origin_session_setup选择复制源时调用。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • origin_lsn

    复制源回放位置。

    取值范围:LSN

  • origin_timestamp

    事务提交时间。

    取值范围:timestamp with time zone

pg_replication_origin_xact_reset ()

描述:取消pg_replication_origin_xact_setup()的效果。

备注:调用该函数的用户需要具有SYSADMIN权限。

pg_replication_origin_advance (node_name, lsn)

描述:

将给定节点的复制进度设置为给定的位置。这主要用于设置初始位置,或在配置更改或类似的变更后设置新位置。

注意:这个函数的使用不当可能会导致不一致的复制数据。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • node_name

    已有复制源名称。

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

  • lsn

    复制源回放位置。

    取值范围:LSN

pg_replication_origin_progress (node_name, flush)

描述:返回给定复制源的重放位置。

备注:调用该函数的用户需要具有SYSADMIN权限。

参数说明:

  • node_name

    复制源名称。

    取值范围:字符串,不支持除字母、数字以及“_”,“?”,“-”,“.”以外的字符。

  • flush

    决定对应的本地事务是否被确保已经刷入磁盘。

    取值范围:boolean

pg_show_replication_origin_status()

描述:获取复制源的复制状态。

备注:调用该函数的用户需要具有SYSADMIN权限。

返回值类型:

  • local_id:oid,复制源id。
  • external_id:text,复制源名称。
  • remote_lsn:LSN,复制源的lsn位置。
  • local_lsn:LSN,本地的lsn位置。

gs_get_distribute_decode_status()

描述:获取当前节点上解码状态细节(以复制槽为粒度),当前版本暂不支持,执行返回报错。

返回值类型:text、int、int、bigint、xid、xid、text、text、text

gs_get_distribute_decode_status_detail()

描述:获取当前节点上解码状态细节(以DN为粒度),当前版本暂不支持,执行返回报错。

返回值类型:text、int、bigint、int、int、xid

gs_logical_dictionary_baseline()

描述:执行逻辑解码数据字典的存量数据基线化,执行成功返回耗时,执行失败返回失败原因。在多租场景下,non-PDB内调用该函数,对所有non-PDB进行存量数据基线化;PDB内调用该函数,仅对当前会话的PDB进行存量数据基线化操作。

返回值类型:text

gs_logical_dictionary_disabled()

描述:关闭逻辑解码数据字典功能,停止增量DDL,执行成功返回OK,执行失败返回失败原因。在多租场景下,non-PDB内调用该函数,对所有non-PDB关闭逻辑解码数据字典功能;PDB内调用该函数,仅对当前会话的PDB关闭逻辑解码数据字典功能。

返回值类型:text

gs_logical_decode_lock()

描述:逻辑解码组件升级管理加锁接口,加锁成功返回t,失败返回f。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

参数说明:wait_time:加锁等待时间。取值范围:非负数,单位:秒;支持不传入参,不传入参,加锁等待时间为0秒,即不等待。

返回值类型:boolean

gs_logical_decode_unlock()

描述:逻辑解码组件升级管理放锁接口,无入参,放锁成功返回t,失败返回f。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

返回值类型:boolean

gs_logical_decode_gaussdb_version()

描述:逻辑解码组件查询接口,用来查看解码组件提交记录。无入参。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

返回值类型:text

gs_get_inter_cluster_version_info()

描述:查询主备数据库的版本号、逻辑解码组件的版本以及复制类型(逻辑复制或者物理复制)。无入参。双集群大版本滚动升级内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。返回5列,第一列remote_working_version为远端内核版本号;第二列remote_logical_decoding_version为远端解码组件版本号;第三列local_working_version为当前节点内核版本号;第四列local_logical_decoding_version为当前节点解码组件版本号;第五列replication_type为复制类型(“logic”为逻辑复制,“physic”为物理复制)。

返回值类型:int、text、int、text、text

gs_get_logical_decoding_version()

描述:查看当前逻辑解码组件版本和基线的逻辑解码组件版本。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

参数说明:

  • current:查看当前逻辑解码组件版本;
  • basic:查看基线的逻辑解码组件版本。

返回值类型:text

gs_add_logical_decoding_position_xlog()

描述:执行该函数后会生成XLOG_STANDBY_DECODE_POSITION类型的Xlog日志。该日志会被当前数据库上的解码任务读取,用于反馈解码位置。具有sysadmin、replication或opradmin权限的用户才能调用该函数,否则调用失败。该函数执行频率依据数据库统计,按节点控制每个数据库调用该系统函数的频率,调用最小间隔为1秒。

返回值类型:text

gs_prepare_logical_standby_on_primary()

描述:主节点做物理转逻辑准备,将逻辑备等元数据写入物理日志。无入参,返回uuid。内部使用功能,仅管理员用户可以执行,不建议用户使用。在有长事务未提交的情况下执行会导致长时间无法返回。多租场景下,该函数在PDB内部禁用。

返回值类型:text

gs_get_logical_standby_meta_for_switchover()

描述:逻辑容灾switchover降备节点准备逻辑备所需的元数据,无入参,无返回值。内部使用功能,仅管理员用户可以执行,不建议用户使用。多租场景下,该函数在PDB内部禁用。

备注:该函数为逻辑容灾下的高危操作函数。该函数会在数据目录下生成逻辑备机状态文件,在非逻辑集群switchover下执行该函数会导致数据库实例状态异常。

返回值类型:text

gs_get_logical_standby_info()

描述:查询逻辑备的元数据。无入参,返回5列,第一列:逻辑备当前confirmed_csn;第二列:逻辑备当前restart_lsn;第三列:restart_lsn对应的校验和;第四列:restart_lsn记录的长度;第五列:uuid代表每个版本元数据的唯一标识。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

返回值类型:text

gs_get_logical_data_dictionary_column_num()

描述:获取解码数据字典的版本信息。无入参,返回值共2列,第一列:数据字典系统表名,第二列:数据字典表的列数。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

返回值类型:text

gs_get_current_lgc_state()

描述:获取当前逻辑备机状态。无入参。内部使用功能,不建议用户使用。多租场景下,该函数在PDB内部禁用。

返回值类型:text

gs_stop_sqlapply()

描述:手动停止逻辑备机,停止后需使用gs_start_sqlapply()系统函数再次启动;手动停止后,即使参数sql_apply_autorun为on,当前逻辑备机也不会继续重新启动。多租场景下,该函数在PDB内部禁用。

返回值类型:boolean

gs_start_sqlapply()

描述:手动启动逻辑备机。多租场景下,该函数在PDB内部禁用。

返回值类型:boolean

gs_get_sqlapply_replaying_status()

描述:查询逻辑备当前回放状态的信息。多租场景下,该函数在PDB内部禁用。

表4 参数含义

字段名称

说明

oldest_commited_txn_xid

当前已提交事务中最晚提交事务的xid。

oldest_commited_txn_csn

当前已提交事务中最晚提交事务的csn。

oldest_commited_txn_sn

当前已提交事务中最晚提交事务的sequence number。

restart_lsn

当前逻辑备机restart_lsn。

confirmed_csn

当前逻辑备机confirmed_csn。

playback_confirmed_csn

逻辑备回放文件中,数组head位置对应事务的confirmed_csn。

last_sec_replay_txn_cnt

上一秒回放事务数。

conflict_record_start_txn_sn

冲突检测记录修改行的起始事务编号。

conflict_record_total_num

冲突检测记录修改行的总数量。

max_committed_txn_sn

已提交事务的最大编号。

schedule_txn_xid

当前调度事务xid。

schedule_txn_sn

当前调度事务编号。

schedule_txn_commit_csn

当前调度事务commit_csn。

schedule_txn_depend_txn_max_sn

当前调度事务依赖事务的最大编号。

schedule_txn_number

当前调度事务次数。

replay_txn_total_number

回放事务总数。

replay_txn_total_time

回放所有事务总耗时。单位:微秒。

replay_txn_max_time

回放单个事务的最大耗时。单位:微秒。

replay_txn_max_change_number

回放单个事务的变更最大数量。

wait_schedule_txn_count

事务调度的等待次数。

wait_schedule_txn_total_time

事务调度的等待耗时。单位:微秒。

free_sqlapply_worker_count

空闲回放线程数量。

need_analyze_txn_count

analyzer线程队列中待并行分析的事务数量。

need_schedule_txn_count

dispatcher线程队列中待调度事务的数量。

is_dispatcher_suspended

dispatcher线程是否处于挂起状态。

dispatcher_suspended_start_time

dispatcher线程进入挂起状态的起始时间。

log_receive_thread_restart_times

逻辑回放日志接收线程重启次数。

sqlapply_failover_status

逻辑回放当前failover状态。

取值范围:

  • FAILOVER_INIT:尚未执行failover,初始状态。
  • FAILOVER_NOTICE_KILL:通知wal receiver退出。
  • FAILOVER_CHECK_SQL_APPLY_END:检查逻辑备是否退出。
  • FAILOVER_COPY_XLOG:failover拷贝日志。
  • FAILOVER_SUCCESS:failover成功。

sqlapply_cache_session_count

逻辑回放缓存的会话数量。

sqlapply_recycle_log_ptr

逻辑回放上次回收日志位点。

sqlapply_receive_log_ptr

逻辑回放已接收的日志位点。

sqlapply_end_ptr

逻辑回放failover(或switchover)结束位点。

sqlapply_decode_log_read_ptr

逻辑回放解码日志读取位点。

sqlapply_decode_txn_max_commit_csn

逻辑回放已解码的事务最大commit_csn。

sqlapply_init_dorado_write_log_ptr

failover(或switchover)初始化dorado盘日志写入位点。

sqlapply_failover_start_time

逻辑回放failover(或switchover)的起始时间。

sqlapply_logical_init_time

逻辑备初始化的时间。

sqlapply_thread_status

sqlapply当前线程状态。

sqlapply_manual_stop

sqlapply是否手动停止标识。

示例:

gaussdb=# SELECT * FROM gs_get_sqlapply_replaying_status();
 stat_id |             stat_name              |              value               
---------+------------------------------------+----------------------------------
       1 | oldest_commited_txn_xid            | 51675053
       2 | oldest_commited_txn_csn            | 51676580
       3 | oldest_commited_txn_sn             | 50847157
       4 | restart_lsn                        | 1A/5E9E2560
       5 | confirmed_csn                      | 829423
       6 | playback_confirmed_csn             | 51676492
       7 | last_sec_replay_txn_cnt            | 554
       8 | conflict_record_start_txn_sn       | 50841174
       9 | conflict_record_total_num          | 8645
      10 | max_committed_txn_sn               | 50847156
      11 | schedule_txn_xid                   | 51675057
      12 | schedule_txn_sn                    | 50847160
      13 | schedule_txn_commit_csn            | 51676583
      14 | schedule_txn_depend_txn_max_sn     | 50841174
      15 | schedule_txn_number                | 1784642
      16 | replay_txn_total_number            | 1784638
      17 | replay_txn_total_time              | 8644147345
      18 | replay_txn_max_time                | 511107457
      19 | replay_txn_max_change_number       | 2
      20 | wait_schedule_txn_count            | 674
      21 | wait_schedule_txn_total_time       | 4482
      22 | free_sqlapply_worker_count         | 0
      23 | need_analyze_txn_count             | 511
      24 | need_schedule_txn_count            | 511
      25 | is_dispatcher_suspended            | false
      26 | dispatcher_suspended_start_time    | 2024-07-31T23:06:33.676173+08:00
      27 | log_receive_thread_restart_times   | 1
      28 | sqlapply_failover_status           | FAILOVER_INIT
      29 | sqlapply_cache_session_count       | 4
      30 | sqlapply_recycle_log_ptr           | 1A/5DEA26A8
      31 | sqlapply_receive_log_ptr           | 1A/6CFD3218
      32 | sqlapply_end_ptr                   | 0
      33 | sqlapply_decode_log_read_ptr       | 1A/5EDB2038
      34 | sqlapply_decode_txn_max_commit_csn | 51677694
      35 | sqlapply_init_dorado_write_log_ptr | 0
      36 | sqlapply_failover_start_time       | 0
      37 | sqlapply_logical_init_time         | 0
      38 | sqlapply_thread_status             | SQLAPPLY_THREAD_START
      39 | sqlapply_manual_stop               | NO                                                                                                                                                  (39 rows)

gs_get_sqlapply_playback_progress()

描述:查询逻辑备回放文件中数组信息。查询结果为当前逻辑备回放文件中head位置至tail位置的远端事务信息。head位置之前所有的远端事务均已回放,tail为当前数组中最新需要回放的远端事务,head至tail之前的远端事务则存在已回放或者尚未回放的事务。多租场景下,该函数在PDB内部禁用。

备注:若当前数据库实例不为逻辑备,则查询出的结果不准确,部分字段为默认值。

表5 参数含义

字段名称

说明

xid

当前远端事务的xid。

sequence_number

当前回放的远端事务序号。

remote_csn

当前远端事务的csn。

begin_time

当前远端事务在逻辑备机开始回放的时间。

end_time

当前远端事务在逻辑备机结束回放的时间。

status

远端事务在逻辑备机是否已经回放完毕,t代表回放完毕,f代表尚未回放

示例:

gaussdb=# SELECT * FROM gs_get_sqlapply_playback_progress();
  xid   | sequence_number | remote_csn |          begin_time           |           end_time            | status 
--------+-----------------+------------+-------------------------------+-------------------------------+--------
 254203 |             215 |     192108 | 2024-06-17 11:25:36.72872+08  | 2024-06-17 11:25:36.728941+08 | t
 254204 |             216 |     192109 | 2024-06-17 11:25:36.771637+08 | 2024-06-17 11:25:36.771723+08 | t
 254205 |             217 |     192110 | 2024-06-17 11:25:36.771663+08 | 2024-06-17 11:25:36.771854+08 | t
 254206 |             218 |     192111 | 2024-06-17 11:25:36.771777+08 | 2024-06-17 11:25:36.771977+08 | t
 254207 |             219 |     192112 | 2024-06-17 11:25:36.771902+08 | 2024-06-17 11:25:36.772105+08 | t
(5 rows)

gs_change_replication_slot_plugin('slot_name', 'plugin_name')

描述:修改逻辑复制槽插件类型。多租场景下,该函数在PDB内部禁用。

参数说明:

  • slot_name

    流复制槽名称。

    取值范围:字符串,仅支持小写字母、数字以及“_”,“?”,“-”,“.”字符,且不支持“.”或“..”单独作为复制槽名称。

  • plugin_name

    插件名称。

    取值范围:字符串,当前支持mppdb_decoding、sql_decoding、parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding。

返回值类型:boolean,默认值为true。

示例:

查询当前复制槽信息:

gaussdb=# SELECT * FROM pg_get_replication_slots();
 slot_name |          plugin          | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush | confirmed_csn | dictionary_csn_min | slot_dictionary_type 
-----------+--------------------------+-----------+--------+--------+------+--------------+-------------+---------------+-----------------+---------------+--------------------+----------------------
 slot1     | parallel_json_decoding   | logical   |  12834 | f      |      |              | 0/125A15E0  | f             | 0/125E84D0      |               |               7787 | dictionary table
 slot2     | parallel_binary_decoding | logical   |  12834 | f      |      |              | 0/E9C71B0   | f             | 0/E9CA638       |               |               3860 | dictionary table
 slot3     | parallel_text_decoding   | logical   |  12834 | f      |      |              | 0/E9D96D0   | f             | 0/EEE6508       |               |               3867 | dictionary table
 slot4     | mppdb_decoding           | logical   |  12834 | f      |      |              | 0/E9AFC38   | f             | 0/EEE6508       |               |               3853 | dictionary table
(4 rows)

修改复制槽类型:

gaussdb=# SELECT * FROM gs_change_replication_slot_plugin('slot1', 'mppdb_decoding');
 gs_change_replication_slot_plugin 
-----------------------------------
 t
(1 row)

再次查询复制槽信息:

gaussdb=# SELECT * FROM pg_get_replication_slots();
 slot_name |          plugin          | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush | confirmed_csn | dictionary_csn_min | slot_dictionary_type 
-----------+--------------------------+-----------+--------+--------+------+--------------+-------------+---------------+-----------------+---------------+--------------------+----------------------
 slot1     | mppdb_decoding           | logical   |  12834 | f      |      |              | 0/125A15E0  | f             | 0/125E84D0      |               |               7787 | dictionary table
 slot2     | parallel_binary_decoding | logical   |  12834 | f      |      |              | 0/E9C71B0   | f             | 0/E9CA638       |               |               3860 | dictionary table
 slot3     | parallel_text_decoding   | logical   |  12834 | f      |      |              | 0/E9D96D0   | f             | 0/EEE6508       |               |               3867 | dictionary table
 slot4     | mppdb_decoding           | logical   |  12834 | f      |      |              | 0/E9AFC38   | f             | 0/EEE6508       |               |               3853 | dictionary table
(4 rows)

gs_logicalstandby_skip(stmt text, dbname text, schema text, object text, dump text)

描述:配置逻辑回放可跳过对象的规则。仅管理员用户在容灾备数据库主机上可以执行,用于处理逻辑回放阻塞问题。多租场景下,该函数在PDB内部禁用。

对于不同规则,即stmt、dbname、schema、object至少有一项与已配置规则不同,调用该函数可用于增加新规则配置。

对于相同规则,即stmt、dbname、schema、object均与某已配置规则相同,调用该函数可用于更新dump值。

参数说明:

  • stmt

    跳过回放的语句类型。

    取值范围:字符串,支持类型参考表6
    表6 跳过事务支持的语句类型(一级/二级)

    一级语句类型

    二级语句类型

    dml

    insert/update/delete

  • dbname

    跳过回放操作所在的数据库名称。

    取值范围:字符串,与CREATE DATABASE中database_name取值范围保持一致。

  • schema

    跳过回放操作所在的模式名称。

    取值范围:字符串,与CREATE SCHEMA中schema_name取值范围保持一致。

  • object

    跳过回放操作具体的对象名称(目前仅支持数据库表名)。

    取值范围:字符串。

  • dump

    记录事务详细信息方式。

    取值范围:字符串,支持类型如下:all-记录整个事务详细信息 no-不记录事务详细信息 skip-记录事务跳过变更的详细信息。

    该参数可缺省,缺省值为skip。

返回值类型:boolean,默认值为true。

示例:

  • 设置规则:跳过systest数据库、public视图、t1数据表的全部dml语句,dump类型为all。
    gaussdb=# SELECT gs_logicalstandby_skip('dml', 'systest', 'public', 't1', 'all');
     gs_logicalstandby_skip 
    ------------------------
     t
    (1 row)
  • 设置规则:跳过systest数据库、schema_test视图、t2数据表的insert语句,dump缺省。
    gaussdb=# SELECT gs_logicalstandby_skip('insert', 'systest', 'schema_test', 't2');
     gs_logicalstandby_skip 
    ------------------------
     t
    (1 row)

gs_logicalstandby_unskip(stmt text, dbname text, schema text, object text)

描述:取消逻辑回放可跳过对象的规则。仅管理员用户在容灾备数据库主机上可以执行,用于取消逻辑回放可跳过规则。多租场景下,该函数在PDB内部禁用。

参数说明:

  • stmt

    跳过回放的语句类型。

    取值范围:字符串,支持类型参考表 跳过事务支持的语句类型(一级/二级)说明。

  • dbname

    跳过回放操作所在的数据库名称。

    取值范围:字符串,与CREATE DATABASE中database_name取值范围保持一致。

  • schema

    跳过回放操作所在的模式名称。

    取值范围:字符串,与CREATE SCHEMA中schema_name取值范围保持一致。

  • object

    跳过回放操作具体的对象名称(目前仅支持数据库表名)。

    取值范围:字符串。

返回值类型:boolean,默认值为true。

示例:

  • 取消规则:跳过systest数据库、public视图、t1数据表的全部dml语句。
    gaussdb=# SELECT gs_logicalstandby_unskip('dml', 'systest', 'public', 't1');
     gs_logicalstandby_unskip 
    --------------------------
     t
    (1 row)

gs_logicalstandby_skip_txn(csn int64, xid int64, dump text)

描述:配置逻辑回放可跳过事务的规则。仅管理员用户在容灾备数据库主机上可以执行,用于处理逻辑回放阻塞问题。多租场景下,该函数在PDB内部禁用。

对于不同规则,即csn、xid至少有一项与已配置规则不同,调用该函数可用于增加新规则配置。

对于相同规则,即csn、xid均与某已配置规则相同,调用该函数可用于更新dump值。

参数说明:

  • csn

    跳过事务的提交序号。

    取值范围:1~2^63-1间的64位整数。

  • xid

    跳过事务标识。

    取值范围:3~2^63-1间的64位整数。

  • dump

    记录事务详细信息方式。

    取值范围:字符串,支持类型如下:all-记录整个事务详细信息 no-不记录事务详细信息 skip-记录事务跳过变更的详细信息。

    该参数可缺省,缺省值为skip。

    该系统函数dump值的'all'与'skip'配置等价。

返回值类型:boolean,默认值为true。

示例:

  • 设置规则:跳过事务提交序号123456、事务标识345678、dump类型为all。
    gaussdb=# SELECT gs_logicalstandby_skip_txn(123456, 345678, 'all');
     gs_logicalstandby_skip_txn 
    ----------------------------
     t
    (1 row)
  • 设置规则:跳过事务提交序号123456、事务标识345678、dump缺省。
    gaussdb=# SELECT gs_logicalstandby_skip_txn(123456, 345678);
     gs_logicalstandby_skip_txn 
    ----------------------------
     t
    (1 row)

gs_logicalstandby_unskip_txn(csn int64, xid int64)

描述:取消逻辑回放可跳过事务的规则。仅管理员用户在容灾备数据库主机上可以执行,用于取消逻辑回放可跳过规则。多租场景下,该函数在PDB内部禁用。

参数说明:

  • csn

    跳过事务的提交序号。

    取值范围:1~2^63-1间的64位整数。

  • xid

    跳过事务标识。

    取值范围:3~2^63-1间的64位整数。

返回值类型:boolean,默认值为true。

示例:

  • 取消规则:跳过事务提交序号123456、事务标识345678。
    gaussdb=# SELECT gs_logicalstandby_unskip_txn(123456, 345678);
     gs_logicalstandby_unskip_txn 
    ------------------------------
     t
    (1 row)

gs_logicalstandby_skip_err(stmt text, dbname text, schema text, object text, dump text)

描述:配置逻辑回放可跳过报错语句所在事务的规则。仅管理员用户在容灾备数据库主机上可以执行,用于处理逻辑回放阻塞问题。多租场景下,该函数在PDB内部禁用。

对于不同规则,即stmt、dbname、schema、object至少有一项与已配置规则不同,调用该函数可用于增加新规则配置。

对于相同规则,即stmt、dbname、schema、object均与某已配置规则相同,调用该函数可用于更新dump值。

参数说明:

  • stmt

    跳过回放的语句类型。

    取值范围:字符串,支持类型参考表 跳过事务支持的语句类型(一级/二级)说明。

  • dbname

    跳过回放操作所在的数据库名称。

    取值范围:字符串,与CREATE DATABASE中database_name取值范围保持一致。

  • schema

    跳过回放操作所在的模式名称。

    取值范围:字符串,与CREATE SCHEMA中schema_name取值范围保持一致。

  • object

    跳过回放操作具体的对象名称(目前仅支持数据库表名)。

    取值范围:字符串。

  • dump

    记录事务详细信息方式。

    取值范围:字符串,支持类型如下:

    • all:记录整个事务详细信息。
    • no:不记录事务详细信息。
    • skip:记录事务跳过变更的详细信息。

    该参数可缺省,缺省值为skip。

返回值类型:boolean,默认值为true。

示例:

  • 设置规则:跳过systest数据库、public视图、t1数据表的dml执行出错语句,dump类型为all。
    gaussdb=# SELECT gs_logicalstandby_skip_err('dml', 'systest', 'public', 't1', 'all');
     gs_logicalstandby_skip_err 
    ----------------------------
     t
    (1 row)
  • 设置规则:跳过systest数据库、schema_test视图、t2数据表的insert执行出错语句,dump缺省。
    gaussdb=# SELECT gs_logicalstandby_skip_err('insert', 'systest', 'schema_test', 't2');
     gs_logicalstandby_skip_err 
    ----------------------------
     t
    (1 row)

gs_logicalstandby_unskip_err(stmt text, dbname text, schema text, object text)

描述:取消逻辑回放可跳过报错语句所在事务的规则。仅管理员用户在容灾备数据库主机上可以执行,用于取消逻辑回放可跳过规则。多租场景下,该函数在PDB内部禁用。

参数说明:

  • stmt

    跳过回放的语句类型。

    取值范围:字符串,支持类型请参见表 跳过事务支持的语句类型(一级/二级)说明。

  • dbname

    跳过回放操作所在的数据库名称。

    取值范围:字符串,与CREATE DATABASE中database_name取值范围保持一致。

  • schema

    跳过回放操作所在的模式名称。

    取值范围:字符串,与CREATE SCHEMA中schema_name取值范围保持一致。

  • object

    跳过回放操作具体的对象名称(目前仅支持数据库表名)。

    取值范围:字符串。

返回值类型:boolean,默认值为true。

示例:

  • 取消规则:跳过systest数据库、public视图、t1数据表的dml执行出错语句。
    gaussdb=# SELECT gs_logicalstandby_unskip_err('dml', 'systest', 'public', 't1');
     gs_logicalstandby_unskip_err 
    ------------------------------
     t
    (1 row)

相关文档