更新时间:2026-07-28 GMT+08:00
分享

逻辑解码选项

逻辑解码选项可以用来为本次逻辑解码提供限制或额外功能,如“解码结果是否包含事务号”、“解码时是否忽略空事务”等。对于具体配置方法,SQL函数解码请参考《参考》中“SQL参考 > 函数和操作符 > 系统管理函数 > 逻辑复制函数”章节中函数pg_logical_slot_peek_changes的可选入参'options_name'和'options_value',JDBC流式解码请参考逻辑复制(非透明多写)章节示例代码中函数withSlotOption的使用方法。

通用选项

串行解码和并行解码均可配置,但可能无效,请参考相关选项详细说明。

  • include-xids:

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

    取值类型:boolean型

    取值范围:

    • false:解码出的data列不包含xid信息。
    • true:解码出的data列包含xid信息。

    默认值:true

  • skip-empty-xacts:

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

    取值类型:boolean型

    取值范围:

    • false:解码时不忽略空事务信息。
    • true:解码时会忽略空事务信息。

    默认值:false

  • include-timestamp:

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

    取值类型:boolean型

    取值范围:

    • false:解码信息不包含commit时间戳。
    • true:解码信息包含commit时间戳。

    默认值:针对并行解码场景默认值为false,针对SQL函数解码和串行解码场景默认值为true。

  • only-local:

    是否仅解码本地日志。

    取值类型:boolean型

    取值范围:

    • false:解码非本地日志和本地日志。
    • true:仅解码本地日志(即RepOriginId为0时,该参数具体信息详见《参考》中“数据库运行参数说明 > GUC参数说明 > 双数据库实例复制参数”章节)。

    默认值:true

  • white-table-list:

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

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

    SELECT * FROM pg_logical_slot_peek_changes('slot1', NULL, 4096, 'white-table-list', 'public.t1,public.t2,*.t3,my_schema.*');
    • 在对失效视图执行ALTER VIEW语句时,逻辑解码会记录该语句,此时white-table-list参数无效,即无论视图定义语句中查询的表是否在白名单列表中,失效视图的ALTER VIEW语句均会被解码。
    • 视图失效重编译请参见失效重编译章节。
    • 若白名单内表长期无业务则会导致复制槽的restart_lsn不推进引发WAL日志堆积,可以通过周期性调用gs_add_logical_decoding_position_xlog()系统函数进行解决。
  • max-txn-in-memory:

    内存管控参数,单个事务占用内存大于该值即进行落盘,并行解码中该参数已废弃使用,不生效。

    取值单位:MB

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

    并行解码-取值范围:0~max_process_memory总量的25%,默认值为max_process_memory/4/1024,其中1024为kB到MB的单位转换,0表示不开启此条内存管控项。

  • max-reorderbuffer-in-memory

    内存管控参数,拼接-发送线程中正在拼接的事务总内存(包含缓存)大于该值则对当前解码事务进行落盘。并行解码中该参数已废弃使用,不生效。

    取值单位:GB

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

    并行解码-取值范围:1~max_process_memory总量的50%,默认值为1与max_process_memory/1048576*10%较大值,其中1048576为KB到GB的单位转换。

  • desc-memory-limit

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

    取值类型:整型

    取值单位:MB

    取值范围:10~1048576

    默认值:200

    从内核505.2.1.SPC0900以下版本升级到当前版本后部分场景可能会出现性能下降情况,按照最佳实践调参,最佳实践如下:

    1. desc-memory-limit设置为100MB时可以支撑此场景:1000张热点表,平均100字段,平均50个分区,平均每10分钟产生1个新的历史版本(例如对表执行DDL修改表结构、autovacuum修改pg_class中元组的reloptions字段)。
    2. 其中任一指标若有增加,需要根据增加倍数扩大参数值,例如在2000张热点表,平均200个字段,平均每5分钟产生1个新的历史版本的场景,则需要将desc-memory-limit设置为100*2*2*2=800MB。
  • include-user:

    事务的BEGIN逻辑日志是否输出事务的用户名。事务的用户名特指授权用户(执行事务对应会话的登录用户),它在事务的整个执行过程中不会发生变化。

    取值类型:boolean型

    取值范围:

    • false:事务的BEGIN逻辑日志不输出事务的用户名。
    • true:事务的BEGIN逻辑日志输出事务的用户名。

    默认值:false

  • exclude-userids:

    黑名单用户的OID参数。

    取值类型:字符串类型

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

  • exclude-users:

    黑名单用户的名称列表。

    取值类型:字符串类型

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

  • dynamic-resolution:

    是否动态解析黑名单用户名。如果解码某条Xlog,且Xlog写入时,用户未创建,则认为用户不存在。

    取值类型:boolean型

    取值范围:

    • false:当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码;当用户存在,黑名单功能正常过滤用户的操作。
    • true:当解码观测到黑名单exclude-users中用户不存在时不报错,并正常解码;当用户存在,黑名单功能正常过滤用户的操作。

    默认值:true

  • standby-connection:

    仅流式解码设置,是否仅限制备机解码。

    取值类型:boolean型

    取值范围:

    • true:仅允许连接备机解码,连接主机解码时会报错退出。
    • false:不做限制,允许连接主机或备机解码。

    默认值:false

    如果主机资源使用率较大,且业务对增量数据同步的实时性不敏感,建议进行备机解码;如果业务对增量数据同步的实时性要求高,并且主机业务压力较小,建议使用主机解码。

  • sender-timeout:

    仅流式解码设置,GaussDB与客户端的心跳超时阈值。如果该时间段内没有收到客户端任何消息,逻辑解码将主动停止,并断开和客户端的连接。

    取值类型:整型

    取值单位:毫秒(ms)

    取值范围:0~2147483647

    默认值:取决于GUC参数logical_sender_timeout的配置值。配置为0,表示逻辑解码不会主动断开和客户端的连接,如果设置过小,例如1ms,则可能存在解码任务中断风险。

    sender-timeout为心跳检测的阈值。一旦检测超时,系统将自动重试;若重试失败,则主动断开连接并终止解码任务。

  • change-log-max-len:

    逻辑日志缓存长度上限参数,仅并行解码有效,串行解码及SQL函数解码无效。如果单条解码结果长度超过上限,则会销毁重新分配大小为1024字节的内存并缓存。过长会增加内存占用,过短会频繁触发内存申请和释放的操作,不建议设置成小于1024的值。

    取值单位:字节

    取值范围:1~65535

    默认值:4096

  • max-decode-to-sender-cache-num:

    并行解码日志的缓存条数阈值,仅并行解码有效,串行解码及SQL函数解码无效。本地缓存的日志条数,本地缓存日志个数不足时,从全局缓存获取。

    取值范围:1~65535

    默认值:8192

    启动解码任务时,受max-queue-cache-num参数控制上限值。前向兼容性:启动时该参数设置小于8192时,启动解码任务时会自动调整max-decode-to-sender-cache-num,并后台打印提示日志信息。

  • enable-heartbeat:

    仅流式解码设置,代表是否输出心跳日志。

    取值类型:boolean型

    取值范围:

    • true:输出心跳日志。
    • false:不输出心跳日志。

    默认值:false

    若开启心跳日志选项,此处说明并行解码场景心跳日志如何解析:二进制格式首先是字符'h'表示消息是心跳日志,之后是心跳日志内容,分别是8字节uint64代表LSN,表示发送心跳逻辑日志时读取的WAL日志结束位置;8字节uint64代表LSN,表示发送心跳逻辑日志时刻已经落盘的WAL日志的位置;8字节int64代表时间戳(从1970年1月1日开始),表示最新解码到的事务日志或检查点日志的产生时间戳。关于消息结束符:如果是二进制格式则为字符'F',如果格式为TEXT或者JSON且为批量发送则结束符为0,否则没有结束符。具体解析见下图:

  • parallel-decode-num:

    仅流式解码设置有效,并行解码的Decoder线程数量;系统函数调用场景下此选项无效,仅校验取值范围。

    取值类型:整型

    取值范围:1~20,取1表示按照原有的串行逻辑进行解码,取其余值即为开启并行解码。

    默认值:1

    当parallel-decode-num不配置(即为默认值1)或显式配置为1时,下述“并行解码”中的选项不可配置。

  • output-order:

    仅流式解码设置有效,代表是否使用CSN顺序输出解码结果;系统函数调用场景下此选项无效,仅校验取值范围。

    取值类型:整型

    取值范围:

    • 0:解码结果按照事务的COMMIT LSN排序,当且仅当解码复制槽的confirmed_csn列值为0(即逻辑复制槽为LSN序复制槽)时可使用该方式,否则报错。
    • 1:解码结果按照事务的CSN排序,当且仅当解码复制槽的confirmed_csn列值为非零时可使用该方式,否则报错。

    默认值:0

  • auto-advance:

    仅流式解码设置有效,代表是否允许自主推进逻辑复制槽。

    取值类型:boolean型

    取值范围:

    • true:在已发送日志都被确认推进且没有待发送事务时,推进逻辑复制槽到当前解码位置。
    • false:完全交由复制业务调用日志确认接口推进逻辑复制槽。

    默认值:false

  • enable-ddl-decoding:

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

    取值类型:boolean型

    取值范围:

    • true:开启DDL语句的逻辑解码。
    • false:不开启DDL语句的逻辑解码。

    默认值:false

  • enable-ddl-json-format:

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

    取值类型:boolean型

    取值范围:

    • true:传送JSON格式的DDL反解析结果。
    • false:传送decode-style指定格式的DDL反解析结果。decode-style='j'时,则输出TEXT格式。

    默认值:false

  • skip-generated-columns:

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

    取值类型:boolean型

    取值范围:

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

    默认值:false/off

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

  • restart-lsn:

    逻辑解码控制参数,用于指定解码开始点,逻辑解码会从restart-lsn该点往后找到一个一致性点(consistency lsn),然后从consistency lsn点开始解码并输出数据。

    取值类型:字符串类型

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

    1. 推荐设置复制选项restart-lsn时,不设置复制参数startposition。
    2. 当复制选项restart-lsn和复制参数startposition同时使用时,restart-lsn必须小于startposition,且根据restart-lsn查找到的一致性点的confirm_flush也需要小于等于startposition,防止startposition点之后的事务漏发。
    3. 当设置复制选项restart-lsn,不设置复制参数startposition时,根据restart-lsn查找到的一致性点进行解码并输出数据,若设置复制参数startposition时,根据restart-lsn查找到的一致性点进行解码,以startposition位置向客户端发送数据。
    4. 仅多版本数据字典类型的复制槽才支持该选项。
  • timezone-is-utc:

    逻辑解码控制参数,用于控制携带时区的时间类型数据的输出(例如:A、B兼容下的timestamptz类型,M兼容的timestamp类型)。该参数仅对流式解码有效,函数解码使用该参数会忽略不生效。

    取值类型:boolean型

    取值范围:

    • true:解码时间类型数据输出0时区的时间。
    • false:解码时间类型数据输出当前数据库时区的时间。

    默认值:false

  • decode-sequence:

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

    取值类型:boolean型

    取值范围:

    • true:输出sequence值的变更日志的解码结果。
    • false:不输出sequence值的变更日志的解码结果。

    默认值:false

    解码选项decode-sequence仅支持在同城双中心&同城双中心加流式复制的异地容灾滚动升级解决方案场景中,在GUC参数sqlapply_logical_decode_options中将默认值设置为true。不支持在解码启动时、或者GUC参数logical_decode_options_default中将decode-sequence设置为true,若如此做启动解码时将报错退出。

  • enable-decode-position:

    逻辑解码控制参数,该参数主要控制逻辑解码读取到解码位置日志时,是否发送该位置日志信息。

    取值类型:boolean型

    取值范围:

    • true:发送位置日志。
    • false:不发送位置日志。

    默认值:false

    此处说明并行解码场景下解码位置日志如何解析。二进制格式首先是字符'L',表示消息是解码位置日志,之后是位置日志内容,依次为:8字节uint64代表CSN,表示发送解码位置日志时对应的CSN值;8字节uint64代表LSN或者CSN,当逻辑复制槽为LSN序时,表示发送解码位置日志时刻的WAL日志的位置,当复制槽为CSN序时,表示发送解码位置日志时对应的CSN值;4字节uint32代表时间戳(从1970年1月1日开始),表示调用gs_add_logical_decoding_position_xlog系统函数时产生的时间戳。关于消息结束符:如果是二进制格式则为字符'F',如果格式为TEXT或者JSON且为批量发送则结束符为0,否则没有结束符。具体解析详见图1
    图1 心跳协议格式
  • white-table-list1, white-table-list2, white-table-list3, white-table-list4, white-table-list5, white-table-list6, white-table-list7, white-table-list8, white-table-list9:

    白名单扩展参数,功能与white-table-list一致,包含需要进行解码的Schema名和表名。该参数仅对流式解码有效,SQL函数解码不支持。

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

  • data-limit

    逻辑解码输出数据量控制参数。

    在GUC参数logical_decode_options_default中设置时,取值范围:【0, 100】的整数。单位:GB。默认值:10。取值为0时,表示不限制解码结果大小。

    GUC参数设置需与pg_logical_get_area_changes函数中data-limit入参配合使用,具体请参见《参考》中“SQL参考 > 函数和操作符 > 系统管理函数 > 逻辑复制函数”章节“pg_logical_get_area_changes”函数详细说明。

  • enable-rowno

    逻辑解码控制参数,该参数用以控制解码包含rowid系统列的无主键表且REPLICA IDENTITY选项明确设置为FULL或者实际效果等同于FULL时,是否输出INSERT/UPDATE/DELETE操作中新元组和旧元组的rowno系统列。使用该选项输出rowno系统列,请确保目标库中存在名称和类型相同的列,否则回放逻辑解码日志可能失败。如有疑问,请联系华为技术工程师提供技术支持。

    取值类型:boolean型

    取值范围:

    • true:输出rowno系统列。
    • false:不输出rowno系统列。

    默认值:false

    • 该选项对sql_decoding插件无效。
    • REPLICA IDENTITY选项的实际效果等同于FULL目前指的是Ustore表的NOTHING和DEFAULT选项,详情参见 《参考》中“ SQL参考 > SQL语法 > A > ALTER TABLE”章节中REPLICA IDENTITY选项的说明。

