OceanBase
  • 产品
  • 解决方案
  • 客户
  • 合作伙伴
  • 资源与服务
  • 文档
  • 社区
云控制台登录 / 注册
  • 免费试用
OceanBase AI 数据平台

基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。

一体化能力

TP 事务处理

关键业务稳定运行,保障数据零丢失

AP 实时分析

事务分析一体,驱动智能决策与运营

AI 现代负载

统一多模态数据,支撑生产级应用

关键产品
OceanBase 分布式数据库

首批通过安全可靠测评,面向关键业务

OceanBase 集中式数据库

集中式架构,兼具性能与成本优势

OceanBase AI 数据库

面向 AI 应用与 Agent 的多模数据库

OceanBase AI 湖库

湖库一体的 AI 多模态数据系统

OceanBase DataPilot

企业级 AI 数据分析 Agent

OceanBase Agentbase

企业级 Agent 后端基础设施

OceanBase OAgent

数据库 AI 运维 Agent

OB Cloud

一体化云数据库,提供多云一致体验

OceanBase 数据库一体机

软硬一体,极致性能与高可靠性保障

OceanBase AI 一体机

开箱即用的 AI 数据库一体机

OMA 迁移评估工具

全链路数据库迁移评估

OMS 数据迁移工具

一站式数据传输与同步

OCP 运维管理工具

数据库全生命周期管理

ODC 开发者工具

数据库开发与管控协同

OAS 自治服务工具

数据库智能诊断与自治

通用场景
全场景业务系统 OLTP
实时分析混合负载
异地多活
多基础设施部署
一站式传统数据库升级
混合云部署
一库多芯软硬件混合部署
分布式数据库单机部署
大存储类数据库降本
冷数据归档降本
多实例资源整合
分库分表一体化升级
高并发场景
数据中台
行业解决方案
国有大行和股份制银行核心系统解决方案
区域性银行核心系统解决方案
寿险核心系统解决方案
产险核心系统解决方案
资管交易类系统解决方案
资管 TA 清算类系统解决方案
运营商核心系统解决方案
人社核心系统解决方案
电力核心系统解决方案
行业专区
银行专区

助力银行完成各类核心业务系统升级

保险专区

寿险、产险核心系统升级的更佳选择

零售专区

助力200+零售行业客户规模化落地

DB 大咖说
oceanbase爱奇艺

百亿级卡券业务的“单库双擎”架构升级

oceanbase四川银行

800个测试用例选定分布式数据库

oceanbase太平洋保险

先难后易,核心系统数据库升级复盘

行业案例
oceanbase交通银行

核心数据库的“分布式革命”

oceanbase中国移动

B域核心CRM&BOSS近乎零改造分布式升级

oceanbase理想

打造领先的智能制造系统和自动驾驶体验

演讲实录
oceanbase中国联通

集团应用分布式数据库覆盖B/O/M域

oceanbase国泰海通

智能推送系统稳定支撑单日亿级消息处理量

oceanbase中国联合航空

中国首款机票盲盒背后的数据库力量

用户实践
oceanbase北京银行

最快速度完成40余套系统国产数据库升级

oceanbaseVIVO

替换 MySQL 分库分表,探索成本效益最优

oceanbase滴滴

数据库大规模运维体系建设及落地实践

合作伙伴
合作伙伴类型
联合解决方案
产业生态伙伴
经销商伙伴
技术服务伙伴
培训认证伙伴
生态联合解决方案
神州信息 x OceanBase 银行核心系统
长亮科技 x OceanBase 新核心系统
中电金信 x OceanBase 金融分布式核心系统
天阳科技 x OceanBase 贷记卡方案
易诚互动 x OceanBase 手机银行方案
恒生 x OceanBase UF3.0/O45/TA/估值方案
商业发行版
云树®数据库软件 ActionDB
服务
支持与服务
提交工单
软件下载
OceanBase 企业版
OceanBase 社区版
OB Cloud
学习
培训与认证
在线课堂
在线体验
开发者
开发者中心
资料
行业报告与白皮书
官方博客
年度发布会资料
开发者大会资料
oceanbase白皮书

金融核心系统数据库升级路径与场景实践

