---
title: 关于系统视图中的 IS_BATCHED_MULTI_STMT 和 PARAMS_VALUE、PARAM_INFOS 的说明-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于关于系统视图中的 IS_BATCHED_MULTI_STMT 和 PARAMS_VALUE、PARAM_INFOS 的说明相关的常见问题和使用技巧，帮助您快速解决关于系统视图中的 IS_BATCHED_MULTI_STMT 和 PARAMS_VALUE、PARAM_INFOS 的说明的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# 关于系统视图中的 IS_BATCHED_MULTI_STMT 和 PARAMS_VALUE、PARAM_INFOS 的说明

更新时间：2026-07-31 09:11

适用版本： V4.0.x、V4.1.x、V4.2.x、V4.3.x、V4.4.x 内容类型：TechNote  

OceanBase 数据库 V4.x 版本 sys 租户和所有业务租户的 `gv$ob_sql_audit` 视图中均提供了 `is_batched_multi_stat` 和 `params_value` 这两个字段，而 `gv$ob_plan_cache_plan_stat` 视图中则提供了 `is_batched_multi_stat`和 `param_infos` 这两个字段。 本文主要介绍这几个字段之间的关系以及在不同场景下的取值说明。

## 详细说明

**在 `gv$ob_sql_audit` 视图中：**

| 字段名称 | 类型 | 是否可以为 NULL | 描述 |
| --- | --- | --- | --- |
| IS_BATCHED_MULTI_STMT | tinyint(4) | NO | 是否进行 Batch Multi Stmt 的优化 |
| PARAMS_VALUE | longtext | NO | PS 绑定的参数值 |

**在 gv$ob_plan_cache_plan_stat 视图中：**

| 字段名称 | 类型 | 是否可以为 NULL | 描述 |
| --- | --- | --- | --- |
| PARAM_INFOS | longtext | NO | 执行计划被参数化后，所有被参数化参数的数据类型 |
| IS_BATCHED_MULTI_STMT | tinyint(4) | NO | 表示是否为 Batched Multi Stmt 优化的计划 |

### IS_BATCHED_MULTI_STAT

`gv$ob_sql_audit` 视图中的 `is_batched_multi_stat` 可以通过 `svr_ip+svr_port+tenant_id+plan_id` 四元组跟 `gv$ob_plan_cache_plan_stat` 中的 `is_batched_multi_stat` 关联对应起来。正常情况下，这两个字段取值应该完全一致；或者都是 0，代表未使用 Batch 成组执行优化；或者都是 1，代表使用了 Batch 成组执行优化。

- **is_batched_multi_stmt=0：**

     - **场景一：** 非 Batch DML、非 ArrayBinding 执行。
     - **场景二：** SQL 被 `rewriteBatchedStmts=true` 选项改写成单条 `multi-values insert` 语句（即类似 `insert into xxx values (...),(...),(...)` 这样的单条 SQL 语句）。
     - **场景三：** 走 PS 二进制协议时，`batch update/delete` 不支持被 `rewriteBatchedStmts=true` 选项改写为 `multi-stmt update/delete`，退化为每条 `update/delete` 语句都提交一次。
     - **场景四：** 走 ArrayBinding 协议执行，但是业务租户的 `ob_enable_batched_multi_stat=False`。
     - **场景五：** 走 ArrayBinding 协议执行，但是该 Batch 中只包含了一条记录。
 - **is_batched_multi_stmt=1：**

     - **场景一：** 走文本协议时，SQL 被 `rewriteBatchedStmts=true` 选项改写成多条以`;`分隔的 `multi-stmt update/delete` 语句（即类似 `update t set b='value1' where a=1;update t set b='value2' where a=2;` 或者 `delete from t where id=1;delete from t where id=2;` 这样格式一致的多条 `update/delete` 语句）。
     - **场景二：** 走 ArrayBinding 协议执行，同时业务租户的 `ob_enable_batched_multi_stat=True`，且该 Batch 中包含了多条记录。

### PARAMS_VALUE

