
# 逻辑解码选项
逻辑解码选项可以用来为本次逻辑解码提供限制或额外功能，如"解码结果是否包含事务号"、"解码时是否忽略空事务"等。对于具体配置方法，SQL函数解码请参见《参考》中"SQL参考 \> 函数和操作符 \> 系统管理函数 \> 逻辑复制函数"章节中函数pg_logical_slot_peek_changes的可选入参'options_name'和'options_value'，JDBC流式解码请参见[逻辑复制（非透明多写）](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0100.html)章节示例代码中函数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.*');
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 在对失效视图执行ALTER VIEW语句时，逻辑解码会记录该语句，此时white-table-list参数无效，即无论视图定义语句中查询的表是否在白名单列表中，失效视图的ALTER VIEW语句均会被解码。
  
  - 视图失效重编译请参见[失效重编译](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0775.html)章节。
  
  - 若白名单内表长期无业务则会导致复制槽的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，即不开启此种管控。
  并行解码-取值范围：0\~max_process_memory总量的50%，默认值为max_process_memory/2/1048576，其中1048576为kB到GB的单位转换，0表示不开启此条内存管控项。
  
- desc-memory-limit 内存管控参数，逻辑解码任务维护的表元信息总内存大于该值时，触发淘汰机制清理部分表元信息。
  取值类型：整型
  取值单位：MB
  取值范围：10\~1048576
  默认值：200
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  从内核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参数，该参数只支持直连DN解码任务配置，分布式CN强一致解码不支持该参数。
  取值类型：字符串类型
  取值范围：指定黑名单用户的OID，多个OID通过','分隔，不校验用户OID是否存在。
  
- exclude-users： 黑名单用户的名称列表。
  取值类型：字符串类型
  取值范围：指定黑名单用户名，通过','分隔，不校验用户名是否存在。
  
- dynamic-resolution： 是否动态解析黑名单用户名。如果解码某条Xlog，且Xlog写入时，用户未创建，则认为用户不存在。
  取值类型：boolean型
  取值范围：
  - false：当解码观测到黑名单exclude-users中用户不存在时将会报错并退出逻辑解码；当用户存在，黑名单功能正常过滤用户的操作。
  
  - true：当解码观测到黑名单exclude-users中用户不存在时不报错，并正常解码；当用户存在，黑名单功能正常过滤用户的操作。
  
  
  默认值：true
  
- standby-connection： 仅流式解码设置，是否仅限制备机解码，因为CN没有备机，所以该参数在仅连接DN时支持。
  取值类型：boolean型
  取值范围：
  - true：仅允许连接备机解码，连接主机解码时会报错退出。
  
  - false：不做限制，允许连接主机或备机解码。
  
  
  默认值：false
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  如果主机资源使用率较大且业务对增量数据同步的实时性不敏感，建议进行备机解码；如果业务对增量数据同步的实时性要求高并且主机业务压力较小，建议使用主机解码。
  
- sender-timeout： 仅流式解码设置，GaussDB与客户端的心跳超时阈值。如果该时间段内没有收到客户端任何消息，逻辑解码将主动停止，并断开和客户端的连接。
  取值类型：整型
  取值单位：毫秒（ms）
  取值范围：0\~2147483647
  默认值：取决于GUC参数logical_sender_timeout的配置值。设置为0，表示逻辑解码不会主动断开与客户端的连接，如果设置过小，例如1ms，则可能存在解码任务中断风险。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  sender-timeout为心跳检测的阈值。一旦检测超时，系统将自动重试；若重试失败，则主动断开连接并终止解码任务。
  
- change-log-max-len: 逻辑日志缓存长度上限参数。仅连接DN的并行解码有效，分布式强一致解码、串行解码及SQL函数解码无效。如果单条解码结果长度超过上限，则会销毁重新分配大小为1024字节的内存并缓存。过长会增加内存占用，过短会频繁触发内存申请和释放的操作，不建议设置成小于1024的值。
  取值单位：字节
  取值范围：1\~65535
  默认值：4096
  
- max-decode-to-sender-cache-num: 并行解码日志的缓存条数阈值。仅连接DN的并行解码有效，分布式强一致解码、串行解码及SQL函数解码无效。本地缓存的日志条数，本地缓存日志个数不足时，从全局缓存获取。
  取值范围：1\~65535
  默认值：8192
  启动解码任务时，并行解码日志的缓存条数受max-queue-cache-num参数上限值控制。前向兼容性：若该参数值设置小于8192，启动解码任务时会自动调整max-decode-to-sender-cache-num参数值，并输出提示信息到系统日志中。
  
