---
title: "监控索引 - OceanBase 数据库 V4.3.4 | OceanBase 文档中心"
description: 监控索引 OceanBase 数据库提供索引监控功能，并且可以使用视图 DBA_INDEX_USAGE 来查询索引监控结果，从而更清晰地了解索引的使用情况。当索引表被删除后，OceanBase 数据库会在后台定期清理相应的监控数据记录，无需手动删除。 说明 非用户租户的索引使用不在统计范围，视图 DBA_INDEX_…
---
切换语言

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

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

# 监控索引

更新时间：2024-11-28 23:00:00

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.3.4/zh-CN/700.reference/300.database-object-management/100.manage-object-of-mysql-mode/500.manage-indexes-of-mysql-mode/350.monitoring-indexes-of-mysql-mode.md)  

OceanBase 数据库提供索引监控功能，并且可以使用视图 DBA_INDEX_USAGE 来查询索引监控结果，从而更清晰地了解索引的使用情况。当索引表被删除后，OceanBase 数据库会在后台定期清理相应的监控数据记录，无需手动删除。

#### 说明

非用户租户的索引使用不在统计范围，视图 `DBA_INDEX_USAGE` 仅展示用户租户数据。

## 注意事项

- 设置租户级配置项 `_iut_stat_collection_type=ALL` 模式可能会导致索引查询性能的一定程度下降。因此，在使用该模式时需要谨慎考虑，并权衡性能回退的影响。
 - 配置项 `_iut_max_entries` 设置保存的索引表上限，该配置项设置过大可能会造成租户内存消耗较多，因此不建议设置超过 30000。

## 使用说明

- 索引监控功能默认处于启动状态，并且在默认的采样（SAMPLED）模式下，其对性能的影响是非常小的，可以认为是可以忽略的。

## 配置项

为了控制监控索引的监控方式，OceanBase 数据库提供以下租户级的配置项可供修改。

#### 说明

不同租户之间的配置参数和数据汇总是相互独立的，它们之间不会相互干扰。

| **配置项** | **默认值** | **说明** |
| --- | --- | --- |
| _iut_enable | true | 控制索引监控是否开启。默认值为 `true`，表示打开监控；`false` 表示关闭监控。 |
| _iut_max_entries | 30000 | 控制监控的索引表数量。默认为 30000，取值范围 [0, +∞)。   #### 说明    - 此配置项可以控制索引监控视图展示的最多的记录数，每张索引表只会占用一条记录。 - 当租户下的索引表数量超过该配置项的值时，可能出现后建的索引表被引用的信息无法被监控到，从而导致误判的情况。 |
| _iut_stat_collection_type | SAMPLED | 控制索引监控信息统计的模式。有以下两种取值可选：   - `SAMPLED`：默认值，表示按采样模式监控索引的使用，采样率为 10%（采样率不可更改）。     #### 说明       - 采样方式是通过索引表被引用的次数，而不是索引表的数量。     - 在采样模式下，数据的准确性并不是绝对的。由于采样模式的目的在于筛选出一部分数据，因此可能会出现个别查询操作没有被记录下来的情况。 - `ALL`：表示全量监控索引表的使用，此模式虽然可以得到准确的结果，但是会有资源开销，谨慎开启。 |

### 索引监控信息统计的模式

因为索引监控在集群启动时采用默认的采样（`SAMPLED`）模式，这种模式下并非所有索引使用数据都会被记录到内部表，视图 `DBA_INDEX_USAGE` 可能出现查询结果为空的情况。如果需要准确的信息，可以在当前租户下将监控索引信息收集模式设置为 `ALL`。

可以使用以下 SQL 语句来查看配置项 `_iut_stat_collection_type` 的值：

```sql
SELECT name, data_type, value FROM oceanbase.GV$OB_PARAMETERS WHERE name LIKE '%iut_stat_collection%';

```

可以使用以下 SQL 语句来设置：

```sql
ALTER SYSTEM SET _iut_stat_collection_type="ALL";

```

## 示例