oceanbase白皮书

人社关键业务数据库一体化升级实践

产品文档
oceanbaseOceanBase 数据库
数据库一体机
oceanbaseOceanBase AI 数据库
工具与组件
oceanbaseOB Cloud 云数据库
驱动和中间件
快速上手
OceanBase 数据库
OB Cloud 云数据库
知识库
汇聚常见产品使用问题案例
在线体验

Demo与实验,感受 OceanBase 的核心能力与应用场景

OceanBase 最佳实践
了解 OceanBase 分布式数据库的架构与系统原理
技术博客

技术解析 | 用户实践 | 社区月报

在线课堂

电子书 |视频课程|在线培训

Developer Hub
应用开发Demo | 数据开发与集成工具
问答论坛

快速答疑 | 常见问题 | 技术交流

社区活动

Meetup | 技术公开课

GitHub

查看源码 | 贡献代码 | 建议反馈

加入社区

社区组织 | 社区用户贡献 |开发者贡献

进入社区首页
oceanbase数据库大赛

第六届OceanBase数据库大赛

oceanbase免费课程

《Easy Data x AI》:面向所有 AI 爱好者的 Data 与 AI 基础知识入门教程

切换语言
  • 中文站 - 简体中文
  • International - English
  • 日本站 - 日本語
  1. 文档中心
  2. OceanBase 最佳实践
  3. 配置 JDBC 和 OBServer 实现 Batch DML 最佳性能的最佳实践

配置 JDBC 和 OBServer 实现 Batch DML 最佳性能的最佳实践

更新时间:2026-07-28

github-fill编辑
编组分享
适用产品:OceanBase 数据库OB Cloud 云数据库
适用场景:开发

应用场景

在数据库应用中,当相同的 SQL 语句被频繁执行但参数各异时,可以通过优化策略实现批量执行。此过程需要客户端和 OBServer 端的协同。在客户端,可以通过调整 JDBC 参数,将 SQL 语句批量发送至 OBServer;而在服务端,OBServer 会对这些批量 SQL 进行改写,生成对应的批量执行计划。在某一端进行优化可能会带来一定的性能提升,但同时在客户端和 OBServer 端进行优化会更有效,能够全方位提高系统性能和响应速度。

这种优化方式能显著提高性能,主要体现在以下几个方面:

  1. JDBC 驱动能够一次性发送多条 SQL 语句,从而节省网络请求的开销。

  2. OBServer 对包含多条语句的 SQL 进行改写,生成批量执行计划,减少了参数化、查找计划缓存及构建和析构 SQL 执行上下文的开销,从多次减少为一次。

  3. 借助批量执行计划,OBServer 存储引擎也能优化批量操作,例如将数据批量写入 memtable,以及批量检查行锁和主键冲突。

本篇文章将阐明相关概念、不同使用模式下的配置方法,以及如何确认批量执行优化的实际应用。

面向读者

  • 解决方案架构师
  • DBA

关键概念

Multi Queries

Multi Queries 是 MySQL 模式下 JDBC 批量发送 SQL 的协议,它通过分号(“;”)将多条 SQL 语句连接在一起。这种方式可以减少客户端与服务端之间的通信次数,从而在一定程度上提升性能。尽管可以自由拼接 SQL 语句,如下面的示例所示,OBServer 端仍然会按照单条 SQL 的方式逐一执行:

-- 虽然是使用了multi queries,由于操作不同的表,这些语句不会在服务端进行批量执行
update t1 set b=2 where a=1;
update t2 set b=3 where a=2;
delete from t1 where a=3;

以下示例可以成功进行批量执行优化:

-- 同表的多条更新语句
update t1 set b=1 where a=1;
update t1 set b=2 where a=2;
update t1 set b=3 where a=3;
-- 同表的多条插入语句
insert into t1 select * from t2 where t2.c1 = 1;
insert into t1 select * from t2 where t2.c1 = 2;
-- 多条删除语句
delete from t1 where a = 1;
delete from t1 where a = 2;
delete from t1 where a = 3;

如果使用预编译语句(PreparedStatement, PS),格式如下:

