暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库学习Q&A 022:OceanBase 数据库中,使用 Batch 执行需要设置什么 JDBC 配置属性?

  • 从功能上说,使用 Batch 执行必须要设置 rewriteBatchedStatements=TRUE
  • 从实现和行为上说,useServerPrepStmts 会决定 Batch 执行的不同行为;
  • 从性能上说,cachePrepStmt、prepStmtCacheSize、prepStmtCacheSqlLimit、maxBatchTotalParamsNum 都会对性能有所提升。

如下是有关配置属性的说明:

配置属性默认值说明
allowMultiQueriesFALSE决定了一条语句中是否可以用“;”分割多个请求,Batch 执行并不依赖于这个属性,而仅仅依赖于 rewriteBatchedStatements。
说明
  • 如果 JDBC 版本小于等于 1.1.9,那么 allowMultiQueries 必须开启 update 语句才会用“;”拼接,否则将报错:Not supported feature or function。
  • 如果 JDBC 版本大于等于 2.2.6,那么 allowMultiQueries 是否开启是没有影响的。
rewriteBatchedStatementsFALSE决定了 Batch 执行中是否会重写 INSERT 语句。
  • 对于 PrepareStatement 对象,会使用多个 VALUES 来拼接;
  • 对于 Statement 对象,会使用分号来拼接多个 INSERT 语句。
useServerPrepStmtsFALSE决定了是否使用 Server 端的 Prepared 语句,仅对 PrepareStatement 对象有效。
  • TRUE 表示使用 Server 端的 Prepared 语句,这需要在 OBServer 端开启 _ob_enable_prepared_statement,同时意味着使用二进制协议进行通讯;
  • FALSE 表示使用 Client 端的 Prepared 语句,同时意味着使用文本协议进行通讯。
cachePrepStmtsFALSE/TRUE决定了 JDBC Driver 是否缓存 Prepared 语句,针对 Client 端的 Prepared 语句和 Server 端的 Prepared 语句,缓存的内容稍有不同。
说明
这个参数在 OceanBase Connector/J 1.x 中默认是 FALSE;在 OceanBase Connector/J 2.x 中默认是 TRUE。
prepStmtCacheSize25/250如果开启了 cachePrepStmts,决定了可以缓存多少条 Prepared statements。
说明
这个参数在 OceanBase Connector/J 1.x 中默认是 25;在 OceanBase Connector/J 2.x 中默认是 250。
prepStmtCacheSqlLimit256/2048如果开启了 cachePrepStmts,决定了可以缓存最大的 SQL 是多大。
说明
这个参数在 OceanBase Connector/J 1.x 中默认是 256;在 OceanBase Connector/J 2.x 中默认是 2048。
maxBatchTotalParamsNum30000当使用 executeBatch,决定了最大可以拼接多少个参数。
说明
这个参数仅在 OceanBase Connector/J 2.2.7 及以后才有。

哪些 OceanBase 数据库的配置项和 Batch 执行有关?

如下配置项和 Batch 执行有关系:

配置项默认值范围生效方式含义
ob_enable_batched_multi_statementFALSE租户动态用于设置是否启用批处理多条语句的功能。开启这个参数同时也意味着:在 Batch 执行场景下,当 Client/Server 使用文本协议进行通许时,OceanBase 数据库会对格式一致的多条 UPDATE 语句当成一条语句进行解析,并根据对应的参数和数据分布,生成 Batch physical plan。
_ob_enable_prepared_statementFALSE集群动态表示是否可以使用 Server 端的 Prepared 语句。
_enable_static_typing_engineTRUE集群动态指定是否使用新的 SQL 引擎。新老的 SQL 引擎对于是否能处理 Batch UPDATE 有差别,老引擎只能处理包含全部主键的 Batch UPDATE,新引擎能处理不包含全部主键的 Batch UPDATE。

变量默认值级别含义
_enable_dist_data_access_serviceTRUESESSION/GLOBAL打开或者关闭 SQL 以 DAS 的方式执行,若需要获得 Batch UPDATE 的优化能力,需要打开这个变量。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论