版本:
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 个赞
论坛小助手
#4
根据您提供的信息,问题出在调用 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_AUDIT
或 GV$SESSION
视图,确认 SID
是否存在且对应正确的会话。例如:
SELECT * FROM oceanbase.GV$SESSION WHERE SID = 3221552534;
如果查询结果为空,则说明该 SID 已失效或不存在。
(2) 检查 SVR_IP 和 SVR_PORT
确保 SVR_IP
和 SVR_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
参数无效或函数调用方式不正确导致的。建议按照上述步骤逐一排查,并确保调用语法符合规范。
如果您仍有疑问或需要进一步帮助,请提供更多上下文信息(如完整的会话状态查询结果)。
具体信息可参考以下文档:
- DBMS_XPLAN 概述
- 实时执行计划展示
- 阅读和管理 OceanBase 数据库 SQL 执行计划
- SQL FAQ
- 诊断实践:使用 DBMS_XPLAN 系统包进行性能诊断
- SQL 调优常见问题
- 0001 ~ 3999
- 5000 ~ 5999
1 个赞
** 本来想标粗的
端口去掉单引号还是一样的错误
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 个赞
淇铭
#10
你可以看看 怎么使用的
DISPLAY_ACTIVE_SESSION_PLAN
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002016527
DISPLAY_ACTIVE_SESSION_PLAN
函数用于展示指定 Session 的实时计划详情。
2 个赞
Giant
#12
set ob_query_timeout=1000000;
SELECT DBMS_XPLAN.DISPLAY_ACTIVE_SESSION_PLAN(2636966,‘typical’,‘192.168.10.13’,‘2882’);
我这种试试