社区版OB如何查看活跃会话(命令行方式和OCP白屏方式)

【 使用环境 】生产环境 or 测试环境
【 OB or 其他组件 】社区版OB4.2.2 社区版OCP4.2.1
【 使用版本 】OB4.2.2 OCP4.2.1
【问题描述】社区版OB如何查看活跃会话(命令行方式和OCP白屏方式),查看当前正在进行的DDL的执行情况
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据您的问题描述,您希望了解如何在OceanBase社区版4.2.2中通过命令行方式和OCP白屏方式查看活跃会话,并且特别关注当前正在进行的DDL执行情况。以下是详细的解答:

命令行方式查看活跃会话

您可以使用 obclient 工具通过命令行来查看活跃会话。具体步骤如下:

  1. 首先,通过 obclient 连接到OceanBase数据库。例如,如果您要连接到 root@sys 用户,可以使用以下命令:

    obclient -h[数据库地址] -P[端口] -u[用户名] -p -D[数据库名]
    

    示例:

    obclient -h10.10.10.1 -P2883 -uroot@sys -p -Doceanbase
    
  2. 成功连接后,使用 SHOW PROCESSLIST 语句来查询当前租户的会话数量及会话ID:

    obclient> SHOW PROCESSLIST;
    

根据 client_session_id_version 配置项的不同,输出结果会有两种形式。 [2]

OCP白屏方式查看活跃会话

对于OCP白屏方式查看活跃会话,可以通过以下步骤操作:

  1. 登录OCP控制台。
  2. 导航至 自治服务集群详情,选择需要查看的集群。
  3. 进入 实时诊断会话管理 页签。
  4. 会话统计 页签下,可以看到租户当前的所有会话统计信息,包括会话总数、活跃会话数、活跃会话最长时间等。 [4]

然而,需要注意的是,根据文档描述,OCP社区版并不支持查看活跃会话历史报告的功能,这意味着您无法通过OCP查看过去一段时间内的活跃会话详情。 [1]

查看正在进行的DDL执行情况

对于正在进行的DDL操作,通常它们也会出现在上述命令行方式查询到的 SHOW PROCESSLIST 结果中。您可以通过 Info 列查看具体的SQL语句,从而判断是否为DDL操作。 [2]

综上所述,通过命令行方式和OCP白屏方式都可以查看活跃会话,但对于正在进行的DDL操作,更推荐使用命令行方式直接查看 SHOW PROCESSLIST 的输出结果来获取详细信息。

检索到的文档如下:

  1. 管理活跃会话历史报告
  2. 物理连接
  3. OCP V3.1.2
  4. 查看会话统计
  5. OCP
  6. 会话数

查看当前active_session
select /* MONITOR_AGENT / case when cnt is null then 0 else cnt end as cnt, tenant_name, tenant_id from (select DBA_OB_TENANTS.tenant_name, DBA_OB_TENANTS.tenant_id, cnt from DBA_OB_TENANTS left join (select count(state=‘ACTIVE’ OR NULL) as cnt, tenant as tenant_name from GV$OB_PROCESSLIST where svr_ip = ? and svr_port = ? group by tenant) t1 on DBA_OB_TENANTS.tenant_name = t1.tenant_name where DBA_OB_TENANTS.tenant_type<>‘META’) t2;
查看all_session
select /
MONITOR_AGENT */ case when cnt is null then 0 else cnt end as cnt, tenant_name, tenant_id from (select DBA_OB_TENANTS.tenant_name, DBA_OB_TENANTS.tenant_id, cnt from DBA_OB_TENANTS left join (select count(1) as cnt, tenant as tenant_name from GV$OB_PROCESSLIST where svr_ip = ? and svr_port = ? group by tenant) t1 on DBA_OB_TENANTS.tenant_name = t1.tenant_name where DBA_OB_TENANTS.tenant_type<>‘META’) t2;

这个好像只能看见当前的会话数量有多少,能看到具体的会话信息吗(例如会话SQL)?

为了查看具体的会话信息,如会话正在执行的SQL语句,您可以直接查询 GV$OB_PROCESSLIST 视图。该视图提供了关于当前活动会话的详细信息,包括但不限于会话的状态、执行的SQL语句等。 [2]

具体来说,您可以使用以下SQL语句来查询活跃会话及其执行的SQL语句:

obclient> select TENANT, SVR_IP, SVR_PORT, USER, HOST, COMMAND, STATE, INFO, SQL_ID, TRACE_ID
from GV$OB_PROCESSLIST
where STATE='ACTIVE';

这条SQL语句将返回当前处于活跃状态的会话列表,其中包括每个会话的租户名 (TENANT)、服务器IP (SVR_IP)、服务器端口 (SVR_PORT)、用户 (USER)、主机 (HOST)、命令类型 (COMMAND)、状态 (STATE)、附加信息 (INFO)、SQL标识符 (SQL_ID) 以及追踪标识符 (TRACE_ID)。

请注意,INFO 列包含了当前会话正在执行的SQL语句,这可以帮助您了解具体的会话活动。此外,SQL_IDTRACE_ID 字段对于全链路跟踪非常有用。 [2]

因此,通过查询 GV$OB_PROCESSLIST 视图,您可以获得活跃会话的具体信息,包括它们正在执行的SQL语句。这应该能满足您查看具体会话信息的需求。

详情请参考:

  1. 会话数
  2. 监控项

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

1、这个可以看到DDL操作的进度和状态
select * from oceanbase.gv$session_longops\G;
2、这两个视图可以查看到 语句稍微改写一下
GV$OB_PROCESSLIST GV$OB_SQL_AUDIT