prepare_stmt; // 定义 SQL 语句模板
addBatch();   // 绑定参数
...
addBatch();
executeBatch(); // 执行所有批量参数的语句

Array Binding

Array binding 是 Oracle 模式下的 JDBC 批量发送 SQL 的协议,仅在 PS 协议下使用。JDBC 驱动将 SQL 语句与参数拆分,将相同列类型的参数组合为数组发送到 OBServer,其用法与 MySQL 模式下的 PS 协议类似,本章节将不做赘述。

Multi Values Insert

使用 insert into t1 values(x), (y), (z)...; 语句插入多条数据,此语句本身可实现批量执行,因此执行性能较优。

如何配置

配置 OBServer

无论是 MySQL 模式还是 Oracle 模式,OBServer 的配置保持一致,与批量执行优化相关的配置项如下:

  • ALTER SYSTEM SET ob_enable_batched_multi_statement = true;
  • SET GLOBAL _nlj_batching_enabled = true;

ob_enable_batched_multi_statement 为租户级别配置项。设置 ob_enable_batched_multi_statement 后,OBServer 能够为通过 Multi queries 或 Array binding 方式发送的批量 SQL 生成执行计划。

_nlj_batching_enabled 为租户变量。设置 _nlj_batching_enabled 将启用 Nested Loop Join 的 Group Rescan 优化,尽管与 SQL 批量执行关系不大,但生成的批量执行计划中常常会利用这一优化,因此建议开启。

这两项配置都需要在租户下执行。

配置 JDBC

在应用程序通过数据库 URL 连接数据库时,可以设置相应的 JDBC 参数,例如:

conn=jdbc:oceanbase://xxx.xxx.xxx.xxx:2883/?rewriteBatchedStatements=TRUE&allowMultiQueries=TRUE&useLocalSessionState=TRUE&useUnicode=TRUE&characterEncoding=utf-8&socketTimeout=3000000&connectTimeout=60000&user=xxx@tenant&password=****

OceanBase 数据库会依据 JDBC 驱动连接时的租户名称判断运行模式(MySQL 或 Oracle)。

说明

当您使用 OB Cloud 云数据库时,尽管使用相同的 JDBC 参数配置,但连接字符串可能略有不同。请参考以下文档来获取针对云环境的 JDBC 连接配置示例:获取 OBCloud 云数据库连接参数 和 获取阿里云连接参数
请确保根据您的云服务提供的特定连接信息进行相应调整,以确保顺利连接到 OceanBase 数据库。

MySQL 模式配置

在 MySQL 模式下,JDBC 参数的配置建议如下:

conn=jdbc:oceanbase://xxx.xxx.xxx.xxx:2883/?allowMultiQueries=TRUE&rewriteBatchedStatements=TRUE&useLocalSessionState=TRUE&useUnicode=TRUE&characterEncoding=utf-8&socketTimeout=3000000&connectTimeout=60000&user=xxx@tenant&password=****
  • allowMultiQueries:默认为 FALSE,必须设置为 TRUE,以允许使用分号连接的多语句文本格式。对使用文本协议的场景,只需开启此配置即可实现批量优化。
  • rewriteBatchedStatements:默认为 FALSE,若使用 PS 协议,则必须设置为 TRUE,以在执行 executeBatch() 时将多条语句改写为分号连接的多语句格式。

在 MySQL 模式下,建议将这两个配置均设为 TRUE,以便在使用文本或 PS 协议时均可实现批量优化。

特例说明:开启 rewriteBatchedStatements 后,对于多条 multi queries 插入语句(无论使用文本协议或 PS 协议),JDBC 驱动会将其改写为一条 Multi Values Insert 语句。

说明

如果开启 allowMultiQueries 与 rewriteBatchedStatements 后出现了非预期报错,可以尝试关闭开关,并联系 OceanBase 技术服务人员确认原因。

Oracle 模式配置

在 Oracle 模式下,JDBC 参数的配置建议如下:

