- 从功能上说,使用 Batch 执行必须要设置
rewriteBatchedStatements=TRUE; - 从实现和行为上说,useServerPrepStmts 会决定 Batch 执行的不同行为;
- 从性能上说,cachePrepStmt、prepStmtCacheSize、prepStmtCacheSqlLimit、maxBatchTotalParamsNum 都会对性能有所提升。
如下是有关配置属性的说明:
| 配置属性 | 默认值 | 说明 |
|---|---|---|
| allowMultiQueries | FALSE | 决定了一条语句中是否可以用“;”分割多个请求,Batch 执行并不依赖于这个属性,而仅仅依赖于 rewriteBatchedStatements。说明 |
| rewriteBatchedStatements | FALSE | 决定了 Batch 执行中是否会重写 INSERT 语句。
|
| useServerPrepStmts | FALSE | 决定了是否使用 Server 端的 Prepared 语句,仅对 PrepareStatement 对象有效。
|
| cachePrepStmts | FALSE/TRUE | 决定了 JDBC Driver 是否缓存 Prepared 语句,针对 Client 端的 Prepared 语句和 Server 端的 Prepared 语句,缓存的内容稍有不同。说明 |
| prepStmtCacheSize | 25/250 | 如果开启了 cachePrepStmts,决定了可以缓存多少条 Prepared statements。说明 |
| prepStmtCacheSqlLimit | 256/2048 | 如果开启了 cachePrepStmts,决定了可以缓存最大的 SQL 是多大。说明 |
| maxBatchTotalParamsNum | 30000 | 当使用 executeBatch,决定了最大可以拼接多少个参数。说明 |
哪些 OceanBase 数据库的配置项和 Batch 执行有关?
如下配置项和 Batch 执行有关系:
| 配置项 | 默认值 | 范围 | 生效方式 | 含义 |
|---|---|---|---|---|
| ob_enable_batched_multi_statement | FALSE | 租户 | 动态 | 用于设置是否启用批处理多条语句的功能。开启这个参数同时也意味着:在 Batch 执行场景下,当 Client/Server 使用文本协议进行通许时,OceanBase 数据库会对格式一致的多条 UPDATE 语句当成一条语句进行解析,并根据对应的参数和数据分布,生成 Batch physical plan。 |
| _ob_enable_prepared_statement | FALSE | 集群 | 动态 | 表示是否可以使用 Server 端的 Prepared 语句。 |
| _enable_static_typing_engine | TRUE | 集群 | 动态 | 指定是否使用新的 SQL 引擎。新老的 SQL 引擎对于是否能处理 Batch UPDATE 有差别,老引擎只能处理包含全部主键的 Batch UPDATE,新引擎能处理不包含全部主键的 Batch UPDATE。 |
| 变量 | 默认值 | 级别 | 含义 |
|---|---|---|---|
| _enable_dist_data_access_service | TRUE | SESSION/GLOBAL | 打开或者关闭 SQL 以 DAS 的方式执行,若需要获得 Batch UPDATE 的优化能力,需要打开这个变量。 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