- **params_value=""：** 代表该 SQL 走了普通文本协议（对应使用了 `Statement` 类）或 PS 文本协议（对应使用了 `PreparedStatement` 类）。
 - **params_value=NULL,NULL,NULL,...,：** 代表该 SQL 走了 ArrayBinding 协议（使用或者未使用 Batch 成组执行优化），这边的 NULL 的个数等于 `QUERY_SQL` 语句中绑定的 PS 变量的数目：

  ```shell
                 query_sql: INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
              params_value: NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
             affected_rows: 3
     is_batched_multi_stmt: 1
         PS_CLIENT_STMT_ID: 1
          ps_inner_stmt_id: -1

  ```
 - **params_value=以逗号分隔的一组具体的取值：** 代表该 SQL 走了 PS 二进制协议，这边的每个取值依次对应该条记录的 `QUERY_SQL` 中的一个 `?` 占位符：

  ```shell
                 query_sql: INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?), (?, ?, ?, ?, ?, ?, ?, ?)
              params_value: 7369,'SMITH','CLERK',7902,'1980-12-17 00:00:00',800,0,20,7499,'ALLEN','SALESMAN',7698,'1981-02-20 00:00:00',1600,300,30,7521,'WARD','SALESMAN',7698,'1981-02-22 00:00:00',1250,500,30
             affected_rows: 3
     is_batched_multi_stmt: 0
         PS_CLIENT_STMT_ID: 2
          ps_inner_stmt_id: 28

  ```

### PARAM_INFOS

`gv$plan_cache_plan_stat` 视图中的 `PARAM_INFOS` 记录执行计划被参数化后，所有被参数化参数的数据类型：

- **如果使用了 PS 二进制协议：** `PARAM_INFOS` 跟 `QUERY_SQL` 中所有的PS绑定变量的数据类型一一对应：

  ```shell
  MySQL [oceanbase]> select * from gv$ob_plan_cache_plan_stat where plan_id=4605\G
  *************************** 1. row ***************************
              STATEMENT: delete from emp where job=? and ename=? and empno > 1
              QUERY_SQL: delete from emp where job=? and ename=? and empno > 1
         SPECIAL_PARAMS:
            PARAM_INFOS: {1,0,0,-1,23},{1,0,0,-1,23}

  ```

  比如这边 PS 绑定变量有两个，所以 `PARAM_INFOS` 对应了这两个 PS 绑定变量的数据类型。
 - **如果未使用 PS 二进制协议：** `PARAM_INFOS` 则对应了 `QUERY_SQL` 中所有的被参数化常量的数据类型：

  ```shell
  MySQL [oceanbase]> select * from gv$ob_plan_cache_plan_stat where plan_id=4714\G                                                           *************************** 1. row ***************************
              STATEMENT: delete from emp where job= ? and ename= ? and empno > ?
              QUERY_SQL: delete from emp where job= 'SALESMAN' and ename= 'SMITH' and empno > 1;delete from emp where job= 'CLERK' and ename= 'ALLEN' and empno > 1;delete from emp where job= 'CLERK' and ename= 'WARD' and empno > 1
         SPECIAL_PARAMS:
            PARAM_INFOS: {1,0,0,-1,23},{1,0,0,-1,23},{1,0,0,-85,15}

  ```

### 备注

目前 `gv$ob_sql_audit` 视图中的 `is_batched_multi_stmt` 字段有个已知的问题：即使 Batch DML 使用了 ArrayBinding 协议及 Batch 成组执行优化，这个 `is_batched_multi_stmt` 字段还是为 0，该问题修复在 OceanBase 数据库 V4.2.1 BP9（oceanbase-4.2.1.9-109000092024091919）、V4.2.5 BP4（oceanbase-4.2.5.4-104000082025052817）、V4.3.5 BP2（oceanbase-4.3.5.2-102000162025051417）版本。`gv$ob_plan_cache_plan_stat` 中的 `is_batched_multi_stmt` 则一直是准确的，可以优先参考使用后者。

## 适用版本

OceanBase 数据库 V4.x 版本。

Previous

[gv$ob_sql_audit 视图查询结果与预期不符问题的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003401600)

Next

[嵌套物化视图使用说明](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002339988) ![有帮助](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) 咨询热线