conn=jdbc:oceanbase://xxx.xxx.xxx.xxx:2883/?useArrayBinding=TRUE&useServerPrepStmts=TRUE&user=xxx@tenant&password=****
  • useArrayBinding:默认为 FALSE,需设置为 TRUE,并且在使用该设置时,必须禁止自动提交(即将 autoCommit 设置为 FALSE),以启用 array binding 协议,仅在 PS 协议下生效。在执行 executeBatch() 时,参数会以数组形式发送到 OBServer。
  • useServerPrepStmts:默认为 FALSE,设置为 TRUE 后将在服务器端进行 PrepareStatement,只有同时设置此参数,array binding 协议才会生效。

在 Oracle 模式下,建议这两个配置均设为 TRUE。

说明

由于 rewriteBatchedStatements 和 useServerPrepStmts 互斥,仅能选择其一,因此不能同时进行配置。

如何确认走到了批量优化

除了正确配置 OBServer 和 JDBC 外,SQL 语句还需符合以下要求:

  1. 在 Multi Queries 中,每条 SQL 必须具备高度一致性,即同构,以有效利用批量优化,从而确保高性能。此外,常量参数的类型也需保持一致,以避免类型转换,这有助于顺利生成最优的执行计划,进而提升查询的执行效率。

  2. 必须使用显式事务,通过设置 autocommit=0 或使用 BEGIN 开启事务。由于批量优化后,所有语句将作为一个整体执行,若其中一条出错则整体回滚,这与普通 multi queries 的行为不同。

  3. 一些复杂的 SQL 可能无法改写为批量执行形式,例如使用 Hash join 或包含 case...when 语句等。这些情况无法一一列举。因此,即便其他优化条件满足,OBServer 端未能实现批量执行也是正常的。

要确认 OBServer 是否实现了批量执行优化,可以通过以下方式:

  1. 如果对批量语句的改写原理较为了解,可以直接查看执行计划。通常,批量执行计划会使用 NLJ 算子连接由参数组组成的虚拟视图及原有的 Join order。

  2. 通过 trace_id 在视图 gv$ob_sql_audit 中查找 sql_id,然后再使用这个 sql_id 来查询执行计划的批量优化信息:

    -- 使用 trace_id 查找对应的 sql_id
    SELECT sql_id FROM gv$ob_sql_audit WHERE trace_id = 'your_trace_id';
    -- 使用查到的 sql_id 查询批量优化信息
    SELECT is_batched_multi_stmt FROM gv$OB_PLAN_CACHE_PLAN_STAT WHERE SQL_ID='xxxx';
    

    如果输出为 1,则表示实现了批量优化。

  3. 也可以在视图 gv$ob_plan_cache_stat 中直接查找执行语句的匹配项,例如:

    SELECT is_batched_multi_stmt FROM gv$OB_PLAN_CACHE_PLAN_STAT WHERE statement LIKE 'update t1 set c1=%';
    

相关文档

  • OceanBase 连接方式概述
  • OceanBase JDBC 连接池配置示例
  • OceanBase 数据库 URL

本文目录

应用场景面向读者关键概念Multi QueriesArray BindingMulti Values Insert如何配置配置 OBServer配置 JDBC如何确认走到了批量优化相关文档
有帮助
无帮助
反馈
AI

OceanBase

OceanBase 海扬数据库始创于 2010 年,是完全自主研发的数据库公司。2020年开始独立商业化运作,历经15年大规模核心场景验证,目前是中国数据库的领军企业之一。从分布式数据库到 AI 数据库,为企业提供安全、稳定、可扩展的数据底座,推动数据基础设施全面拥抱 AI 时代。

关于我们

关于 OceanBase最新动态资质荣誉客户专家委员会招贤纳士合作伙伴年度发布会开发者大会

资源与服务

支持与服务文档知识库软件与工具下载培训与认证在线体验数据库专题视频

社区

快速上手开发者中心博客活动学习问答GitHub

数据库百科

分布式数据库国产数据库OLTP 数据库OLAP 数据库HTAP 数据库数据库向量数据库向量检索

联系我们

服务热线:
400-109-0633
商务咨询
培训认证技术支持媒体合作
京公网安备11010802047223号京公网安备11010802047223号
京ICP备20024574号-1
合字B1.B2-20250395
网站服务协议隐私协议安全响应协议
OceanBase 版权所有 © 2026 基础资源和备案服务由阿里云提供