串行解码

  • force-binary:

    是否以二进制格式输出解码结果,针对不同场景呈现不同行为。

    • 针对系统函数pg_logical_slot_get_binary_changes和pg_logical_slot_peek_binary_changes:

      取值范围:boolean型,默认值为false。此值无实际意义,均以二进制格式输出解码结果。

    • 针对系统函数pg_logical_slot_get_changes、pg_logical_slot_peek_changes和pg_logical_get_area_changes:

      取值范围:仅取false值的boolean型。以文本格式输出解码结果。

    • 针对流式解码:

      取值范围:boolean型,默认值为false。此值无实际意义,均以文本格式输出解码结果。

并行解码

以下配置选项仅限流式解码设置。
  • decode-style:

    当enable-ddl-json-format参数值为true时,DDL的格式由enable-ddl-json-format控制,decode-style仅指定DML语句的解码格式;当enable-ddl-json-format参数值为false时,decode-style指定DML和DDL语句的解码格式。decode-style='j'时,DDL输出TEXT格式,DML采用decode-style指定的JSON格式。

    取值范围:char型的字符'j'、't'或'b',分别代表JSON格式、TEXT格式及二进制格式。

    默认值:
    • 没有指定decode-style:

      针对复制槽插件类型为mppdb_decoding、sql_decoding,decode-style默认值为'b'即二进制格式解码。针对复制槽插件类型为parallel_binary_decoding、parallel_json_decoding、parallel_text_decoding,decode-style默认值分别为'b'、'j'、't',解码格式分别为二进制格式、JSON格式、TEXT格式。

    • 指定decode-style:

      按照指定的decode-style进行解码。

    对于JSON格式和TEXT格式解码,开启批量发送选项时的解码结果中,每条解码语句的前4字节组成的uint32代表该条语句总字节数(不包含该uint32类型占用的4字节,0代表本批次解码结束),8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。

    例如:以mppdb_decoding插件为例,当decode-style为b类型时,以二进制格式解码,结果如下:
    current_lsn: 0/CFE5C80 BEGIN CSN: 2357 first_lsn: 0/CFE5C80
    current_lsn: 0/CFE5D40 INSERT INTO public.test1 new_tuple: {a[typid = 23]: "1", b[typid = 23]: "2"}
    current_lsn: 0/CFE5E68 COMMIT xid: 78108
    当decode-style为j类型时,以JSON格式解码,结果如下:
    BEGIN CSN: 2358 first_lsn: 0/CFE6220
    {"table_name":"public.test1","op_type":"INSERT","columns_name":["a","b"],"columns_type":["integer","integer"],"columns_val":["3","3"],"old_keys_name":[],"old_keys_type":[],"old_keys_val":[]}
    COMMIT XID: 78109
    当decode-style为t类型时,以TEXT格式解码,结果如下:
    BEGIN CSN: 2359 first_lsn: 0/CFE64D0
    table public test1 INSERT: a[integer]:3 b[integer]:4
    COMMIT XID: 78110

    二进制格式编码规则如下所示:

    1. 前4字节代表接下来到语句级别分隔符字母P(不含)或者该批次结束符F(不含)的解码结果的总字节数,该值如果为0代表本批次解码结束。
    2. 接下来8字节uint64代表相应lsn(begin对应first_lsn,commit对应end_lsn,其他场景对应该条语句的lsn)。
    3. 接下来1字节的字母有5种B/C/I/U/D,分别代表begin/commit/insert/update/delete。
    4. 3步字母为B时:
      1. 接下来的8字节uint64代表CSN。
      2. 接下来的8字节uint64代表first_lsn。
      3. 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示该事务commit时间戳长度,再后面等同于该长度的字符为时间戳字符串。
      4. 【该部分为可选项】接下来的1字节字母如果为N,则代表后面4字节uint32表示该事务用户名的长度,再后面等同于该长度的字符为事务的用户名字。
      5. 因为之后仍可能有解码语句,接下来会有1字节字母P或F作为语句间的分隔符,P代表本批次仍有解码的语句,F代表本批次解码完成。
    5. 3步字母为C时:
      1. 【该部分为可选项】接下来1字节字母如果为X,则代表后面的8字节uint64表示xid。
      2. 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示时间戳长度,再后面等同于该长度的字符为时间戳字符串。
      3. 因为批量发送日志时,一个COMMIT日志解码之后可能仍有其他事务的解码结果,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。
    6. 3步字母为I/U/D时:
      1. 接下来的2字节uint16代表Schema名的长度。
      2. 按照上述长度读取Schema名。
      3. 接下来的2字节uint16代表table名的长度。
      4. 按照上述长度读取table名。
      5. 【该部分为可选项】接下来1字节字母如果为N代表为新元组,如果为O代表为旧元组,这里先发送新元组。
        1. 接下来的2字节uint16代表该元组需要解码的列数,记为attrnum。
        2. 以下流程重复attrnum次。
          1. 接下来2字节uint16代表列名的长度。
          2. 按照上述长度读取列名。
          3. 接下来4字节uint32代表当前列类型的OID。
          4. 接下来4字节uint32代表当前列值(以字符串格式存储)的长度。如果为0xFFFFFFFE则表示该列为rowno系统列,实际rowno系统列长度为8字节;如果为0xFFFFFFFF则表示NULL;如果为0则表示长度为0的字符串。
          5. 按照上述长度读取列值,其中rowno系统列请按照8字节读取。
      6. 因为之后仍可能有解码语句,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。
  • sending-batch:

    指定是否批量发送。

    取值类型:整型

    取值范围:

    • 0:逐条发送解码结果。
    • 1:解码结果累积到达1MB则批量发送解码结果。

    默认值:0

    开启批量发送的场景中,当解码格式为'j'或't'时,在原来的每条解码语句之前会附加一个uint32类型,表示本条解码结果长度(长度不包含当前的uint32类型),以及一个uint64类型,表示当前解码结果对应的lsn。

    在CSN序解码(即output-order设置为1)场景下,批量发送仅限于单个事务内(即如果一个事务有多条较小的语句会采用批量发送),即不会使用批量发送功能在同一批次里发送多个事务,且BEGIN和COMMIT语句不会批量发送。

  • parallel-queue-size:

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

    取值类型:整型

    取值范围:2~1024,且必须为2的整数幂。

    默认值:128

    队列长度和解码过程的内存使用量正相关。

  • logical-reader-bind-cpu:

    reader线程绑定cpu核号的参数。

    取值类型:整型

    取值范围:-1~65535,不使用该参数则为不绑核。

    默认值:-1,即为不绑核。-1不可手动设置,核号应确保在机器总逻辑核数以内,不然会返回报错。多个线程绑定同一个核会导致该核负担加重,从而导致性能下降。

  • logical-decoder-bind-cpu-index:

    逻辑解码线程绑定cpu核号的参数。

    取值类型:整型

    取值范围:-1~65535,不使用该参数则为不绑核。

    默认值:-1,即为不绑核。-1不可手动设置,核号应确保在机器总逻辑核数以内且小于[cpu核数 - 并行逻辑解码数],不然会返回报错。

    从给定的核号参数开始,新拉起的线程会依次递增加一。

    多个线程绑定同一个核会导致该核负担加重,从而导致性能下降。

    GaussDB在进行逻辑解码和日志回放时,会占用大量的CPU资源,相关线程如Walwriter、WalSender、WALreceiver、pageredo就处于性能瓶颈,如果能将这些线程绑定在固定的CPU上运行,可以减少因操作系统调度线程频繁切换CPU,导致缓存未命中带来的性能开销,从而提高流程处理速度,如用户场景有性能需求,可根据以下的绑核样例进行配置优化。

    • 参数样例:
      1. walwriter_cpu_bind=1
      2. walwriteraux_bind_cpu=2
      3. wal_receiver_bind_cpu=4
      4. wal_rec_writer_bind_cpu=5
      5. wal_sender_bind_cpu_attr='cpuorderbind:7-14'
      6. redo_bind_cpu_attr='cpuorderbind:16-19'
      7. logical-reader-bind-cpu=20
      8. logical-decoder-bind-cpu-index=21
    • 样例中1.2.3.4.5.6通过GUC工具设置。walwriter_cpu_bind、walwriteraux_bind_cpu、wal_receiver_bind_cpu、wal_rec_writer_bind_cpu、wal_sender_bind_cpu_attr参数具体说明,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 预写式日志 > 设置”章节。redo_bind_cpu_attr参数具体说明,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > 预写式日志 > 日志回放”章节。

      样例中7.8通过JDBC客户端发起解码请求时添加。

    • 样例中如walwriter_cpu_bind=1是限定该线程在1号CPU上运行。

      cpuorderbind:7-14意为拉起的每个线程依次绑定7号到14号CPU,如果范围内的CPU用完,则新拉起的线程不参与绑核。

      logical-decoder-bind-cpu-index意为拉起的线程从21号CPU依次开始绑定,后续拉起的线程分别绑定21、22、23,依次类推。

    • 绑核的原则是一个线程占用一个CPU。
    • 不恰当的绑核,例如将多个线程绑定在一个CPU上很有可能带来性能劣化。
    • 可以通过lscpu指令查看“CPU(s):”得知自己环境的CPU逻辑核心数。

    CPU逻辑核心数低于36则不建议使用此套绑核策略,此时建议使用默认配置(不进行参数设置)。

    • big-transaction-limit:

      指定并行逻辑解码大事务的内存限额。

      取值类型:整型

      取值单位:MB

      取值范围:1~200

      默认值:10

      用于内存资源管控时判定大事务,用于优先落盘。

    • max-logical-decode-memory

      并行解码内存管控参数,并行解码任务的总内存(包含缓存)大于该值则对当前解码事务进行落盘。

      取值类型:整型

      取值单位:GB

      取值范围:6~1024

      默认值:6

      启动解码任务时,受max-control-memory-size参数控制上限值。

      • 在JSON解码格式下,由于JSON的树状结构特性,内存可能短暂升高,建议设置为10GB。若设置为6GB,可能会出现短时超6GB的现象,此为预期情况。解码完成后,临时内存将被释放,整体内存不会超过max-logical-decode-memory。解码格式相关设置详见decode-style参数说明。
      • 业务中处理大TOAST场景时,逻辑解码任务内存参数建议配置:max-logical-decode-memory = 线程并行度 * 1GB + 10GB,如果计算的max-logical-decode-memory参数大于max-control-memory-size,需同时在GUC参数logical_decode_options_default中调整max-control-memory-size大小
      • 设置时建议不超过max_dynamic_memory总量的50%,否则解码任务占用内存过高,导致在线业务申请内存失败。
    • max-control-memory-size

      并行解码内存管控参数max-logical-decode-memory的上限值控制参数。

      取值类型:整型

      取值单位:GB

      取值范围:6~1024

      默认值:10

      如果启动参数max-logical-decode-memory设置值超过该值,启动解码任务时会自动调整max-logical-decode-memory参数值,并输出提示信息到系统日志中。

      • 解码选项max-control-memory-size仅支持在GUC参数logical_decode_options_default中设置,如果在启动解码任务时设置该参数,将报错退出。
      • 设置时建议不超过max_process_memory总量的50%,否则解码任务过程中存在申请内存溢出风险。
    • max-toast-memory-size

      并行解码toast内存管控参数。并行解码任务中,读取Xlog中toast字段的内存使用上限值,超过该值则对当前解码事务的toast数据进行落盘。

      取值类型:整型

      取值单位:MB

      取值范围:100~1048576

      默认值:100

      解码选项max-toast-memory-size仅支持在GUC参数logical_decode_options_default中设置,如果在启动解码任务时设置该参数,将报错退出。

    • max-queue-cache-num

      并行解码参数max-decode-to-sender-cache-num的上限值控制参数。

      取值类型:整型

      取值单位:个数

      取值范围:8192~65535

      默认值:16384

      如果启动参数max-decode-to-sender-cache-num设置值超过该值,启动解码任务时会自动调整max-decode-to-sender-cache-num参数值,并输出提示信息到系统日志中。

      解码选项max-queue-cache-num仅支持在GUC参数logical_decode_options_default中设置,如果在启动解码任务时设置该参数,将报错退出。

相关文档