- enable-heartbeat： 仅流式解码时设置，代表是否输出心跳日志。
  取值类型：boolean型
  取值范围：
  - true：设为true时，输出心跳日志。
  
  - false：设为false时，不输出心跳日志。
  
  
  默认值：false
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  若开启心跳日志选项，此处说明并行解码场景心跳日志如何解析：二进制格式首先是字符'h'表示消息是心跳日志，之后是心跳日志内容，分别是8字节uint64，直连DN解码场景代表LSN，表示发送心跳逻辑日志时读取的WAL日志结束位置，而在分布式强一致解码场景为CSN，表示发送心跳逻辑日志时已发送的解码日志事务CSN；8字节uint64，直连DN解码场景代表LSN，表示发送心跳逻辑日志时刻已经落盘的WAL日志的位置，而在分布式强一致解码场景为CSN，表示集群下一个提交事务将获得的CSN；8字节int64代表时间戳（从1970年1月1日开始），表示最新解码到的事务日志或检查点日志的产生时间戳。关于消息结束符：如果是二进制格式则为字符'F'，如果格式为TEXT或者JSON且为批量发送则结束符为0，否则没有结束符。消息内容采用大端字节序进行数据传输。具体格式见下图（考虑到前向兼容性，相关部分仍保留着LSN的命名方式，实际含义依具体场景而定）：
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002590360874.png "点击放大")
  
- parallel-decode-num： 仅流式解码设置有效，并行解码的Decoder线程数量；系统函数调用场景下此选项无效，仅校验取值范围。
  取值类型：整型
  取值范围：1\~20，取1表示按照原有的串行逻辑进行解码，取其余值即为开启并行解码。
  默认值：1
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  当parallel-decode-num不配置（即为默认值1）或显式配置为1时，下述"并行解码"中的选项不可配置。
  
- output-order： 仅流式解码设置有效，代表是否使用CSN顺序输出解码结果；系统函数调用场景下此选项无效，仅校验取值范围。
  取值类型：整型
  取值范围：
  - 0：解码结果按照事务的COMMIT LSN排序，当且仅当解码复制槽的confirmed_csn列值为0（即逻辑复制槽为LSN序复制槽）时可使用该方式，否则报错。
  
  - 1：解码结果按照事务的CSN排序，当且仅当解码复制槽的confirmed_csn列值为非零时可使用该方式，否则报错。
  
  
  默认值：0
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 当output-order不配置（即默认值为0，按照COMMIT LSN排序）或显式配置为0时，下述"分布式强一致解码"中的选项不可配置。
  
  - 在流式解码场景，DN收到来自CN的逻辑解码连接时，output-order选项失效，默认采用CSN序解码。
    
- auto-advance：
  仅流式解码设置有效，代表是否允许自主推进逻辑复制槽。
  取值类型：boolean型
  取值范围：
  - true：在已发送日志都被确认推进且没有待发送事务时，推进逻辑复制槽到当前解码位置。
  
  - false：完全交由复制业务调用日志确认接口推进逻辑复制槽。
  
  
  默认值：false
  
- skip-generated-columns： 逻辑解码控制参数，用于跳过存储生成列的输出。对UPDATE和DELETE的旧元组无效，相应元组始终会输出存储生成列。分布式版本暂不支持存储生成列，CN解码不支持配置此选项。
  取值类型：boolean型
  取值范围：
  - true/on：不输出存储生成列的解码结果。
  
  - false/off：输出存储生成列的解码结果。
  
  
  默认值：false/off
  虚拟生成列不受此参数控制，DML的解码结果始终不会输出虚拟生成列。
  
- 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
  
- timezone-is-utc： 逻辑解码控制参数，用于控制携带时区的时间类型数据的输出（例如：ORA、MYSQL兼容下的timestamptz类型，M兼容的timestamp类型）。该参数仅对流式解码有效，函数解码使用该参数会忽略不生效。
  取值类型：boolean型
  取值范围：
  - true：解码时间类型数据输出0时区的时间。
  
  - false：解码时间类型数据输出当前数据库时区的时间。
  
  
  默认值：false
  
- decode-sequence： 逻辑解码控制参数，用来指定是否输出sequence值的变更日志的解码结果。
  取值类型：boolean型
  取值范围：
  - true：暂不支持设置。
  
  - false：不输出sequence值的变更日志的解码结果。
  
  
  默认值：false
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  解码选项decode-sequence当前仅允许设置为false，设置为true会在启动解码时报错退出。
  
 
- enable-decode-position： 逻辑解码控制参数，该参数主要控制逻辑解码读取到解码位置日志时，是否向客户端发送该位置日志信息。
  取值类型：boolean型
  取值范围：
  - true：发送位置日志。
  
  - false：不发送位置日志。
  
  
  默认值：false
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  此处说明并行解码场景下解码位置日志如何解析：二进制格式首先是字符'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心跳协议格式   
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/figure/zh-cn_image_0000002620720449.png "点击放大") 
- 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
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 该选项对sql_decoding插件无效。
  
  - REPLICA IDENTITY选项的实际效果等同于FULL目前指的是Ustore表的NOTHING和DEFAULT选项，详情参见《参考》中"SQL参考 \> SQL语法 \> A \> ALTER TABLE"章节中REPLICA IDENTITY选项的说明。
    
- enable-cn-decode 逻辑解码控制参数，该参数用以控制解码是否开启CN解码，CN解码默认关闭，需要直连DN解码。
  取值类型：boolean型
  取值范围：
  - true/on：开启CN解码。
  
  - false/off：关闭CN解码。
  
  
  默认值：false/off，新安装的数据库的默认值。该参数为507.0.0版本新增参数，从507.0.0之前版本升级到当前版本后此参数默认值为false/off，如果升级前存在CN解码任务，升级后需要打开该参数，否则启动CN解码任务会报错。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  该选项仅支持在GUC参数logical_decode_options_default中设置，默认关闭，如要开启该参数，请联系华为技术工程师。
  
