介绍EXEC模块的性能参数。
参数含义
目标DMDRS绑定数据的缓冲区大小。
参数说明
该参数的原名为max_bind_buf_size。
该参数值配置越大,目标DMDRS一次可以绑定的行数越多。
参数值
取值范围:1~128,单位:MB,默认值为4。
参数语法
<bind_buf_size></bind_buf_size>
参数示例
<bind_buf_size>8</bind_buf_size>
参数含义
通过数据库接口执行同步入库时的最大批量绑定行数。
参数说明
该参数的原名为bind_rows。
该参数取值较大时,可以降低SQL执行的次数,但是会消耗更多的内存空间,用以缓存批量数据。
该参数不适用于Kafka和GBase 8s目标数据库。
参数值
取值范围:1~65535,默认值为2000。
参数语法
<bind_row></bind_row>
参数示例
<bind_row>1000</bind_row>
参数含义
检查点缓存文件占用的存储空间上限。
参数说明
当上一级DMDRS投递存在大事务时,如果内存不足以缓存该事务,会暂时由检查点保存到本地文件,接收完成后执行,在某些情况需要适当增大该参数来保证磁盘空间足够,防止同步卡死。
参数值
取值范围:1~2147483647,单位:MB,默认值为50*1024。
参数语法
<ckpt_limit></ckpt_limit>
参数示例
<ckpt_limit>10000</ckpt_limit>
参数含义
是否开启操作模板优化。
参数说明
该参数的原名为use_op_like。
该参数适用于装载和同步,在一定程度上可以提升性能。
源DMDRS发送到目标DMDRS的DML消息包含列名、列值信息,在执行前,需要进行解析并关联目标DMDRS的字典列,以便正确绑定、填充列值。如果源DMDRS某些固定形式的操作(这里指不带列值的SQL,如UPDATE T SET C1=? WHERE ID=?)较为频繁,可以开启该参数来提升性能。
开启该参数后,所有执行过的DML操作会被添加为模板,而执行前,先通过计算DML消息中的名称MD5值快速查找模板,当查找命中时将根据模板进行快速解析。注意,操作模板跟随字典进行释放,对数量不做限制,因此会占用少量内存。
参数值
0:不开启。默认值为0。
1:开启。
参数语法
<enable_op_like></enable_op_like>
参数示例
<enable_op_like>1</enable_op_like>
参数含义
EXEC模块在执行DML语句时是否启用计划池。
参数说明
该参数的原名为use_plan_pool。
目标端同步数据时,数据入库采用参数绑定的形式,其过程分为三步,准备语句、绑定参数和执行。当采用计划池时,同一个事务中相同执行计划的数据入库可以共用一个语句句柄,此时只有第一次执行时需要执行第1和第2步,后续执行相同的计划的数据时只需要在前面的基础上填充数据以后直接执行,从而达到提升性能的目的。这种方式会在连接上申请多个语句句柄,需要目标数据库提供驱动支持,当目标数据库不支持时,应将该参数配置为0。
该参数不适用于Kafka目标数据库。
参数值
0:不启用。
1:启用。默认值为1。
参数语法
<enable_plan_pool></enable_plan_pool>
参数示例
<enable_plan_pool>1</enable_plan_pool>
参数含义
目标DMDRS是否开启异步执行功能。
参数说明
开启该参数后,工作线程的准备数据和绑定执行过程将异步进行,在数据发送至数据库时便可以准备下一批数据,进而提升性能。
注意每个工作线程将额外占用一个线程资源。
参数值
0:不开启。默认值为0。
1:开启。
参数语法
<exec_nowait></exec_nowait>
参数示例
<exec_nowait>1</exec_nowait>
参数含义
分组执行功能。
参数说明
将同步表进行分组,不同分组的执行优先级、执行策略和合并策略不相同。该参数是一个功能标签,需要配置它的子项。如有多个分组,可使用<item></item>标签指定。
当目标数据库为Kafka时,该参数为必配参数。
EXEC模块启动时会自带ID为0的默认分组,与其它分组不匹配的日志操作会放入默认分组下执行。可通过在该参数下配置ID为0的分组覆盖默认分组配置。当目标数据库为kafka时请注意根据实际需求配置默认分组。
注意分组的条件信息(desc)和分组执行策略(exec_policy)在启动后不能修改,如需修改必须清理环境。
参数值
无
参数语法
<group></group>
参数示例
<group>
<item></item>
<item></item>
<item></item>
</group>
参数含义
分组执行信息。
参数说明
将同步表进行分组,如有多个分组对应配置多个<item></item>标签。
该参数是一个功能标签,需要配置它的子项。item参数的配置对应item元素,配置文件中的item元素以标签<item>开始,以标签</item>结束。
参数值
无
参数语法
<item></item>
参数示例
<group>
<item>
<id>0</id>
<exec_policy>1</exec_policy>
<merge_policy>0</merge_policy>
</item>
<item>
<id>1</id>
<exec_policy>0</exec_policy>
<merge_policy>0</merge_policy>
<level>1</level>
<max_thr>64</max_thr>
<desc>
<table>RESOURCES.EMPLOYEE</table>
<table>PERSON.*</table>
</desc>
</item>
<item>
<id>10</id>
<exec_policy>0</exec_policy>
<merge_policy>0</merge_policy>
<level>1</level>
<max_thr>64</max_thr>
<exec_mask>AFFECT_ROW|CHECK_COL|CHECK_KEY|UPDATE_DEPLICATE|COMMIT_NOWAIT</exec_mask>
<desc>
<table>RESOURCES.*</table>
</desc>
</item>
</group>
参数含义
UPDATE、DELETE全列匹配时的操作批量绑定策略。
参数说明
表示该分组下的表UPDATE、DELETE使用所有字段作为WHERE匹配条件时,操作批量绑定的策略。
批量绑定相关说明见bind_row。
说明该参数仅适用于目标数据库DM8和Oracle。
参数值
0:不允许批量绑定。默认值为0。
1:允许批量绑定。
参数语法
<batch_policy></batch_policy>
参数示例
<batch_policy>0</batch_policy>
参数含义
提交策略。
参数说明
正常情况下,采用顺序提交策略,事务按照提交LSN大小顺序提交,每个事务必须等待前面所有事务提交成功后才能提交,因此会存在排队等待提交的情况,影响性能。对于这种情况,可以开启乱序提交功能进行优化,事务只要执行完成就可以提交。
对于顺序提交,仅需维护一个执行检查点LSN,表示提交LSN不超过该LSN的事务均未执行。在每次事务提交时推进执行检查点LSN。
对于乱序提交,除了维护一个执行检查点LSN以外,还需要维护提交LSN大于检查点LSN、已经执行的事务信息,该信息登记在目标端辅助表中。本参数用于控制辅助表的规模,当达到该大小后,清空辅助表中的事务信息,同时推进执行检查点LSN。
注意
- 当启用乱序提交策略后,可以使用该参数修改辅助表行数规模大小。
- 提交策略支持由顺序提交修改为乱序提交,重启后生效,但不支持乱序提交修改为顺序提交。
- 仅支持目标数据库为Oracle和DM。
参数值
取值范围:0~1000000,单位:行。
0:启用顺序提交策略。默认值为0。
1~1000000:启用乱序提交策略,并设置事务信息辅助表行数的规模大小。
参数语法
<commit_policy></commit_policy>
参数示例
<commit_policy>1000</commit_policy>
参数含义
分组DDL功能掩码。
参数说明
分组DDL功能掩码用来对分组所属对象进行DDL修正。
参数值
默认值为0。
| 分组执行掩码 | 说明 |
|---|---|
| LOCAL_INDEX | 仅对DM目标库生效。强制全局索引创建为局部索引。 |
参数语法
<ddl_mask></ddl_mask>
参数示例
<ddl_mask>LOCAL_INDEX</ddl_mask>
参数含义
当前分组的条件信息。
参数说明
该参数是一个功能标签,需要配置它的子项,描述所有属于该分组的表信息。
参数值
无
参数语法
<desc></desc>
参数示例
<desc>
<table>RESOURCES.EMPLOYEE</table>
<table>PERSON.*</table>
</desc>
####### 4.3.7.1.4.1 table*
参数含义
分组的表匹配信息。
参数说明
当表满足该分组的匹配信息时会被分到该组。若表同时满足多个分组的table标签定义时,按分组在配置文件中的顺序,归属于第一个满足条件的组。分组的表匹配信息配置格式为:模式名.表名。
参数值
模式名.表名,支持模糊匹配符*。如果模式名或表名中包含“.”,需要将模式名或表名加上引号""。
参数语法
<table></table>
参数示例
PERSON模式下的所有表。
<table>PERSON.*</table>
参数含义
同步错误处理策略。
参数说明
表示该分组同步发生错误时的处理策略。如需出错时忽略错误继续同步需对此参数进行配置。
该参数不适用于Kafka目标数据库。
参数值
0:终止同步。默认值为0。
1:忽略错误继续同步,仅忽略同步有错误的操作,不影响所在事务的其它操作同步。
2:INSERT/UPDATE失败时,使用MERGE INTO重新执行。忽略DELETE失败的情况。
MERGE INTO仅支持有主键表,并且要求开启全列日志,否则UPDATE失败时,仅插入更新的列值,其他列为NULL。该功能和exec_nowait功能冲突,配置为2时自动取消exec_nowait。开启后该分组批量绑定功能将被禁用,不受bind_row和batch_policy影响。(当需要设置装载表的执行错误策略为2时,只用添加一个分组id为32222的item项并配置error_policy为2即可)
参数语法
<error_policy></error_policy>
参数示例
<error_policy>1</error_policy>
参数含义
分组执行掩码。
参数说明
分组执行掩码用来对执行结果进行影响行数、表字段和多行更新等检查。
目前支持三种掩码指定方式:
直接指定掩码。
在默认掩码的基础上仅删除掩码。
在默认掩码的基础上仅添加掩码。
该参数不适用于Kafka目标数据库。
参数值
对于Oracle数据库默认值为AFFECT_ROW|CHECK_COL|CHECK_KEY|UPDATE_DEPLICATE|ENABLE_TRIGGER|ENABLE_CONSTRAINT,对于其他数据库默认值为AFFECT_ROW|CHECK_COL|CHECK_KEY|UPDATE_DEPLICATE。具体说明请参见分组执行掩码说明表。
| 分组执行掩码 | 说明 |
|---|---|
| AFFECT_ROW | 启用执行时影响行数检查功能。默认为启用。 |
| CHECK_COL | 检查源端操作的列在目标库中是否存在。默认为启用。 |
| CHECK_KEY | 检查源端的主键在目标库中是否存在。默认为启用。 |
| UPDATE_DEPLICATE | 单个操作更新列去重,如果更新的新值和旧值相同,执行更新操作时忽略这一列。默认为启用。当UPDATE_DEPLICATE掩码和ROW_HASH掩码同时使用时,UPDATE_DEPLICATE掩码不生效。 |
| COMMIT_NOWAIT | 启用异步提交功能。默认为禁用。如果由于网络或目标库故障等原因导致提交失败,执行端会进行重启,适用于网络稳定的情况。 |
| COMMIT_NOFLUSH | 启用异步提交功能时,在提交后不进行刷盘检查,进一步提升性能。但目标库如果故障,有数据丢失风险。 |
| INSERT_SERIAL | 启用插入操作串行化功能,INSERT操作只允许同一时刻单个连接进行操作。默认为禁用。 |
| ROWID_ASSIST | 启用ROWID辅助列功能。默认为禁用。该功能仅适用于源数据库DM8和Oracle。当源表没有主键和唯一索引时建议开启该参数以提高程序性能。当源数据库为DM8时需要开启RLOG_LLOG_UPD_TO_DEL_INS参数,防止分区表出现行迁移造成数据同步异常。如果目标数据库为DM7/DM8,要求数据库大小写敏感。 目标DMDRS在建表时决定是否启用该功能,如果建表操作来自装载,需要装载指定ROWID掩码来启用;如果建表操作来自同步日志解析,默认启用该功能。当该表添加主键时会自动删除添加的ROWID辅助列。 说明:一个表仅在创建时受该掩码影响,当ROWID辅助列添加后,即使删除该掩码后仍然会维护辅助列。该功能不支持堆表、聚集主键和聚集索引的表。 注意: 当DMDRS的拓扑结构为双向、环形或者级联时,不支持启用该参数。 当DMDRS的源为Oracle时,存在ROWID复用的情况,要求源端配置calc_md5_col_num为0,使用ROWID作为并行控制条件,否则可能导致死锁或数据不一致问题。 |
| ENABLE_TRIGGER | 启用触发器。DM系列默认为禁用,Oracle数据库默认为启用。该参数仅对DM系列和Oracle数据库有效。 执行数据入库时,如果表上存在触发器,入库时就会触发这些触发器,造成不可预期的结果,因此需要根据实际情况,来指示入库时是否需要禁用这些触发器。当选择禁用时,禁用仅仅针对EXEC产生的数据库连接才有效,不影响第三方应用。 注意: 1. 当目标数据库为DM7时,由于DM7是通过执行计划来禁用触发器,当该参数配置为启用或禁用时,DM7内部的执行计划并没有被改变,因此配置不会马上生效,需要重启DM7,才能清空之前生成的执行计划,让它重新生成执行计划。 2. 当目标数据库为Oracle时,如需禁用触发器,数据库管理员需要先配置enable_goldengate_replication=TRUE,并修改drsvr程序名为replicat。 3. 禁用触发器后创建触发器时会自动将其修改为DISABLE状态。 |
| ENABLE_CONSTRAINT | 启用约束。DM系列默认为禁用,Oracle数据库默认为启用。该参数仅对DM系列和Oracle数据库有效。 执行数据入库时,如果表上存在约束,入库时就会触发这些约束检查,假如是外键约束,则会造成数据入库先后顺序的严格要求,从而降低数据入库的性能,因此需要根据实际情况,来指示入库时是否需要禁用约束检查。当选择禁用时,禁用仅针对EXEC产生的数据库连接有效,不影响第三方应用。 注意: 1. 当目标数据库为DM7时,由于DM7是通过执行计划来禁用约束,当该参数配置为启用或禁用时,DM7内部的执行计划并没有被改变,因此配置不会马上生效,需要重启DM7,才能清空之前生成的执行计划,让它重新生成执行计划。 2. 当目标数据库为Oracle时,如需禁用约束,数据库管理员需要先配置enable_goldengate_replication=TRUE,并修改drsvr程序名为replicat。 3. 当目标数据库不为Oracle时,约束不包括主键约束和唯一性约束。 |
| ENABLE_IDENTITY | 启用自增列属性。默认为禁用。该参数仅对DM系列数据库有效。 执行数据入库时,如果操作的表上某列是自增列,该参数可以指定针对自增列的处理方式。 当未配置该掩码时(默认为不配置),表示禁用目标库自增列的属性,即自增列使用源端同步模块分析的列值,再在目标端进行填充。 当配置该掩码时,表示启用目标库自增列的属性,目标库维护该列的值。此时,EXEC模块不能使用自增列来区分每行数据,因为它的值和CPT所在的源端是不同的,因此,拥有自增列的表需要拥有其它的列来唯一地区分每一行,否则会出现数据错位的问题。 |
| ROW_HASH | 启用冲突查找的并行优化功能。默认为禁用。该功能仅适用于源数据库DM6、DM8、Oracle和DB2。 启用后需适当调整row_hash和max_merge_row参数,以达到最大程度性能优化。 |
参数语法
<exec_mask></exec_mask>
参数示例
直接指定掩码。
<exec_mask>AFFECT_ROW|CHECK_COL|CHECK_KEY|UPDATE_DEPLICATE|COMMIT_NOWAIT</exec_mask>
在默认掩码的基础上,删除掩码。
<exec_mask remove="1">CHECK_COL</exec_mask>
在默认掩码的基础上,添加掩码。
<exec_mask add="1">ENABLE_TRIGGER|ENABLE_CONSTRAINT|ENABLE_IDENTITY</exec_mask>
参数含义
执行策略。
参数说明
表示该分组下的表的事务采用并行执行或者按照提交顺序执行。
注意分组的执行策略在启动后不能再次修改,否则会影响数据的一致性。
该参数不适用于Kafka目标数据库。
参数值
0:并行执行。非默认分组的默认值为0。
1:提交顺序。默认分组(ID为0的分组)的默认值为1。
参数语法
<exec_policy></exec_policy>
参数示例
<exec_policy>0</exec_policy>
参数含义
分组编号。
参数说明
分组编号不能重复。
参数值
取值范围:0~33221。
参数语法
<id></id>
参数示例
<id>35</id>
参数含义
为工作线程分配的JSON串缓冲区的大小。
参数说明
该参数的原名为json_buffer。
该内存主要用于缓存日志操作生成的JSON和KEY。适当增大该参数,能够提高日志操作解析生成JSON串和Kafka生产者消息发送的并行度,提高同步效率。
此参数决定可同步的JSON串与KEY串大小的上限。约定floor(x)为向下取整函数,JSON串与KEY串空间大小上限的计算公式为:
2 ^ (floor(㏒₂(json_buf_size)) - 1) (MB)
上述公式的计算结果包含为元数据预留的64Bytes空间大小,实际的JSON串与KEY串长度上限需排除该部分大小。当json_buf_size参数值为2048及以上时,JSON串与KEY串最大空间大小上限为1GB。
该参数仅适用于Kafka目标数据库。当目标数据库为Kafka时,该参数为选配参数。
参数值
取值范围:16~4095,单位:MB,默认值为64。
参数语法
<json_buf_size></json_buf_size>
参数示例
<json_buf_size>64</json_buf_size>
参数含义
JSON模板文件路径。
参数说明
当目标库为kafka时,EXEC模块根据JSON模板文件控制日志操作转换为JSON串的打印格式。
该参数仅适用于Kafka目标数据库。当目标数据库为Kafka时,该参数为必配参数。默认分组下该参数的默认值指向DMDRS工作目录下json_format.ini文件。
JSON模板文件内容主要包括控制参数、变量参数、表达式变量的声明和使用。其中控制参数影响文本和变量参数打印为JSON串的格式。变量参数决定需要打印的数据。控制参数和变量参数名仅包含#号、大写字母和下划线。
表达式变量包括列、列表、模板和成员表达式。列包含多个列成员,列成员可以为模板或成员表达式。列表包含一个或多个列。用户可以在JSON模板文件中声明列和列表,然后在JSON模板中将列表使用指定的模板展开,或者用成员表达式访问列的成员。
JSON模板语法规则提供了一些转义符号,用于在不违反语法规则的情况下表示某些字符。转义符号包括\#, \$, \(, \), \\, \', \{, \}。它们实际表示的文本分别对应它们第一个\符号后的第一个字符。
| 序号 | 名称 | 含义 |
|---|---|---|
| 1 | OP_TIME_FORMAT | 控制变量#OP_TIME的时间格式。 |
| 2 | CUR_TIME_FORMAT | 控制变量#TIME的时间格式。 |
| 3 | DDL_TYPE_CASE | 控制操作为DDL时变量#OP_TYPE的打印格式。取值范围: 0:ddl。 1:DDL。 2:具体操作名(小写)。 3:具体操作名(大写)。默认值为3。 |
| 4 | DML_TYPE_CASE | 控制操作为DML时变量#OP_TYPE的打印格式。取值范围: 0:dml。 1:DML。 2:具体操作名(小写)。 3:具体操作名(大写)。默认值为3。 |
| 5 | OLD_VALUES | 设置DML同步操作的“旧值”输出列。取值范围: PKONLY:仅主键旧值列 ALL:所有旧值列。默认值为ALL。 |
| 6 | NEW_VALUES | 设置DML同步操作的“新值”输出列。取值范围: MIN:#NEWVALUES中仅包含被修改的列信息。不包含新旧列值相同的列。默认值为MIN。 ALL:#NEWVALUES中仅包含被修改的列信息。 |
| 7 | OLD_LOB_FLAG | 用于设置大字段LOB列旧值和大对象空值的标记。参数值为字符串,最大长度为16个字符。默认值为""。 |
| 8 | CHAR_REPLACE | 对部分JSON串中的字符进行替换。示例格式如:CHAR_REPLACE=(",\"),(\,\\)。其中每个括号中的逗号左边是待替换字符,逗号右边是替换字符串。 该参数影响的JSON串内容包括:列名、受数据库字符编码影响的列值、#SCHEMA、#TABLE、#DDL_SQL和#PLACEHOLDER。 待替换字符支持以下两种表示方式:十六进制值表示的字符值(以0x开头)、字符值。 |
| 9 | SET_QUOTA | 用于控制是否用双引号包裹#NEW_VALUES、#OLD_VALUES、#PK_VALUES中的列值。取值范围: 0:数值类型的列值不需要用双引号包裹。仅当源端n2c参数值为0时该选项生效,否则效果同取值为1的选项。默认值为0。 1:所有类型的列值均需要用双引号包裹。 2:所有类型的列值均不需要用双引号包裹。仅在使用表达式语法打印列值,以及使用SET_DEFAULT_KEY参数在键中打印主键列值时该选项生效。使用变量参数打印列值的效果同取值为0的选项。 |
| 10 | NULL_FORMAT | 设置null值的打印字符串。如"NULL"。默认值为""。 |
| 11 | FLOAT_FORMAT | 按C语言格式设置float类型和double类型的打印字符串。如%.10f、%g。 |
| 12 | SET_TIME_EPOCH | 设置源端时间戳类型(TIMESTAMP)在JSON格式中以整数epoch形式进行显示。取值范围: 0:不需要以整数形式表示。默认值为0。 1:需要以整数形式表示。 2:需要以13位Unix时间戳形式表示,单位为毫秒。 |
| 13 | NEED_CRLF | 对于JSON串中的#NEW_VALUES、#OLD_VALUES、#PK_VALUES、#NAME_TYPE、#SQLTYPE中的字段值是否需要回车换行。取值范围: 0:不需要回车换行。默认值为0。 1:需要回车换行。 |
| 14 | SET_ROWID_COL | 用于设置当无主键时,是否在#PRIMARY_KEY、#NEW_VALUES、#OLD_VALUES、#PK_VALUES、#NAME_TYPE、#SQLTYPE中输出ROWID及相应值。取值范围: 0:不需要打印ROWID。默认值为0。 1:需要打印ROWID。 |
| 15 | JSON_FORMAT | 该参数用于控制同步JSON串的输出内容,其中取值部分通过使用“#”加参数名进行控制,DMDRS输出时,会将有“#”部分的内容替换为实际的取值。 |
| 16 | JSON_FORMAT_INS | 设置INSERT类型日志操作的JSON串的输出内容。 |
| 17 | JSON_FORMAT_UPD | 设置UPDATE类型日志操作的JSON串的输出内容。 |
| 18 | JSON_FORMAT_DEL | 设置DELETE类型日志操作的JSON串的输出内容。 |
| 19 | JSON_FORMAT_DDL | 设置DDL类型日志操作的JSON串的输出内容。 |
| 20 | JSON_FORMAT_HEARTBEAT | 设置心跳消息的JSON串的输出内容。 |
| 21 | UPDATE_FILL_FLAG | 设置更新/删除消息的输出内容。取值范围: 0:根据源端日志消息进行填充,不作任何列的转换。默认值为0。 1:源端DM7/DM8数据库开启全列日志的情况或者其它数据库的情况下,更新消息填充更新列新值+主键旧值+更新列旧值,删除消息填充主键旧值。 2:更新消息填充更新列新值+主键旧值,删除消息填充主键旧值。 3:源端DM7/DM8数据库开启全列日志的情况或者其它数据库的情况下,根据所有列的旧值补齐列的新值。 4:源端DM7/DM8数据库开启全列日志的情况或者其它数据库的情况下,根据所有列的旧值补齐列的新值。日志操作中未记录新值与旧值的列也会在#NAME_TYPE中显示其列名和数据类型。此功能需源端配置update_fill_flag参数。 5:在取值为4的选项的基础上,按OLD_LOB_FLAG打印日志操作中未记录值的列的列值。 |
| 22 | MAX_LOB_SIZE | 设置单个大对象列的数据的最大打印长度。列数据转换成文本后,超过此长度的文本将按双字节(对应二进制数据)/字符(对应文本数据)边界截断。最大打印长度默认为64KB,最大不能超过1073739776 Bytes(即1GB-2KB)。取值范围:0~1073739776,单位为Byte。 |
| 23 | DML_TYPE_FORMAT | 设置操作为DML时变量#OP_TYPE的打印格式。示例格式如:DML_TYPE_FORMAT=(+I,+U,-D)。其中第一个字符串值是INSERT操作的打印字符串,第二个字符串值是UPDATE操作的打印字符串,第三个字符串值是DELETE操作的打印字符串。 |
| 24 | SET_TRAILING_NUL | 设置消息末尾是否尾随'\0'字符。 0:不尾随'\0'字符。默认值为0。 1:尾随'\0'字符。 |
| 25 | PARTITION_NO | 设置消息的目标分区。取值范围为-2~2147483647。 -1:根据key值和producer_properties文件配置中的partitioner参数决定消息的目标分区。 -2:设置消息的目标分区号为key值对应的整数。key值必须为整数格式字符串。 其它:设置所有消息的目标分区号为此固定值。默认值为0。 |
| 26 | SET_DEFAULT_KEY | 设置是否根据默认规则为DML/DDL操作自动生成键。取值范围为0~2。当DML存在主键列时,为DML操作生成键的规则为主键值1{,主键值n}。当DML操作不存在主键列时,为DML操作生成键的规则为ROWID。DDL使用表名作为键。 0:不自动生成键。默认值为0。 1:根据默认规则为DML自动生成键。 2:根据默认规则为DML和DDL自动生成键。 |
| 27 | NAME_TYPE_CASE | 设置操作为DML时变量#NAME_TYPE的打印格式。取值范围: 0:打印表列名及数据类型,示例格式如{"name":"c1","type":"varchar(20)"},多列数据之间使用逗号隔开。默认值为0。 1:打印表列名及数据类型,不打印精度,示例格式如"c1":"varchar",多列数据之间使用逗号隔开。 |
| 28 | BLOB_FORMAT | 设置二进制类型数据的打印格式。取值范围: HEX:以十六进制格式打印二进制类型数据,示例格式如313233616263414243。默认值为HEX。 NUM_ARRAY:按无符号整数数组格式打印二进制类型数据,示例格式如[49, 50, 51, 97, 98, 99, 65, 66, 67]。该格式仅支持用于打印行内数据。 |
| 29 | NON_JSON | 设置是否打印JSON模板中第一个与最后一个大括号字符。取值范围: 0:打印JSON模板中第一个与最后一个大括号字符。默认值为0。 1:不打印JSON模板中第一个与最后一个大括号字符。适用于需要生成非JSON格式消息的场景。 |
注意
- 请谨慎调整MAX_LOB_SIZE的大小。过大的MAX_LOB_SIZE值可能导致单条消息长度过大而无法发送到Kafka的意外错误出现,并造成DMDRS同步阻塞。
- 配置SET_QUOTA为0时,需要配置源DMDRS的dml_with_coldef参数值为1。否则会出现在#NEW_VALUES、#OLD_VALUES中数据类型为部分时间间隔类型(字面值具有数值类型格式)的列的列值未被双引号包裹的情况。
说明在JSON模板表达式中变量参数可作为列变量使用,每个变量参数包含NAME、VALUE、JSONTYPE、SQLTYPE和DBXTYPE成员。
| 序号 | 对象名称 | 说明 |
|---|---|---|
| 1 | #SCHEMA | 数据操作所属的用户/模式。 |
| 2 | #TABLE | 数据操作所属的表或对象。 |
| 3 | #NEW_VALUES | 数据操作的新值。输出格式示例为"c1":"ABCDEF"。多列以逗号隔开。 |
| 4 | #OLD_VALUES | 数据操作的旧值。输出格式示例为"c1":"ABCDEF"。多列以逗号隔开。 |
| 5 | #TRXID | 数据操作的事务ID。 |
| 6 | #OP_TIME | 源端日志中记录的操作时间。 |
| 7 | #LSN | 数据操作的LSN。 |
| 8 | #LFS | 数据操作的LFS。 |
| 9 | #SITEID | 数据操作的源端站点号。 |
| 10 | #OP_ID | 数据操作的内部ID,同一个事务,OP_ID唯一。 |
| 11 | #OP_TYPE | 数据操作的操作类型。 |
| 12 | #TIME | 目标端组装JSON消息的本地时间。 |
| 13 | #PRIMARY_KEY | 数据操作的主键列名。多列以逗号隔开。 |
| 14 | #ROWID | 操作记录的ROWID值。 |
| 15 | #DDL_SQL | 用于输出DDL语句文本。 |
| 16 | #PLACEHOLDER | 占位符,用于根据用户自定义逻辑生成JSON串数据。名称可变,需以PLACEHOLDER开头,只能包含大写字母和下划线。 日志操作转JSON时,根据占位符名称将占位符数据填入JSON模板的指定位置。自定义逻辑相关使用说明请参见《DMDRS DRS语言使用手册》。 |
| 17 | #CONCAT | 标识可变模板内容的起始位置,此参数需与#CUT_NULL或#CUT_EMPTY参数搭配使用。 |
| 18 | #CUT_NULL | 标识可变模板内容的结束位置。根据可变模板内容中第一个变量参数的值是否为空,对可变模板内容进行保留或者裁剪且添加null字符串。此参数需与#CONCAT变量参数搭配使用。 示例如下: "before":#CONCAT{ "dataColumn":{#OLD_VALUES} }#CUT_NULL 如果#OLD_VALUES值为空,不显示,则拼接结果为: "before":null。 如果#OLD_VALUES值不为空,需要显示,则拼接结果为: "before":{ "dataColumn":{#OLD_VALUES} } |
| 19 | #CUT_EMPTY | 标识可变模板内容的结束位置。根据可变模板内容中第一个变量参数的值是否为空,对可变模板内容进行保留或者裁剪。此参数需与#CONCAT参数搭配使用。 |
| 20 | #POS | 数据操作的序号。当仅进行增量数据同步时,该序号唯一地标识数据操作在其归属分组的数据流中的位置。 |
| 21 | #NAME_TYPE | 用于输出表列名及数据类型,仅当源端配置参数dml_with_coldef为1时数据有效。 示例如下: {"name":"c1","type":"varchar(20)"} 多列数据之间使用逗号隔开。 |
| 22 | #DBTYPE | 数据操作的源数据库的类型名。 |
| 23 | #SQLTYPE | 用于输出表列名及jdbc类型,仅当源端配置参数dml_with_coldef为1时数据有效。 示例如下: "c1":12 多列数据之间使用逗号隔开。兼容华为DRS时使用。 |
| 24 | #PK_VALUES | 数据操作的主键值。输出格式示例为"c1":"ABCDEF"。多列以逗号隔开。 |
| 25 | #DRS_VERSION | DRS的版本号信息。 |
| 26 | #SITENAME | 源端站点名称。 |
| 27 | #SQL | DDL或者DML操作转换成的SQL语句。 |
声明列
语法规则:
COLUMN <列名>(<成员名列表>) = {<成员值列表>}
| 参数 | 说明 |
|---|---|
| 列名 | 由大小写英文字母、下划线和阿拉伯数字构成。 |
| 成员名列表 | 由一个或多个成员名组成,多个成员名之间使用逗号间隔。成员名构成规则同列名。列成员中必须包含一个VALUE成员。未声明NAME成员的情况下默认在该列中添加一个NAME成员,成员值为列名。 |
| 成员值列表 | 由一个或多个模板或成员表达式列表组成,多个模板或成员表达式之间使用逗号间隔。模板两侧需使用单引号括起。 |
语法示例
COLUMN SNAPSHOT(JSONTYPE, NULLABLE, VALUE) = {'boolean', 'true', 'false'}
声明列表
语法规则:
COLUMNS <列表名> = {<列名列表>}
| 参数 | 说明 |
|---|---|
| 列表名 | 列表名构成规则同列名。由大小写英文字母、下划线和阿拉伯数字构成。 |
| 列名列表 | 由一个或多个$列名组成,多个$列名之间使用逗号间隔。列名可以是用户预先声明的列的名称,也可以是变量参数的名称。 |
语法示例
COLUMNS SOURCE = {$DRS_VERSION, $DBTYPE, $SITENAME, $OP_TIME, $SNAPSHOT, $SCHEMA, $TABLE, $LSN, $POS, $QUERY}
在模板中将列表使用指定的模板展开
语法规则1:
$<列表名>(<模板>)
语法规则2:
$<列表名>{<模板>}(<间隔符>)
| 参数 | 说明 |
|---|---|
| 列表名 | 列表名需为用户预先声明的列表名称,也可以是NEW_COL、OLD_COL、PK_COL、NR_COL。其中NEW_COL代表DML操作的新列,OLD_COL代表DML操作的旧列,PK_COL代表DML操作的主键列,NR_COL代表DML操作的列名不重复的新旧列(新列优先)。 |
| 模板 | 将对列表中的每个列使用该模板展开,每个列对应的展开后的字符串之间将使用间隔符分隔,未指定间隔符的情况下将使用逗号分隔。 |
| 间隔符 | 每个列对应的展开后的字符串之间将使用该间隔符分隔。 |
语法示例
$SOURCE({"type": "#JSONTYPE", "optional": #NULLABLE, "field": "#NAME"})
在模板中使用成员表达式访问成员
语法规则1:
$<名称列表>
| 参数 | 说明 |
|---|---|
| 名称列表 | 由一个或多个名称组成,名称之间使用点间隔。可以通过成员表达式访问用户声明的列的成员,变量参数的成员和DML列的成员。变量参数和DML列的成员包括NAME、VALUE、DBXTYPE、SQLTYPE、JSONTYPE、NULLABLE,分别对应列名,列值,列数据库类型、列的JDBC类型、列值的JSON类型,列值是否可以为null。当前变量参数和DML列的NULLABLE成员值固定为true。 |
语法规则2:
当该规则用于列表的模板外时,等价于成员表达式$<列名>.VALUE。
当该规则用于列表的模板内时,含义是访问列表中列的成员名。
#<名称>
| 参数 | 说明 |
|---|---|
| 名称 | 列表的模板外:列名。 列表的模板内:列的成员名。 |
语法示例
访问SNAPSHOT列的NAME成员。
$SNAPSHOT.NAME
访问列表SOURCE中QUERY列的NAME成员。
$SNAPSHOT.QUERY.NAME
访问新列中ID列的VALUE成员。
$NEW_COL.ID.VALUE
列表的模板外访问NEW_VALUE变量参数的VALUE成员。
#NEW_VALUE
列表的模板内访问列的成员。
$SOURCE({"type": "#JSONTYPE", "optional": #NULLABLE, "field": "#NAME"})
参数值
无
参数语法
<json_format_path></json_format_path>
参数示例
<json_format_path>/home/dmdrs/dmdrs5/bin/json_format.ini</json_format_path>
参数含义
分组的优先级。
参数说明
值越大优先级越高,优先级高的先执行。若优先级相同则按分组在配置文件中的顺序执行。
参数值
取值范围:0~255。默认值为0。
参数语法
<level></level>
参数示例
<level>5</level>
参数含义
配置目标DMDRS装载或同步对象的topic映射功能。
参数说明
该参数仅适用于Kafka目标数据库。配置该参数可以实现基于映射规则将数据分发到Kafka的不同topic下。
该参数是一个功能标签,需要配置它的子项item,如需配置多个映射规则,可配置多个<item></item>标签。子项item的参数值的配置规则为模式名A.对象名A=@topic1,@topic2,...,@topicn。可以分别指定DML和DDL数据的目标topic,此时子项的item的参数值的配置规则为模式名A.对象名A=@DML_topic1,@DML_topic2,...,@DML_topicn//@DDL_topic1,@DDL_topic2,...,@DDL_topicn。
不匹配任何一条映射规则的操作将会被发送到4.3.7.1.17 topic_name对应的topic下。
参数值
无
参数语法
<map>
<item></item>
<item></item>
</map>
参数示例
配置所有对象的topic映射,将源数据库所有模式的所有对象数据发送到名为dmdrs1和dmdrs2的topic下。
<map>
<item>*.*=@dmdrs1,@dmdrs2</item>
</map>
在上一例子的基础上,单独配置RESOURCES模式下EMPLOYEE对象的topic映射,将其数据发送到名为EMPLOYEE的topic下。
<map>
<item>*.*=@dmdrs1,@dmdrs2</item>
<item>RESOURCES.EMPLOYEE=@EMPLOYEE</item>
</map>
在上一例子的基础上,单独配置RESOURCES模式下EMPLOYEE对象的DDL操作的topic映射,将其DDL数据发送到名为EMPLOYEE_DDL的topic下。
<map>
<item>*.*=@dmdrs1,@dmdrs2</item>
<item>RESOURCES.EMPLOYEE=@EMPLOYEE//@EMPLOYEE_DDL</item>
</map>
参数含义
目标DMDRS事务合并后的最大行数。
参数说明
该参数的原名为merge_max_tsks。
目标DMDRS工作线程在进行事务合并时,只有合并后的行数不超过该参数值时,才允许合并。
该参数的目的是为了控制事务合并的力度大小,如果合并力度太大,就会造成工作线程之间存在相同行的冲突,导致变成串行;如果合并力度太小,也会造成工作线程每次执行的事务过少,频繁提交。这两种情况都会影响到同步性能,因此需要调整到合适大小。
当分组exec_mask配置ROW_HASH并行优化后,该参数的影响会更加明显,对于不同表该参数最优值可能不同,这时需要将不同表配置到不同分组以便配置各自的最优值。
参数值
取值范围:0~2147483647,默认值为5000。
参数语法
<max_merge_row></max_merge_row>
参数示例
<max_merge_row>10000</max_merge_row>
参数含义
该分组中最大执行线程数。
参数说明
该参数的原名为max_thrs。
参数值
取值范围:不超过目标DMDRS配置的工作线程数。默认值为目标DMDRS配置的工作线程数。工作线程数的配置具体请参见work_thr章节。
参数语法
<max_thr></max_thr>
参数示例
<max_thr>16</max_thr>
参数含义
执行合并策略。
参数说明
表示该分组下的表的事务执行时是否可以合并。当对同步表中数据有严格顺序要求时需配置该参数值为0。
说明如果源数据库为PostgreSQL和Kingbase,该参数必须配置为0。
参数值
0:不合并。
1:只合并串行事务。
2:无条件合并。默认值为2。
3:根据并行行数合并。
参数语法
<merge_policy></merge_policy>
参数示例
<merge_policy>0</merge_policy>
参数含义
归属于该分组的源DMDRS的站点号。
参数说明
该参数仅适用于Kafka目标数据库,适用于多对一同步场景下需要根据源DMDRS站点分发到不同的Topic的场景。当指定该参数后,可以让满足源DMDRS站点号和desc中指定的分组条件的日志操作分配至该分组,配置该参数时需要同时配置desc参数,不支持在默认的0号分组下配置该参数。
参数值
可以配置1个或多个站点号,站点号之间用逗号间隔。单个siteid的取值范围为1~65535。默认值为空。
参数语法
<siteid></siteid>
参数示例
配置来源于1号站点源DMDRS的满足desc中指定的分组条件的日志操作分配至该分组。
<siteid>1</siteid>
配置来源于10号和18号站点源DMDRS的满足desc中指定的分组条件的日志操作分配至该分组。
<siteid>10,18</siteid>
参数含义
分组中Kafka生产者的目标Topic名称。
参数说明
该参数仅适用于Kafka目标数据库。当目标数据库为Kafka时,该参数为必配参数。默认分组下该参数的默认值为dmdrs_0。
参数值
无
参数语法
<topic_name></topic_name>
参数示例
<topic_name>dmdrs_0</topic_name>
参数含义
创建索引的并行度。
参数说明
该参数仅适用于DM和Oracle目标数据库。当表数据量比较大,创建索引采用单并行度可能耗时很长,配置该参数可以加快索引的创建速度。
参数值
取值范围:1~128,默认值为1。
参数语法
<index_parallel></index_parallel>
参数示例
<index_parallel>1</index_parallel>
参数含义
EXEC模块在执行INSERT语句时,启用NULL值优化的列数。
参数说明
EXEC模块在执行INSERT语句时,如果NULL值的列较多,超过了该参数值,拼写SQL时可以忽略这些列,由数据库自动填充NULL,以此提升性能。
注意如果不同DML的NULL分布不同,触发该优化后,会导致批量绑定行数减少和执行计划无法复用问题,性能可能下降。
参数值
取值范围:10~2000,默认值为100。
参数语法
<ins_null_col_num></ins_null_col_num>
参数示例
当INSERT的NULL值超过200列时,不再填充NULL,而是移除这些列。
<ins_null_col_num>200</ins_null_col_num>
参数含义
每个工作线程对应的JSON转换子线程数。
参数说明
JSON转换子线程用于转换日志操作到JSON字符串。当日志量较多时,适当增大该参数能够提高日志操作解析生成JSON串和Kafka生产者消息发送的并行度,提高同步效率。
该参数仅适用于Kafka目标数据库。
参数值
取值范围:1~64,默认值为1。建议参数值配置为1~4,配置过大可能引发程序卡顿。
参数语法
<json_cvt_thr></json_cvt_thr>
参数示例
<json_cvt_thr>1</json_cvt_thr>
参数含义
EXEC模块数据装载使用的站点缓冲区上限。
参数说明
该参数的原名为load_buffer_limit。
对于数据装载,EXEC模块根据site_buf_size参数创建对应的初始化站点缓存空间用于数据装载,该站点缓存大小可自动扩展,为避免数据装载消耗过多内存,引起内存资源紧张问题,可使用该参数限制装载可使用的最大站点缓存大小。
参数值
根据实际情况设置,单位:MB,默认值为1024。
参数语法
<load_buf_limit></load_buf_limit>
参数示例
<load_buf_limit>1024</load_buf_limit>
参数含义
执行入库的装载线程数。
参数说明
该参数的原名为load_threads。
当源端的发送线程过多时,提高该参数的值可以提高装载性能。
注意该参数不适用于数据分发场景。在数据分发场景下,DMDRS会自行根据装载数据设定执行入库的装载线程数。
参数值
取值范围:1~256,默认值为32。
参数语法
<load_thr></load_thr>
参数示例
<load_thr>60</load_thr>
参数含义
目标DMDRS的大事务优化功能。
参数说明
该参数是一个功能标签,需要配置它的子项。
参数值
无
参数语法
<long_trx_opt></long_trx_opt>
参数示例
<long_trx_opt>
<min_tsk_num>0</min_tsk_num>
<work_thr>5</work_thr>
<split_trx_num>1</split_trx_num>
</long_trx_opt>
参数含义
目标DMDRS拆分事务的最小操作数。
参数说明
当已提交的事务满足以下条件,且事务中DML操作数量超过该参数值时,目标DMDRS将拆分该事务为若干个小事务。
数据来自DM8或Oracle源数据库。
事务中仅包含单一类型的DML操作。
若事务中包含更新或删除操作,事务中操作的表需要带有主键或非空唯一约束。
参数值
取值范围:0~2147483647。0表示关闭目标DMDRS大事务并行执行功能,默认值为0。
参数语法
<min_tsk_num></min_tsk_num>
参数示例
<min_tsk_num>0</min_tsk_num>
参数含义
同时执行入库的被拆分事务数。
参数说明
该参数的原名为max_trx_num。
被拆分的事务执行入库时,会对拆分后的子事务生成对应的临时工作线程执行入库,避免生成的临时工作线程数量过多,可使用该参数限制同时执行入库的被拆分事务数。
参数值
取值范围:1~5,默认值为1。
参数语法
<split_trx_num></split_trx_num>
参数示例
<split_trx_num>1</split_trx_num>
参数含义
拆分事务的工作线程数。
参数说明
该参数的原名为threads。
拆分后的子事务可以并行执行提高执行效率,被拆分的事务执行入库时,会对拆分后的子事务生成对应的临时工作线程执行入库。
参数值
取值范围:2~128,默认值为5。
参数语法
<work_thr></work_thr>
参数示例
<work_thr>5</work_thr>
参数含义
检查点缓存文件的最大数量。
参数说明
该参数的原名为ckpt_max。
当检查点缓存文件数量过多时,占用系统资源(如内存、文件句柄)会增加,同时重启后恢复时间也会加长。该参数用于从检查点数量上进行限制,不建议超过1000。
注意参数值当数量达到上限后,即使没有达到最大占用磁盘限制(具体见参数ckpt_limit),也不会刷新推进检查点。
取值范围:1~2147483647,单位:个,默认值为1000。
参数语法
<max_ckpt_num></max_ckpt_num>
参数示例
<max_ckpt_num>1000</max_ckpt_num>
参数含义
单个数据库连接缓存语句句柄的最大数量。
参数说明
工作线程执行SQL前,需要从数据库申请语句句柄,然后才能准备语句并绑定执行,执行结束后释放该句柄。配置该参数用于缓存语句句柄,以提升性能,但会消耗更多内存。
参数值
取值范围:0~255,单位:个,默认值为5。
参数语法
<max_stmt_num></max_stmt_num>
参数示例
<max_stmt_num>5</max_stmt_num>
参数含义
EXEC模块DML操作的初始化heap大小。
参数说明
与DML操作中的列数量相关,列数越多需要配置越大,否则会出现频繁的内存申请。
参数值
取值范围:2048~131072,单位:B,默认值为16384。
参数语法
<op_dml_size></op_dml_size>
参数示例
<op_dml_size>8192</op_dml_size>
参数含义
每个线程缓存的执行计划数量。
参数说明
EXEC模块采用绑定执行的方式来入库,执行计划缓存可以避免重复的准备语句和数据绑定过程,减少数据库交互来提升性能。
该参数不适用于Kafka目标数据库。
参数值
取值范围:1~255,同步线程默认值为8,装载线程默认值为2。
参数语法
<plan_pool_num></plan_pool_num>
参数示例
为每个同步和装载工作线程配置10个缓存的执行计划数量。
<plan_pool_num>10</plan_pool_num>
为每个同步工作线程配置10个缓存的执行计划数量,每个装载工作线程配置1个缓存的执行计划数量。
<plan_pool_num>10</plan_pool_num>
<plan_pool_num ld="1">1</plan_pool_num>
每个同步工作线程缓存的执行计划数量使用默认值,每个装载工作线程配置20个缓存的执行计划数量。。
<plan_pool_num ld="1">20</plan_pool_num>
参数含义
EXEC模块在执行DML语句时,启用计划池功能时,执行计划独享的内存池大小。
参数说明
EXEC模块采用多个工作线程并行执行的方式来入库数据,为了防止工作线程在创建执行计划时从共享内存池中申请内存产生热点冲突,为每个工作线程配置了独立的内存池。配置较大的内存池有利于缓存执行计划的个数,从而减少工作线程和数据库交互的次数,但是在工作线程较多的场景下会占用较多的系统内存。
该参数不适用于Kafka目标数据库。
参数值
取值范围:4~128,单位:MB,默认值为10。根据实际内存空间大小设置。
参数语法
<plan_vpool_size></plan_vpool_size>
参数示例
为每个工作线程配置100MB的独立内存池。
<plan_vpool_size>100</plan_vpool_size>
文章
阅读量
获赞
