逻辑执行计划展示问题

版本:

obclient [(none)]> select version();
+------------------------------+
| version()                    |
+------------------------------+
| 5.7.25-OceanBase_CE-v4.3.0.1 |
+------------------------------+
1 row in set (0.001 sec)

查询gv$ob_sql_audit视图:

obclient [test]> SELECT SVR_IP, USEC_TO_TIME(REQUEST_TIME) AS REQUEST_TIME, TENANT_NAME, SID, TRACE_ID, SQL_ID, PLAN_ID, PLAN_TYPE, ELAPSED_TIME, QUEUE_TIME, EXECUTE_TIME, EXECUTE_TIME-TOTAL_WAIT_TIME_MICRO AS CPU_TIME, TOTAL_WAIT_TIME_MICRO, RETURN_ROWS, AFFECTED_ROWS, RET_CODE, QUERY_SQL  FROM oceanbase.GV$OB_SQL_AUDIT WHERE  QUERY_SQL like '%select count(*) from employees%'  limit 2 \G
*************************** 1. row ***************************
               SVR_IP: 10.12.xx.xx
         REQUEST_TIME: 2025-04-22 17:57:34.915220
          TENANT_NAME: tnt_odc
                  SID: 3221552534
             TRACE_ID: YB420A0C4B40-00061AE0C7DCD903-0-0
               SQL_ID: 0EB8D5EC7325DEA5CC075652701DF307
              PLAN_ID: 67769
            PLAN_TYPE: 1
         ELAPSED_TIME: 175
           QUEUE_TIME: 18
         EXECUTE_TIME: 110
             CPU_TIME: 110
TOTAL_WAIT_TIME_MICRO: 0
          RETURN_ROWS: 1
        AFFECTED_ROWS: 0
             RET_CODE: 0
            QUERY_SQL:  select count(*) from employees
2 rows in set (3.454 sec)

逻辑执行计划展示:

obclient [(none)]> SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(**3221552534**,'typical','10.12.xx.xx','2882') from dual;
ERROR 1054 (42S22): Unknown column '' in 'field list'

为什么会报这个错误呢?

1 个赞

@论坛小助手

根据您提供的信息,问题出在调用 DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN 函数时出现了错误 ERROR 1054 (42S22): Unknown column '' in 'field list'。以下是对此问题的分析和解答:


1. 错误原因分析

根据文档片段 7 的描述:

  • 错误码 1054 表示 OceanBase 数据库无法识别某个字段名。
  • 具体到您的场景中,错误提示为 Unknown column '' in 'field list',这表明函数调用中可能存在参数传递不正确或缺失的问题。

结合 DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN 的使用方法(参考文档片段 1 和片段 5),该函数需要以下参数:

  • SID:会话 ID。
  • FORMAT:展示格式(如 typical)。
  • SVR_IP:服务器 IP 地址。
  • SVR_PORT:服务器端口号。

从您的调用语句来看:

SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(**3221552534**,'typical','10.12.xx.xx','2882') from dual;

问题可能出现在以下几个方面:

  • SID 参数3221552534 是否为有效的会话 ID?如果 SID 不正确或不存在,可能导致查询失败。
  • 其他参数:虽然 IP 和端口看起来正常,但仍然需要确认它们是否与目标会话匹配。

2. 解决步骤

以下是排查和解决问题的具体步骤:

(1) 确认 SID 是否有效

通过查询 GV$OB_SQL_AUDITGV$SESSION 视图,确认 SID 是否存在且对应正确的会话。例如:

SELECT * FROM oceanbase.GV$SESSION WHERE SID = 3221552534;

如果查询结果为空,则说明该 SID 已失效或不存在。

(2) 检查 SVR_IP 和 SVR_PORT

确保 SVR_IPSVR_PORT 参数与目标会话所在的服务器一致。可以通过以下查询确认:

SELECT SVR_IP, SVR_PORT FROM oceanbase.GV$SESSION WHERE SID = 3221552534;

(3) 正确调用 DISPLAY_ACTIVE_SESSION_PLAN

如果上述检查无误,可以重新调用 DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN 函数。例如:

SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(SID => 3221552534, FORMAT => 'typical', SVR_IP => '10.12.xx.xx', SVR_PORT => '2882') FROM DUAL;

注意:参数必须以键值对的形式明确指定,避免因参数顺序错误导致问题。


3. 补充说明

如果经过上述步骤仍无法解决问题,请进一步检查以下内容:

  • OceanBase 版本兼容性:确保当前版本支持 DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN 函数。根据文档片段 1,该函数在社区版中是可用的。
  • 权限问题:确认当前用户是否有权限访问 DBMS_XPLAN 包及相关视图。

4. 总结

根据文档库中的信息,错误 ERROR 1054 (42S22) 很可能是由于 SID 参数无效或函数调用方式不正确导致的。建议按照上述步骤逐一排查,并确保调用语法符合规范。

如果您仍有疑问或需要进一步帮助,请提供更多上下文信息(如完整的会话状态查询结果)。

具体信息可参考以下文档:

  1. DBMS_XPLAN 概述
  2. 实时执行计划展示
  3. 阅读和管理 OceanBase 数据库 SQL 执行计划
  4. SQL FAQ
  5. 诊断实践:使用 DBMS_XPLAN 系统包进行性能诊断
  6. SQL 调优常见问题
  7. 0001 ~ 3999
  8. 5000 ~ 5999
1 个赞

2882引号去掉呢

1 个赞

1 个赞

3221552534 这个**从那里来的

2 个赞

** 本来想标粗的
端口去掉单引号还是一样的错误

obclient [test]> SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(3221552534,'typical','10.12.xx.xx',2882) from dual;
ERROR 1054 (42S22): Unknown column '' in 'field list'
1 个赞

存在无效的值,请检查

1 个赞

你可以看看 怎么使用的

DISPLAY_ACTIVE_SESSION_PLAN

https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016527
DISPLAY_ACTIVE_SESSION_PLAN 函数用于展示指定 Session 的实时计划详情。

2 个赞

努力学习,总结经验 :+1: :+1: :+1:


set ob_query_timeout=1000000;
SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(2636966,‘typical’,‘192.168.10.13’,‘2882’);

我这种试试