#### 分布式强一致解码
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
当前版本请使用直连DN解码，分布式强一致解码（CN解码）功能默认关闭，如有需要请联系华为工程师评估后打开enable-cn-decode参数。
- logical-receiver-num： 仅流式解码设置有效，分布式解码启动的logical_receiver数量，系统函数调用场景下此选项无效，仅校验取值范围。
  取值类型：整型
  取值范围：1\~20
  默认值：1。当该值被设置为比当前集群分片数更大时，将被修改为分片数。
  
- slice-id： 仅连接DN解码时设置，指定当前DN所在的分片号，用于复制表解码。
  取值类型：整型
  取值范围：0\~8192
  默认值：-1，即不指定分片号，但在解码到复制表时会报错。
  
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
该配置选项在尝试连接DN使用CSN序逻辑复制槽（confirmed_csn为非0值的复制槽）进行解码时使用，用来表示自己的分片号（即第几个分片，第一个分片则输入0），如果不设置该参数（即使用默认值-1）在解码到复制表时将会报错。此参数用于使用连接CN的分布式解码时，CN从DN收集解码结果时使用，CN只会收集指定DN分片的复制表解码结果。不建议在此场景下手动连接DN解码。
- start-position： 仅连接DN设置，主要功能为过滤掉小于指定CSN对应的事务，以及针对指定的CSN对应的事务，过滤掉小于指定LSN的日志，且指定CSN对应事务的BEGIN日志一定被过滤掉。
  取值类型：字符串类型
  取值范围：可以解析为以'/'分隔，左右两侧分别为代表CSN和LSN的两个uint64类型。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/caution_3.0-zh-cn.png)
  该配置选项用于CN解码时，CN建立与DN的连接后发送解码请求时使用此配置选项过滤可能已经被接收过的日志。不建议在此场景下手动连接DN解码使用此参数。
  
 
#### 串行解码
- 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型。以文本格式输出解码结果。
    
  
  - 针对流式解码（仅连接DN时支持）： 取值范围：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
  ```
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  二进制格式编码规则如下所示：
  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。
  
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
在CSN序解码（即output-order设置为1）场景下，批量发送仅限于单个事务内（即如果一个事务有多条较小的语句会采用批量发送），即不会使用批量发送功能在同一批次里发送多个事务，且BEGIN和COMMIT语句不会批量发送。
- parallel-queue-size： 指定并行逻辑解码线程间进行交互的队列长度。
  取值类型：整型
  取值范围：2\~1024，且必须为2的整数幂。
  默认值：128
  队列长度和解码过程的内存使用量正相关。
  
- max-logical-decode-memory 并行解码内存管控参数，并行解码任务的总内存（包含缓存）大于该值时则对当前解码事务进行落盘。仅连接DN的并行解码有效，分布式强一致解码、串行解码及SQL函数解码无效。
  取值类型：整型
  取值单位：GB
  取值范围：6\~1024
  默认值：6
  启动解码任务时，受max-control-memory-size参数控制上限值。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 在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的上限值控制参数。仅连接DN的并行解码有效，分布式强一致解码、串行解码及SQL函数解码无效。
  取值类型：整型
  取值单位：GB
  取值范围：6\~1024
  默认值：10
  如果启动参数max-logical-decode-memory设置值超过该值，启动解码任务时会自动调整max-logical-decode-memory参数值，并输出提示信息到系统日志中。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  - 解码选项max-control-memory-size仅支持在GUC参数logical_decode_options_default中设置，如果在启动解码任务时设置该参数，将报错退出。
  
  - 设置时建议不超过max_process_memory总量的50%，否则解码任务过程中存在申请内存溢出风险。
    
- max-toast-memory-size 并行解码toast内存管控参数。并行解码任务中，读取Xlog中toast字段的内存使用上限值，超过该值则对当前解码事务的toast数据进行落盘。仅连接DN的并行解码有效，分布式强一致解码、串行解码及SQL函数解码无效。
  取值类型：整型
  取值单位：MB
  取值范围：100\~1048576
  默认值：100
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  解码选项max-toast-memory-size仅支持在GUC参数logical_decode_options_default中设置，如果在启动解码任务时设置该参数，将报错退出。
  
- max-queue-cache-num 并行解码参数max-decode-to-sender-cache-num的上限值控制参数。仅连接DN的并行解码有效，分布式强一致解码、串行解码及SQL函数解码无效。
  取值类型：整型
  取值单位：个数
  取值范围：8192\~65535
  默认值：16384
  如果启动参数max-decode-to-sender-cache-num设置值超过该值，启动解码任务时会自动调整max-decode-to-sender-cache-num参数值，并输出提示信息到系统日志中。
  ![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
  解码选项max-queue-cache-num仅支持在GUC参数logical_decode_options_default中设置，如果在启动解码任务时设置该参数，将报错退出。
  
 
