暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

OceanBase管理数据库全链路诊断方法

2023-10-17
235

运维人员可根据需要,通过使用 PL/SQL 程序包 DBMS_MONITOR 中相关方法,控制相关应用程序不同标识信息维度是否开启全链路诊断 trace,以及该 trace 的打点和相关信息打印到 trace 日志的策略。日志打印会根据采样频率判断是否会被采样并记录到内存中,有一定的概率打印到 trace 日志中。

trace 打开和关闭操作

您可以通过调用 DBMS_MONITOR 包下的 trace 相关方法实现 trace 不同级别的开关模式。

在这里介绍下方法中涉及到的相关变量定义:

  • session_id:会话 ID,可以通过 show processlist(MySQL 模式),GV$OB_PROCESSLIST 等视图查询。

  • client_id:客户端 ID,可以通过 GV$OB_PROCESSLIST 的 client 字段查询

  • module_name:模块名,可以通过 GV$OB_PROCESSLIST 的 module 字段查询。

  • action_name:活动名,可以通过 GV$OB_PROCESSLIST 的 action 字段查询。

  • tenant_name:租户名,可选项为:空值(非 null,表示当前租户)和各租户名。

  • level:打印日志的粒度。目前支持三个粒度等级,其中 Level1 为模块级别的粗粒度,Level3 的粒度最精细。

  • sample_pct:控制采样频率,取值范围为 [0,1]。

  • record_policy: 日志打印策略,即 trace 信息输出到日志文件中策略, 支持以下 3 种策略。

    • ALL,所有 span 和 tag 信息均打印到日志文件中, 并且是在每个 span 结束时, 就打印到日志文件中。

    • ONLY_SLOW_QUERY,当前请求为 slow query ,则该部分信息的span 和 tag 会打印到日志文件中。

    • SAMPLE_AND_SLOW_QUERY,当前请求为 slow query 则该部分信息的span 和 tag 会打印到日志文件中;其他请求信息的 span 和 tag 有一定的概率会打印到日志文件中。

更多的内容请参见相关 DBMS_MONITOR 包的定义。

session 级别

  • 打开 trace

    DBMS_MONITOR.OB_SESSION_TRACE_ENABLE(
    session_id   IN  BINARY_INTEGER DEFAULT NULL,
    level        IN  INT,
    sample_pct   IN  NUMBER,
    record_policy IN VARCHAR2);
    

    示例:记录当前 session 相关耗时等信息,采样频率为 50%,并且只记录 slow query,具体 SQL 如下。

    call dbms_monitor.ob_session_trace_enable(null,1,0.5,'ONLY_SLOW_QUERY');
    
  • 关闭 trace

    DBMS_MONITOR.OB_SESSION_TRACE_DISABLE(session_id   IN  BINARY_INTEGER);
    

    示例:关闭当前 session trace。

    call dbms_monitor.ob_session_trace_disable(null);
    

client_identifier 级别

  • 打开 trace

    DBMS_MONITOR.OB_CLIENT_ID_TRACE_ENABLE(
    client_id    IN  VARCHAR2,
    level        IN  INT,
    sample_pct   IN  NUMBER,
    record_policy IN VARCHAR2);
    

    示例:记录 client_id 为 jdbc 的相关耗时等信息,采样频率为 50%,并且只记录 slow query,具体 SQL 如下。

    call dbms_monitor.ob_client_id_trace_enable('jdbc',1,0.5,'ONLY_SLOW_QUERY');
    
  • 关闭 trace

    DBMS_MONITOR.OB_CLIENT_ID_TRACE_DISABLE(client_id IN  VARCHAR2);
    

    示例:关闭 client_id 为 jdbc 的 trace。

    call dbms_monitor.ob_client_id_trace_disable('jdbc');
    

module/action级别

  • 打开 trace

    DBMS_MONITOR.OB_MOD_ACT_TRACE_ENABLE(
    module_name     IN VARCHAR2 DEFAULT ANY_MODULE,
    action_name     IN VARCHAR2 DEFAULT ANY_ACTION,
    level        IN  INT,
    sample_pct   IN  NUMBER,
    record_policy IN VARCHAR2);
    

    示例:记录 module_name 为 backup,action_name 为 insert的相关耗时等信息,采样频率为 50%,并且只记录 slow query,具体 SQL 如下。其中的 module_name 和 action_name 通过 dbms_application_info 包的SET_MODULE 方法设置。

    call dbms_application_info.set_module('backup','insert');
    call dbms_monitor.ob_mod_act_trace_enable('backup','insert',1,0.5,'ONLY_SLOW_QUERY');
    
  • 关闭 trace

    DBMS_MONITOR.OB_MOD_ACT_TRACE_DISABLE(
    module_name     IN  VARCHAR2,
    action_name     IN  VARCHAR2 DEFAULT ALL_ACTIONS);
    

    示例:关闭 module_name 为 backup,action_name 为 insert 的 trace。

    call dbms_monitor.ob_mod_act_trace_disable('backup','insert');
    

租户级别

  • 打开 trace

    DBMS_MONITOR.OB_TENANT_TRACE_ENABLE(
    level        IN  INT,
    sample_pct   IN  NUMBER,
    record_policy IN VARCHAR2);
    

    示例:记录当前租户中的耗时等信息,全部记录并全部打印,具体 SQL 如下。

    call dbms_monitor.ob_tenant_trace_enable(1, 1, 'ALL'); 
    
  • 关闭 trace

    DBMS_MONITOR.OB_TENANT_TRACE_DISABLE(tenant_name  IN VARCHAR2 DEFAULT NULL);
    

    示例:关闭租户名为 ORACLE 的 trace。

    call dbms_monitor.ob_tenant_trace_disable('ORACLE'); 
    

    示例:关闭当前租户的 trace。

    call dbms_monitor.ob_tenant_trace_disable(); 
    

相关日志信息输出到 trace.log,具体内容示例如下:

[20xx-0x-xx 00:07:46.027232] [1751][T1_TNT_L0][T1][YB42AC12050D-0005E42565DA44B2-0-0] {"trace_id":"0005e495-f920-5adc-7cd1-3730afa11dbd","name":"sql_execute","id":"0005e426-2c2b-0755-0000-000000000005","start_ts":1658707664460666,"end_ts":1658707666027098,"parent_id":"0005e426-3355-05b6-0000-000000000002","is_follow":false}
[20xx-0x-xx 00:07:46.027234] [1751][T1_TNT_L0][T1][YB42AC12050D-0005E42565DA44B2-0-0] {"trace_id":"0005e495-f920-5adc-7cd1-3730afa11dbd","name":"pc_get_plan","id":"0005e426-5aac-d38c-0000-000000000004","start_ts":1658707664460552,"end_ts":1658707664460660,"parent_id":"0005e426-a22f-6cd4-0000-000000000003","is_follow":false}


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论