云数据库 GAUSSDB-逻辑解码选项:并行解码

时间:2025-03-03 09:50:30

并行解码

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

      指定解码格式。

      取值范围:char型的字符'j'、't'或'b',分别代表json格式,text格式及二进制格式。默认值为'b'即二进制格式解码。

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

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

    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.接下来1字节的字母有5种B/C/I/U/D,...步字母为B时。
      1. 接下来的8字节uint64代表 CS N。
      2. 接下来的8字节uint64代表first_lsn。
      3. 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示该事务commit时间戳长度,再后面等同于该长度的字符为时间戳字符串。
      4. 【该部分为可选项】接下来的1字节字母如果为N,则代表后面4字节uint32表示该事务用户名的长度,再后面等同于该长度的字符为事务的用户名字。
      5. 因为之后仍可能有解码语句,接下来会有1字节字母P或F作为语句间的分隔符,P代表本批次仍有解码的语句,F代表本批次完成。
    5. 3.接下来1字节的字母有5种B/C/I/U/D,...步字母为C时:
      1. 【该部分为可选项】接下来1字节字母如果为X,则代表后面的8字节uint64表示xid。
      2. 【该部分为可选项】接下来的1字节字母如果为T,则代表后面4字节uint32表示时间戳长度,再后面等同于该长度的字符为时间戳字符串。
      3. 因为批量发送日志时,一个COMMIT日志解码之后可能仍有其他事务的解码结果,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。
    6. 3.接下来1字节的字母有5种B/C/I/U/D,...步字母为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代表当前列的值(以字符串格式存储)的长度,如果为0xFFFFFFFF则表示NULL,如果为0则表示长度为0的字符串。
          5. 按照上述长度读取列值。
      6. 因为之后仍可能有解码语句,接下来的1字节字母如果为P则表示该批次仍需解码,如果为F则表示该批次解码结束。
    • sending-batch:

      指定是否批量发送。

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

      • 0:设为0时,表示逐条发送解码结果。
      • 1:设为1时,表示解码结果累积到达1MB则批量发送解码结果。

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

    • parallel-queue-size:

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

      取值范围:2~1024的int型,且必须为2的整数幂,默认值为128。

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

support.huaweicloud.com/distributed-devg-v2-gaussdb/gaussdb-12-1092.html