1. 创建表 `test_tbl1`。

   ```sql
   obclient [test_db]> CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(50) NOT NULL, col3 INT);

   ```
 2. 在表 `test_tbl1` 的列 `col3` 上创建了一个名为 `idx1_test_tbl1` 的索引。

   ```sql
   obclient [test_db]> CREATE INDEX idx1_test_tbl1 ON test_tbl1(col3);

   ```
 3. 向表 `test_tbl1` 中插入 `5` 条数据。

   ```sql
   obclient [test_db]> INSERT INTO test_tbl1 VALUES (1, 'name1', 20),(2, 'name2', 19),(3, 'name3', 20),(4, 'name4', 29),(5, 'name5', 26);

   ```

   返回结果如下：

   ```shell
   Query OK, 5 rows affected
   Records: 5  Duplicates: 0  Warnings: 0

   ```
 4. 执行 `SELECT` 查询。

   ```sql
   obclient [test_db]> SELECT col1, col2 FROM test_tbl1 WHERE col3 >= 25;

   ```

   返回结果如下：

   ```shell
   +------+-------+
   | col1 | col2  |
   +------+-------+
   |    5 | name5 |
   |    4 | name4 |
   +------+-------+
   2 rows in set

   ```
 5. 查看视图 `DBA_INDEX_USAGE`。

   #### 说明

   索引监控在收集统计信息后，通过后台定时任务把数据刷到内部表，可能最长需要等待15分钟，才能在视图中查询到索引使用的监控结果。

   ```sql
   obclient [test_db]> SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM oceanbase.DBA_INDEX_USAGE;

   ```

   返回结果如下：

   ```shell
   Empty set

   ```

   默认 `SAMPLED` 模式下，并非所有索引使用数据都会被记录到内部表，可能在视图中查询不到预期的监控结果。可以通过 SQL 语句修改为非采样模式来收集数据，例如以下操作：

      1. 使用以下 SQL 语句来设置监控索引信息收集模式为 `ALL`。

        ```
      2. 再次执行 `SELECT` 查询。

        ```sql
        SELECT col1, col2 FROM test_tbl1 WHERE col3 >= 25;

        ```
      3. 再次查看视图 `DBA_INDEX_USAGE`。

        #### 说明

        索引监控在收集统计信息后，通过后台定时任务把数据刷到内部表，可能最长需要等待 15 分钟，才能在视图中查询到索引使用的监控结果。

        ```sql
        SELECT OBJECT_ID, NAME, OWNER, TOTAL_ACCESS_COUNT, TOTAL_EXEC_COUNT, LAST_USED FROM oceanbase.DBA_INDEX_USAGE;

        ```

        返回结果如下：

        ```shell
        +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+
        | OBJECT_ID | NAME                        | OWNER   | TOTAL_ACCESS_COUNT | TOTAL_EXEC_COUNT | LAST_USED                  |
        +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+
        |    500127 | __idx_500126_idx1_test_tbl1 | test_db |                  1 |                1 | 2024-01-24 11:09:30.928232 |
        +-----------+-----------------------------+---------+--------------------+------------------+----------------------------+
        1 row in set

        ```

        **查询结果说明：**

        `TOTAL_ACCESS_COUNT` 字段说明了 `SELECT` 操作时，`test_db` 数据库下名为 `idx1_test_tbl1`（`__idx_500126_idx1_test_tbl1`）的索引被访问了 `1` 次，最后被访问的时间点为 `2024-01-24 11:09:30.928232`。

        **字段说明如下：**

             - `OBJECT_ID`：索引表 ID。
             - `NAME`：索引表名。
             - `OWNER`：数据库名。
             - `TOTAL_ACCESS_COUNT`：总共访问次数。
             - `TOTAL_EXEC_COUNT`：总共执行次数。
             - `LAST_USED`：索引表最后一次被使用的时间。

        更多有关视图 `DBA_INDEX_USAGE` 字段的详细信息，请参见 [DBA_INDEX_USAGE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001575871)。

## 相关文档

- [创建表](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576041)
 - [创建索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576029)
 - [删除索引](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000001576026)

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