---
title: "partition_index_dive_limit - OceanBase 数据库 V4.2.1 | OceanBase 文档中心"
description: partition_index_dive_limit 说明 在 V4.2.x 版本中，该变量从 V4.2.5、V4.2.1 BP9 版本引入。 功能描述 partition_index_dive_limit 用于指示优化器使用存储层估行时分区数量限制。 权限要求 查询变量 Global 级别 sys 租户和所有用户租…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.1 LTS

# partition_index_dive_limit

更新时间：2026-04-16 00:11:37

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.1/zh-CN/700.reference/800.configuration-items-and-system-variables/200.system-variable/300.global-system-variable/10750.partition_index_dive_limit-global.md)

#### 说明

在 V4.2.x 版本中，该变量从 V4.2.5、V4.2.1 BP9 版本引入。

## 功能描述

`partition_index_dive_limit` 用于指示优化器使用存储层估行时分区数量限制。

## 权限要求

- 查询变量
     - Global 级别 sys 租户和所有用户租户均可以使用 `SHOW VARIABLES` 语句或视图 `SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE`（Oracle 模式）及视图 `information_schema.GLOBAL_VARIABLES`（MySQL 模式）查看 Global 系统变量的值。
     - Session 级别 sys 租户和所有用户租户均可以使用 `SHOW VARIABLES` 语句或视图 `SYS.TENANT_VIRTUAL_SESSION_VARIABLE`（Oracle 模式）及视图 `information_schema.SESSION_VARIABLES`（MySQL 模式）查看 Session 系统变量的值。
 - 修改变量
     - Global 生效
           - sys 租户可以直接修改 Global 系统变量的值。
           - MySQL 用户租户需要拥有 `SUPER` 或 `ALTER SYSTEM` 权限才能修改 Global 系统变量的值。
           - 对于 V4.x 版本，从 V4.2.0 版本开始，Oracle 用户租户需要拥有 `ALTER SYSTEM` 权限才能修改 Global 系统变量的值。
     - Session 生效 sys 租户和所有用户租户均可以直接修改本租户的 Session 系统变量的值。

## 属性说明

| **属性** | **描述** |
| --- | --- |
| 参数类型 | int |
| 默认值 | 10 |
| 取值范围 | [0, INT64_MAX]   #### 说明    其中：    - `0` 表示不设限。但允许设置为负数，含义与 `0` 相同。 - `INT64_MAX` 代表的是 64 位有符号整数类型的最大值。 |
| 生效范围 | Global/Session |
| 是否可修改 | 是 |

## 使用说明

修改该变量以控制优化器存储层估行时的分区数量限制：

- 当分区个数小于该变量时，总是选择所有分区做存储层估行。
 - 当分区个数大于等于该变量时，随机选择 `partition_index_dive_limit` 个分区进行存储层估行，并将估行结果等比例放大。
 - 当该变量为 `0` 时，总是选择所有分区做存储层估行。
 - 当 `range_index_dive_limit` 与 `partition_index_dive_limit` 同为负数时，存储层估行策略回滚到 V4.2.5 以前的版本，仅对单分区 10 个 range 以内做存储层估行，超过时也不会采样。

## 配置示例

