---
title: 如何导出 OUTLINE 实现稳定的执行计划 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于如何导出 OUTLINE 实现稳定的执行计划 相关的常见问题和使用技巧，帮助您快速解决如何导出 OUTLINE 实现稳定的执行计划 的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# 如何导出 OUTLINE 实现稳定的执行计划

更新时间：2024-12-19 08:41

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

在 OceanBase 数据库进行版本升级、合并、Schema 版本变化或参数微调后，可能会影响执行计划的生成。在这些情况下，往往需要通过 OUTLINE 对某些 SQL 绑定执行计划。本文介绍如何导出 OUTLINE。

## 适用版本

OceanBase 数据库所有版本

## 影响执行计划的因素

在 OceanBase 数据库进行版本升级、合并、Schema 版本变化或参数微调后，可能会影响执行计划的生成。在这些情况下，往往需要通过 OUTLINE 对某些 SQL 绑定执行计划。

OceanBase 数据库中 `gv$plan_cache_plan_stat` 视图的 `outline_data` 列记录了执行计划对应的 OUTLINE 信息，但该表会在合并时触发淘汰机制，其中缓存的 `plan_id` 会被删除。并且 `plan_id` 是 OBServer 启动后通过一个本地范围内的自增序列产生的值，OBServer 重启后，`plan_id` 会重置。因此，不能通过 `plan_id` 确定执行计划的稳定性。

综上所述，可以通过在 OceanBase 数据库能够稳定生成某条 SQL 执行计划的时机导出 OUTLINE，并在后续的执行中绑定给 SQL，实现执行计划的稳定。

## 导出 OUTLINE

1. 在 OceanBase 数据库能够稳定生成某条 SQL 执行计划时，通过以下命令导出 OUTLINE。

      - `$IP` 表示连接 OceanBase 数据库的 IP 地址。
      - `$PORT` 表示连接端口。
      - `$cluster_name` 表示集群名称。
      - `$name.sql` 表示需要执行 SQL 查询的文件，需先创建文件，并在里面写明查询的语句，用来获取 outline data。具体示例语句如下：

       ```sql
       select sql_id, query_sql,outline_data,AVG_EXE_USEC from gv$plan_cache_plan_stat where query_sql like 'xxxx%';

       ```
      - `$name` 表示输出的文件名。

   ```unknow
   [admin@hostname ~]$ obclient -h$IP -P$PORT -uroot@sys#$cluster_name -p -c -v -f -c <$name.sql |tee $name.`date +"%Y-%m-%d"`.log

   ```

   执行上述命令后，结果会打印到 `$name.date +"%Y-%m-%d".log` 中。
 2. 在需要绑定执行计划时，在 OBClient 中执行以下语句即可实现 OUTLINE 的绑定。

   ```unknow
   obclient> CREATE OUTLINE obcoe_647EF62257D0957DE5AA5D192AE83818 on "647EF62257D0957DE5AA5D192AE83818" using hint /*+ BEGIN_OUTLINE_DATA INDEX(@"SEL$1" "SYS.T1"@"SEL$1" "IDX_C2") END_OUTLINE_DATA*/;
   obclient> CREATE OUTLINE obcoe_3E366BE221C0E003DB69CF55E629A7C6 on "3E366BE221C0E003DB69CF55E629A7C6" using hint /*+ BEGIN_OUTLINE_DATA END_OUTLINE_DATA*/;

   ```

   #### 注意

   绑定 OUTLINE 需要连接到正确的租户和数据库中执行。

上一篇

[SELECT 投影列中关联子查询的 SQL 性能问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000217875)

下一篇

[执行计划结果中 Optimization info 详解](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000466048) ![有帮助](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) 咨询热线
