---
title: Prepare+Execute 二合一协议介绍-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 Prepare+Execute 二合一协议介绍相关的常见问题和使用技巧，帮助您快速解决 Prepare+Execute 二合一协议介绍的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# Prepare+Execute 二合一协议介绍

更新时间：2026-03-13 06:11

二合一协议简单来说就是 prepare 协议 + execute 协议的结合，将两个协议融合成了同一个协议，使用同一个命令字发送过来的协议。

## 适用版本

OceanBase 数据库所有版本。

## SQL 语句协议

执行一条 SQL 语句的协议分为两大类：文本协议和 PS 协议。

- 文本协议：文本协议是一种基于文本的协议，用于在客户端和服务器之间传输 SQL 查询和结果。直白来说，就是执行什么语句传输什么语句的文本，不会有参数绑定等操作。
 - PS 协议：是二进制协议中的一种，叫做预处理协议，用于支持预处理语句（Prepared Statement），客户端可以将参数绑定到查询语句中。它包括客户端发送参数绑定请求报文、服务器返回参数绑定结果报文等步骤。

     - 广义上来讲，PS 协议包含了普通的 PS 协议（prepare + execute）和二合一协议，这两种协议是 PS 协议在 OceanBase 数据库中的两种不同的实现方式。
     - 二合一协议是 PS 协议的另一种形式，也会做预处理语句，绑定参数，唯一的区别是，二合一协议的 prepare 和 execute 是放在一个协议包中执行的。

## 什么情况下会走到二合一协议

- OBCI 默认走二合一协议，只有设置了 export ENABLE_PREPARE_EXECUTE=0 才会不走二合一协议。
 - OCCI 默认走二合一协议，只有设置了 export ENABLE_PREPARE_EXECUTE=0 才会不走二合一协议。
 - JDBC 链接串设置，满足以下两个任意条件都会开启二合一协议：

     - useServerPrepStmts=true&usePieceData=true（usePieceData=true 在 MySQL 租户无效，因为 MySQL 模式没有 PS 二合一协议）。
     - useOraclePrepareExecute=true（仅限 Oracle 租户）。

## 如何判断当前问题是否走了二合一协议

- 首先可以参考上文中的设置，满足了 3 中的设置就可能走二合一协议。
 - 对于报错的语句，server 日志里如果有 obmp_stmt_prexecute 文件相关的日志，可以确定走了二合一协议。

## 二合一协议与 ps cursor 的关系

- ps cursor：ps 协议下的查询语句，可以通过 cursor 对结果集进行缓存，然后用 fetch 协议批量获取，避免把结果集一次性传递给驱动，导致驱动的 OOM。
 - 目前，二合一协议下，所有 select 语句都会默认走 ps cursor。所以当一个查询语句在 二合一协议下出现执行慢等问题，可以考虑一下 ps cursor 的因素。

上一篇

[如何通过抓包判断 PS 协议使用了 cursor 方式获取数据](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000532686)

下一篇

[不同版本的 MySQL/OBClient 客户端的注释处理差异](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000210058) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
