---
title: 如何创建 Outline 并验证 Outline 生效-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 如何创建 Outline 并验证 Outline 生效相关的常见问题和使用技巧，帮助您快速解决 如何创建 Outline 并验证 Outline 生效的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 如何创建 Outline 并验证 Outline 生效

更新时间：2026-05-15 09:06

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x 内容类型：How-to  

本文介绍如何在 OceanBase 数据库中使用 Outline 绑定执行计划并验证绑定的执行计划生效。

## 使用 SQL_ID 创建 Outline

1. 创建测试表 t1。

   ```shell
   obclient [TEST0113]> CREATE TABLE t1(c1 int,c2 int,c3 int);
   Query OK, 0 rows affected (1.463 sec)

   ```
 2. 插入测试数据。

   ```shell
   obclient [TEST0113]> INSERT INTO t1 VALUES(1,1,1),(2,2,2),(3,3,3);
   Query OK, 3 rows affected (0.020 sec)
   Records: 3  Duplicates: 0  Warnings: 0

   ```
 3. 提交插入数据。

   ```shell
   obclient [TEST0113]> SELECT COUNT(*) FROM t1;

   ```

   输出结果如下：

   ```shell
   +----------+
   | COUNT(*) |
   +----------+
   |        3 |
   +----------+
   1 row in set (0.056 sec)

   ```
 4. 查询全局 SQL 审计表 `GV$OB_SQL_AUDIT` 获取实际的 SQL 语句的 SQL_ID。（V2.x 和 V3.x 版本中视图为 `GV$SQL_AUDIT`）

   ```shell
   obclient [TEST0113]> SELECT SQL_ID FROM GV$OB_SQL_AUDIT WHERE QUERY_SQL LIKE '%SELECT COUNT(*) FROM t1%';

   ```

   输出结果如下：

   ```shell
   +----------------------------------+
   | SQL_ID                           |
   +----------------------------------+
   | 69AE2D9E3BF106CE009F93EFAF925EC8 |
   +----------------------------------+
   1 row in set (0.084 sec)

   ```
 5. 通过 SQL_ID 查询计划缓存视图 `GV$OB_PLAN_CACHE_PLAN_STAT` 获取 OUTLINE 相关信息。（V2.x 和 V3.x 版本中视图为 `GV$PLAN_CACHE_PLAN_STAT`）

   ```shell
   obclient [TEST0113> SELECT SQL_ID,PLAN_ID,QUERY_SQL,OUTLINE_ID,OUTLINE_DATA FROM GV$OB_PLAN_CACHE_PLAN_STAT WHERE SQL_ID='69AE2D9E3BF106CE009F93EFAF925EC8';

   ```

   输出结果如下：

   ```shell
   +----------------------------------+---------+-------------------------+------------+----------------------------------------------------------------------------------------------------------------------+
   | SQL_ID                           | PLAN_ID | QUERY_SQL               | OUTLINE_ID | OUTLINE_DATA                                                                                                         |
   +----------------------------------+---------+-------------------------+------------+----------------------------------------------------------------------------------------------------------------------+
   | 69AE2D9E3BF106CE009F93EFAF925EC8 |    3451 | select count(*) from t1 |         -1 | /*+BEGIN_OUTLINE_DATA FULL(@"SEL$1" "TEST0113"."T1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.2.1.0') END_OUTLINE_DATA*/ |
   +----------------------------------+---------+-------------------------+------------+----------------------------------------------------------------------------------------------------------------------+
   1 row in set (0.028 sec)

   ```
 6. 使用 SQL_ID 创建 Outline。

   ```shell
   obclient [TEST0113]> CREATE OUTLINE outline_1 ON '69AE2D9E3BF106CE009F93EFAF925EC8' USING HINT /*+ parallel(2)*/ ;
   Query OK, 0 rows affected (0.921 sec)

   ```
 7. 通过查询视图 `DBA_OB_OUTLINES` 展示本租户的执行计划 Outline 信息。（V2.x 和 V3.x 版本中视图为 `GV$OUTLINE`）

   ```shell
   obclient [TEST0113]> SELECT OUTLINE_ID,OUTLINE_NAME,SQL_ID FROM DBA_OB_OUTLINES;

   ```

   输出结果如下：

   ```shell
   +------------+--------------+----------------------------------+
   | OUTLINE_ID | OUTLINE_NAME | SQL_ID                           |
   +------------+--------------+----------------------------------+
   |     529040 | OUTLINE_1    | 69AE2D9E3BF106CE009F93EFAF925EC8 |
   +------------+--------------+----------------------------------+
   1 row in set (0.029 sec)

   ```
 8. 验证 Outline 绑定计划生效。

   如果 `OUTLINE_ID` 与在 `DBA_OB_OUTLINES` 中查到的 `OUTLINE_ID` 相同，则表示是按绑定的 Outline 生成的执行计划，如果是 `-1` 表示不是通过绑定 Outline 生成的计划。

      1. 通过 SQL_ID 查询计划缓存视图 `GV$OB_PLAN_CACHE_PLAN_STAT` 获取 OUTLINE 相关信息。（V2.x 和 V3.x 版本中视图为 `GV$PLAN_CACHE_PLAN_STAT`）

        ```shell
        obclient [TEST0113]> SELECT SQL_ID,PLAN_ID,QUERY_SQL,OUTLINE_ID,OUTLINE_DATA FROM GV$OB_PLAN_CACHE_PLAN_STAT WHERE SQL_ID='69AE2D9E3BF106CE009F93EFAF925EC8';

        ```

        输出结果如下：

        ```shell
        +----------------------------------+---------+-------------------------+------------+----------------------------------------------------------------------------------------------------------------------+
        | SQL_ID                           | PLAN_ID | QUERY_SQL               | OUTLINE_ID | OUTLINE_DATA                                                                                                         |
        +----------------------------------+---------+-------------------------+------------+----------------------------------------------------------------------------------------------------------------------+
        | 69AE2D9E3BF106CE009F93EFAF925EC8 |    3451 | select count(*) from t1 |         -1 | /*+BEGIN_OUTLINE_DATA FULL(@"SEL$1" "TEST0113"."T1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.2.1.0') END_OUTLINE_DATA*/ |
        +----------------------------------+---------+-------------------------+------------+----------------------------------------------------------------------------------------------------------------------+
        1 row in set (0.089 sec)

        ```
      2. 查询测试表 t1 内容。

        ```

        输出结果如下：

        ```shell
        +----------+
        | COUNT(*) |
        +----------+
        |        3 |
        +----------+
        1 row in set (0.011 sec)

        ```
      3. 再次通过 SQL_ID 查询计划缓存视图 `GV$OB_PLAN_CACHE_PLAN_STAT` 获取 OUTLINE 相关信息。（V2.x 和 V3.x 版本中视图为 `GV$PLAN_CACHE_PLAN_STAT`）

        ```

        输出结果如下：

        ```shell
        +----------------------------------+---------+-------------------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        | SQL_ID                           | PLAN_ID | QUERY_SQL               | OUTLINE_ID | OUTLINE_DATA                                                                                                                                                                                         |
        +----------------------------------+---------+-------------------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        | 69AE2D9E3BF106CE009F93EFAF925EC8 |    3474 | select count(*) from t1 |     529040 | /*+BEGIN_OUTLINE_DATA GBY_PUSHDOWN(@"SEL$1") PARALLEL(@"SEL$1" "TEST0113"."T1"@"SEL$1" 2) FULL(@"SEL$1" "TEST0113"."T1"@"SEL$1") PARALLEL(2) OPTIMIZER_FEATURES_ENABLE('4.2.1.0') END_OUTLINE_DATA*/ |
        +----------------------------------+---------+-------------------------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        1 row in set (0.019 sec)

        ```