1. 创建表并插入数据。

   ```shell
   obclient> CREATE TABLE t11(c1 int, c2 int, index i1(c2)) PARTITION BY range(c1) (partition p0 values less than(10), partition p1 values less than(20), partition p2 values less than(30));
   Query OK, 0 rows affected (0.112 sec)

   obclient> INSERT INTO t11 SELECT 1,1 FROM table(generator(10));
   Query OK, 10 rows affected (0.007 sec)
   Records: 10  Duplicates: 0  Warnings: 0

   obclient> INSERT INTO t11 SELECT 11,11 FROM table(generator(20));
   Query OK, 20 rows affected (0.003 sec)
   Records: 20  Duplicates: 0  Warnings: 0

   obclient> INSERT INTO t11 SELECT 21,21 FROM table(generator(30));
   Query OK, 30 rows affected (0.003 sec)
   Records: 30  Duplicates: 0  Warnings: 0

   ```
 2. 查看执行计划，默认场景下不超过 10 个分区均采用存储层估行。

   ```shell
   obclient [test]> EXPLAIN SELECT c1 FROM t11 WHERE c2 in (1,11,21);
   +---------------------------------------------------------------------------------------------------------------+
   | Query Plan                                                                                                    |
   +---------------------------------------------------------------------------------------------------------------+
   | =============================================================                                                 |
   | |ID|OPERATOR                 |NAME    |EST.ROWS|EST.TIME(us)|                                                 |
   | -------------------------------------------------------------                                                 |
   | |0 |PX COORDINATOR           |        |60      |253         |                                                 |
   | |1 |└─EXCHANGE OUT DISTR     |:EX10000|60      |234         |                                                 |
   | |2 |  └─PX PARTITION ITERATOR|        |60      |193         |                                                 |
   | |3 |    └─TABLE RANGE SCAN   |t11(i1) |60      |193         |                                                 |
   | =============================================================                                                 |
   | Outputs & filters:                                                                                            |
   | -------------------------------------                                                                         |
   |   0 - output([INTERNAL_FUNCTION(t11.c1)]), filter(nil), rowset=256                                            |
   |   1 - output([INTERNAL_FUNCTION(t11.c1)]), filter(nil), rowset=256                                            |
   |       dop=1                                                                                                   |
   |   2 - output([t11.c1]), filter(nil), rowset=256                                                               |
   |       force partition granule                                                                                 |
   |   3 - output([t11.c1]), filter(nil), rowset=256                                                               |
   |       access([t11.__pk_increment], [t11.c1]), partitions(p[0-2])                                              |
   |       is_index_back=true, is_global_index=false,                                                              |
   |       range_key([t11.c2], [t11.__pk_increment]), range(1,MIN ; 1,MAX), (11,MIN ; 11,MAX), (21,MIN ; 21,MAX),  |
   |       range_cond([t11.c2 IN (1, 11, 21)])                                                                     |
   +---------------------------------------------------------------------------------------------------------------+
   20 rows in set (0.007 sec)

   ```
 3. 修改变量，仅选择 1 个分区做存储层估行。

   ```shell
   obclient [test]> SET partition_index_dive_limit = 1;
   Query OK, 0 rows affected (0.000 sec)

   ```
 4. 查看执行计划，发现仅选择了一个分区做存储层估行，估行结果为 `10 * 3 = 30`。

   ```shell
   obclient [test]> EXPLAIN SELECT c1 FROM t11 WHERE c2 in (1,11,21);
   +---------------------------------------------------------------------------------------------------------------+
   | Query Plan                                                                                                    |
   +---------------------------------------------------------------------------------------------------------------+
   | =============================================================                                                 |
   | |ID|OPERATOR                 |NAME    |EST.ROWS|EST.TIME(us)|                                                 |
   | -------------------------------------------------------------                                                 |
   | |0 |PX COORDINATOR           |        |30      |148         |                                                 |
   | |1 |└─EXCHANGE OUT DISTR     |:EX10000|30      |139         |                                                 |
   | |2 |  └─PX PARTITION ITERATOR|        |30      |118         |                                                 |
   | |3 |    └─TABLE RANGE SCAN   |t11(i1) |30      |118         |                                                 |
   | =============================================================                                                 |
   | Outputs & filters:                                                                                            |
   | -------------------------------------                                                                         |
   |   0 - output([INTERNAL_FUNCTION(t11.c1)]), filter(nil), rowset=256                                            |
   |   1 - output([INTERNAL_FUNCTION(t11.c1)]), filter(nil), rowset=256                                            |
   |       dop=1                                                                                                   |
   |   2 - output([t11.c1]), filter(nil), rowset=256                                                               |
   |       force partition granule                                                                                 |
   |   3 - output([t11.c1]), filter(nil), rowset=256                                                               |
   |       access([t11.__pk_increment], [t11.c1]), partitions(p[0-2])                                              |
   |       is_index_back=true, is_global_index=false,                                                              |
   |       range_key([t11.c2], [t11.__pk_increment]), range(1,MIN ; 1,MAX), (11,MIN ; 11,MAX), (21,MIN ; 21,MAX),  |
   |       range_cond([t11.c2 IN (1, 11, 21)])                                                                     |
   +---------------------------------------------------------------------------------------------------------------+
   20 rows in set (0.003 sec)

   ```

## 相关文档

[range_index_dive_limit](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001417425)

 上一篇 下一篇 ![有帮助](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) 咨询热线
