---
title: 如何通过 SQL_ID 查询实时执行计划 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于如何通过 SQL_ID 查询实时执行计划 相关的常见问题和使用技巧，帮助您快速解决如何通过 SQL_ID 查询实时执行计划 的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 如何通过 SQL_ID 查询实时执行计划

更新时间：2023-11-30 12:01

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

本文主要介绍如何利用 SQL_ID 查询实时执行计划。

使用 EXPLAIN 命令可以展示当前优化器所生成的执行计划，但 SQL 在计划缓存中实际对应的计划可能与 EXPLAIN 的结果并不相同，造成这种现象的原因可能是统计信息变化、用户 session 变量设置变化等。为确定该 SQL 在系统中实际使用的执行计划，有时还需要进一步分析计划缓存中的物理执行计划。

OceanBase 数据库可以通过 `gv$sql_audit` 视图查到有问题的 SQL。有关 `gv$sql_audit` 的信息，请参见《OceanBase 数据库 参考指南》中的 **性能视图** 章节。

## 适用版本

OceanBase 数据库 V2.X 版本。

## 操作步骤

1. 查询 SQL 在计划缓存中的 `PLAN_ID`。

   OceanBase 数据库在每台 Server 都有一份计划缓存。用户可以直接访问 `gv$plan_cache_plan_stat` 视图，来查询本 Server 上的计划缓存，并提供租户 ID 和需要查询的 SQL 字符串（可以使用模糊匹配），查询该条 SQL 在计划缓存中对应的 `PLAN_ID`。

      - 可以使用以下命令获取最耗时的 SQL 的 `PLAN_ID`。

       ```unknow
       obclient> SELECT tenant_id,plan_id,svr_ip,svr_port,elapsed_time FROM oceanbase.gv$plan_cache_plan_stat ORDER BY elapsed_time DESC LIMIT 1;
       +-----------+---------+-----------------+----------+----------------------+
       | tenant_id | plan_id | svr_ip          | svr_port | elapsed_time         |
       +-----------+---------+-----------------+----------+----------------------+
       |         1 |  582518 | xxx.xxx.xxx.xxx |     2882 | 18445143226115784288 |
       +-----------+---------+-----------------+----------+----------------------+

       ```
      - 如果您已经从日志中获取了 `SQL_ID`，可以通过以下命令查询 `PLAN_ID`。

       ```unknow
       obclient> SELECT tenant_id,plan_id,svr_ip,svr_port,elapsed_time FROM oceanbase.gv$plan_cache_plan_stat WHERE SQL_ID='0DDD0CAD5372CCD285361AD0300FDB23';

       ```
 2. 使用得到的 `PLAIN_ID` 展示对应的执行计划。

   根据上述得到的 `TENANT_ID`、`PLAN_ID`、`SVR_IP` 和 `SVR_PORT`，查询 `gv$plan_cache_plan_explain` 表。

   ```unknow
   obclient> SELECT * FROM gv$plan_cache_plan_explain WHERE tenant_id=1 AND plan_id=582518 and ip='11.1166.78.136' and port=2882;
   +-----------+-----------------+------+---------+------------------+-----------------------+------+------+-------------------------------------------------------------------------------------------------------------------------------+
   | TENANT_ID | IP              | PORT | PLAN_ID | OPERATOR         | NAME                  | ROWS | COST | PROPERTY                                                                                                                      |
   +-----------+-----------------+------+---------+------------------+-----------------------+------+------+-------------------------------------------------------------------------------------------------------------------------------+
   |         1 | xxx.xxx.xxx.xxx | 2882 |  582518 |  PHY_SORT        | NULL                  |  100 | 2418 | NULL                                                                                                                          |
   |         1 | xxx.xxx.xxx.xxx | 2882 |  582518 |   PHY_TABLE_SCAN | __all_virtual_sysstat |  100 | 2000 | table_rows:100000, physical_range_rows:100, logical_range_rows:100, index_back_rows:0, output_rows:100, est_method:basic_stat |
   +-----------+-----------------+------+---------+------------------+-----------------------+------+------+-------------------------------------------------------------------------------------------------------------------------------+

   ```

   #### 注意

   如果不提供 `TENANT_ID`、`PLAN_ID`、`SVR_IP` 和 `SVR_PORT` 四个字段，查询 `gv$plan_cache_plan_explain` 不会返回任何结果。

Previous

[in expr 中参数较多时生成计划慢](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002396932)

Next

[如何查看 SQL 执行的物理执行计划](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000217862) ![有帮助](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) 咨询热线
