DBMS_MONITOR使用咨询

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】社区V4.3.5
【问题描述】使用DBMS_MONITOR.OB_SESSION_TRACE_ENABLE创建跟踪策略,提示session id不存在。
会话A:


会话B:

麻烦老师帮忙给看一下

你换个ssid,这个是你的show processlist;

image

老师 用ssid 和 sercer_ssid 都提示不存在

我意思是你使用跟踪业务sql试试


您看看

@论坛小助手

根据你提供的信息和图片内容,问题的核心是 DBMS_MONITOR.OB_SESSION_TRACE_ENABLE 在使用时提示 User session ID does not exist。以下是对问题的详细分析和解决步骤:


1. 问题分析

  • 错误原因DBMS_MONITOR.OB_SESSION_TRACE_ENABLE 需要一个有效的 session_id 参数,而当前使用的 session_id(如 4887019553221499399)可能无效或不存在。
  • 验证方法
    • 使用 SHOW PROCESSLIST 查看当前活跃会话。
    • 使用 SHOW PROXYSESSION 查看更详细的会话信息。

从你的 SHOW PROCESSLISTSHOW PROXYSESSION 输出来看:

  • SHOW PROCESSLIST 显示了多个会话,但没有明确标注哪个会话是你需要跟踪的目标。
  • SHOW PROXYSESSION 提供了更详细的会话信息,包括 Id(即 Client Session ID)和其他属性。

2. 解决步骤

步骤 1:确认目标会话

  • 使用 SHOW PROCESSLIST 找到目标会话的 Id。例如:

    obclient> SHOW PROCESSLIST;
    

    输出中,Id 列表示会话 ID。例如:

    +----------------+------+-----------------------+----------+---------+------+-------+------------------+
    | Id            | User | Host                  | db       | Command | Time | State | Info             |
    +----------------+------+-----------------------+----------+---------+------+-------+------------------+
    | 488636619     | root | 192.168.159.137:48738| oceanbase| Sleep   | 31   | NULL  | NULL             |
    +----------------+------+-----------------------+----------+---------+------+-------+------------------+
    
  • 如果需要更详细的会话信息,可以使用 SHOW PROXYSESSION

    obclient> SHOW PROXYSESSION;
    

    输出中,Id 列表示 Client Session ID。例如:

    +---------------------+--------+---------+--------+------+-----------------+------+-------------+-------------------+-------------------+------+------+-----------+
    | proxy_sessid        | Id     | Cluster | Tenant | User | Host            | db   | trans_count | svr_session_count | state             | tid  | pid  | using_ssl |
    +---------------------+--------+---------+--------+------+-----------------+------+-------------+-------------------+-------------------+------+------+-----------+
    | 7230691418559283266 |     68 |  ob1.cc | sys    | root | 127.0.0.1:50260 | NULL |           0 |                 1 | MCS_ACTIVE_READER | 8728 | 8728 |         0 |
    +---------------------+--------+---------+--------+------+-----------------+------+-------------+-------------------+-------------------+------+------+-----------+
    

步骤 2:确保目标会话处于活动状态

  • 确保目标会话(session_id)处于活动状态。如果会话已经结束或超时,则无法对其进行跟踪。
  • 如果目标会话已结束,可以通过重新连接创建新的会话,并记录其 session_id

步骤 3:调用 DBMS_MONITOR.OB_SESSION_TRACE_ENABLE

  • 使用正确的 session_id 调用 DBMS_MONITOR.OB_SESSION_TRACE_ENABLE。例如:
    CALL DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(488636619, 3, 0.5, 'ONLY_SLOW_QUERY');
    
    参数说明:
    • session_id:目标会话的 ID。
    • trace_level:跟踪级别(如 3 表示详细跟踪)。
    • sample_ratio:采样比例(如 0.5 表示 50% 的采样率)。
    • trace_option:跟踪选项(如 ONLY_SLOW_QUERY 表示仅跟踪慢查询)。

步骤 4:验证跟踪结果

  • 跟踪完成后,可以在 OBServer 节点的日志目录下查看跟踪日志。例如:
    cd /home/admin/oceanbase/log
    grep <trace_id> observer.log
    

3. 注意事项

  • 确保目标会话有效:如果目标会话已结束或超时,会导致 User session ID does not exist 错误。
  • 检查权限:确保当前用户具有足够的权限执行 DBMS_MONITOR 包中的过程。
  • 版本兼容性:你使用的是社区版 V4.3.5,请参考官方文档确认 DBMS_MONITOR 的具体用法和支持的功能。

4. 总结

根据文档库中的信息,DBMS_MONITOR.OB_SESSION_TRACE_ENABLE 需要一个有效的 session_id 参数。请按照上述步骤确认目标会话的有效性,并正确调用该过程。如果仍有问题,请提供更多的上下文信息以便进一步分析。

更多信息请查看:

  1. 9500 ~ 9999
  2. ENABLE_OPT_TRACE
  3. DISABLE_OPT_TRACE
  4. ob_admin 简介
  5. 管理 OceanBase 数据库连接
  6. 查看租户会话
  7. DBMS_XPLAN 概述
  8. 全链路追踪方法
  9. 基于 Trace 功能查找上一次 SQL 请求日志
  10. 4500 ~ 4999

你好,这个问题这边已经复现出来了,正在与产研确认是否合理

已确认社区版不支持DBMS_MONITOR包。官方文档具有迷惑性以提醒文档侧进行修改

收到 谢谢

跟着学习了

1 个赞