## 使用 SQL_TEXT 创建 Outline

1. 创建测试表 t1。

   ```shell
   obclient [TEST0113]> CREATE TABLE t1(c1 INT,c2 INT,c3 INT);
   Query OK, 0 rows affected (0.176 sec)

   ```shell
   obclient [TEST0113]> INSERT INTO t1 VALUES(1,1,1),(2,2,2),(3,3,3);
   Query OK, 3 rows affected (0.120 sec)
   Records: 3  Duplicates: 0  Warnings: 0

   ```shell
   obclient [TEST0113]> COMMIT;
   Query OK, 0 rows affected (0.013 sec)

   ```
 4. 查询测试表 t1 内容。

   ```shell
   obclient [TEST0113]> SELECT * FROM t1;

   ```

   输出结果如下：

   ```shell
   +------+------+------+
   | C1   | C2   | C3   |
   +------+------+------+
   |    1 |    1 |    1 |
   |    2 |    2 |    2 |
   |    3 |    3 |    3 |
   +------+------+------+
   3 rows in set (0.093 sec)

   ```
 5. 查询全局 SQL 审计表 `GV$OB_SQL_AUDIT` 获取实际的 SQL 语句的 SQL_ID。（V2.x 和 V3.x 版本中视图为 `GV$SQL_AUDIT`）

   ```shell
   obclient [TEST0113]> SELECT SQL_ID FROM GV$OB_SQL_AUDIT WHERE QUERY_SQL LIKE 'SELECT * FROM t1';

   ```

   输出结果如下：

   ```shell
   +----------------------------------+
   | SQL_ID                           |
   +----------------------------------+
   | 6F85AFBFA98A19D78AB7FD9D46ED3C0C |
   +----------------------------------+
   1 row in set (0.108 sec)

   ```
 6. 通过 SQL_ID 查询计划缓存视图 `GV$OB_PLAN_CACHE_PLAN_STAT` 获取 OUTLINE 相关信息。（V2.x 和 V3.x 版本中视图为 `GV$PLAN_CACHE_PLAN_STAT`）

   ```shell
   obclient [TEST0113]> SELECT SQL_ID,PLAN_ID,QUERY_SQL,OUTLINE_ID,OUTLINE_DATA FROM GV$OB_PLAN_CACHE_PLAN_STAT WHERE SQL_ID='6F85AFBFA98A19D78AB7FD9D46ED3C0C';

   ```

   输出结果如下：

   ```shell
   +----------------------------------+---------+------------------+------------+----------------------------------------------------------------------------------------------------------------------+
   | SQL_ID                           | PLAN_ID | QUERY_SQL        | OUTLINE_ID | OUTLINE_DATA                                                                                                         |
   +----------------------------------+---------+------------------+------------+----------------------------------------------------------------------------------------------------------------------+
   | 6F85AFBFA98A19D78AB7FD9D46ED3C0C |    4508 | SELECT * FROM t1 |         -1 | /*+BEGIN_OUTLINE_DATA FULL(@"SEL$1" "TEST0113"."T1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.2.1.0') END_OUTLINE_DATA*/ |
   +----------------------------------+---------+------------------+------------+----------------------------------------------------------------------------------------------------------------------+
   1 row in set (0.019 sec)

   ```
 7. 使用 SQL_TEXT 创建 Outline。

   ```shell
   obclient [TEST0113]> CREATE OUTLINE outline_1 ON SELECT /*+ PARALLEL(2)*/ * FROM t1;
   Query OK, 0 rows affected (0.63 sec)

   ```
 8. 通过查询视图 `DBA_OB_OUTLINES` 展示本租户的执行计划 Outline 信息。（V2.x 和 V3.x 版本中视图为 `GV$OUTLINE`）

   ```

   输出结果如下：

   ```shell
   +------------+--------------+----------------------------------+
   | OUTLINE_ID | OUTLINE_NAME | SQL_ID                           |
   +------------+--------------+----------------------------------+
   |     529047 | OUTLINE_1    | 6F85AFBFA98A19D78AB7FD9D46ED3C0C |
   +------------+--------------+----------------------------------+
   1 row in set (0.198 sec)

   ```
 9. 验证 Outline 绑定计划生效。

        ```

        输出结果如下：

        ```shell
        +----------------------------------+---------+------------------+------------+----------------------------------------------------------------------------------------------------------------------+
        | SQL_ID                           | PLAN_ID | QUERY_SQL        | OUTLINE_ID | OUTLINE_DATA                                                                                                         |
        +----------------------------------+---------+------------------+------------+----------------------------------------------------------------------------------------------------------------------+
        | 6F85AFBFA98A19D78AB7FD9D46ED3C0C |    4508 | SELECT * FROM t1 |         -1 | /*+BEGIN_OUTLINE_DATA FULL(@"SEL$1" "TEST0113"."T1"@"SEL$1") OPTIMIZER_FEATURES_ENABLE('4.2.1.0') END_OUTLINE_DATA*/ |
        +----------------------------------+---------+------------------+------------+----------------------------------------------------------------------------------------------------------------------+
        1 row in set (0.021 sec)

        ```

        输出结果如下：

        ```shell
        +------+------+------+
        | C1   | C2   | C3   |
        +------+------+------+
        |    1 |    1 |    1 |
        |    2 |    2 |    2 |
        |    3 |    3 |    3 |
        +------+------+------+
        3 rows in set (0.015 sec)

        ```
      3. 通过 SQL_ID 查询计划缓存视图 `GV$OB_PLAN_CACHE_PLAN_STAT` 获取 OUTLINE 相关信息。（V2.x 和 V3.x 版本中视图为 `GV$PLAN_CACHE_PLAN_STAT`）

        ```

        输出结果如下：

        ```shell
        +----------------------------------+---------+------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        | SQL_ID                           | PLAN_ID | QUERY_SQL        | OUTLINE_ID | OUTLINE_DATA                                                                                                                                                                  |
        +----------------------------------+---------+------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        | 6F85AFBFA98A19D78AB7FD9D46ED3C0C |    4533 | SELECT * FROM t1 |     529047 | /*+BEGIN_OUTLINE_DATA PARALLEL(@"SEL$1" "TEST0113"."T1"@"SEL$1" 2) FULL(@"SEL$1" "TEST0113"."T1"@"SEL$1") PARALLEL(2) OPTIMIZER_FEATURES_ENABLE('4.2.1.0') END_OUTLINE_DATA*/ |
        +----------------------------------+---------+------------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
        1 row in set (0.082 sec)

        ```  

   #### 说明

      1. 创建 Outline 需要进入对应的数据库下执行。
      2. Hint 格式为 `/\*+ xxx \*/`，关于 Hint 说明的详细信息，请参见 [Optimizer Hint](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220955)。
      3. 使用 SQL_TEXT 方式创建的 Outline 会覆盖 SQL_ID 方式创建的 Outline。SQL_TEXT 方式创建的优先级更高。
      4. 如果 SQL_ID 对应的 SQL 语句已经有 Hint，则创建 Outline 指定的 Hint 会覆盖原始语句中所有 Hint。
      5. 使用 SQL_TEXT 方式创建的 Outline，严格要求原 SQL 文本与去掉 Hint 后的 SQL 文本完全匹配。

## 适用版本

OceanBase 数据库 V2.x、V3.x、V4.x 版本。

## 参考

[计划绑定](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220954)。

[CREATE OUTLINE](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000222058)。

Previous

[快速获取 SQL 执行的 svr_ip、trace_id 的方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000225641)

Next

[使用 PARALLEL(n) Hint 实际使用的并行线程不符合预期](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000217876) ![有帮助](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) 咨询热线
