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

【技术文章】dbms monitor跟踪多个会话

云贝教育 2023-04-14
172

原文链接:TDPUB数加社区

1. 设置标识

1.1 设置服务标识

由连接选项控制,暂时没有找到set service方法


1.2 设置模块标识

    begin
    dbms_application_info.set_module('module_test','select');
    end;
    复制

    1.3 设置客户端标识

      begin
      DBMS_SESSION.set_identifier('client_identifier_test');
      dbms_application_info.set_client_info(client_info => 'client_test');
      end;
      复制
      上面三步设置完,查询设置是否生效
        select s.client_identifier,s.client_info,s.module,s.service_name,s.action from v$session s where s.sid=userenv('sid')


        CLIENT_IDENTIFIER CLIENT_INFO MODULE SERVICE_NAME ACTION
        client_identifier_test client_test module_test PROD_PRIMARY_01 select
        复制
        设置这个最大的作用是比如分析JAVA连接池技术中,进行区分,
        因为并不能提前知道这个SQL跑在哪个SID中,但是却能提前设置哪个client或者module,或者标准API对应的模块、请求中跟踪


        2. 为标识开启跟踪

        关闭跟踪自行搜索xxxx_disable,不关闭将会在实例上持续追踪,(除了会话级别跟踪,会话结束自动关闭)

        开启跟踪

        1) dbms_monitor.client_id_trace_enable

        2) dbms_monitor.session_trace_enable

        3) dbms_monitor.serv_mod_act_trace_enable

        开启统计信息收集

        1) dbms_monitor.client_id_stat_enable

        2) v$sesstat--会话状态信息不需要自动开启,直接可以查询

        3) dbms_monitor.serv_mod_act_stat_enable


        2.1

        开启client跟踪
          begin
          dbms_monitor.client_id_trace_enable(client_id => 'client_identifier_test');
          end;
          复制

          开启client资源消耗统计

            begin
            dbms_monitor.client_id_stat_enable(client_id => 'client_identifier_test');
            end;
            select * from v$client_stats;--开启之后就能查到对应的值
            复制
            开启module资源消耗统计
              begin
              dbms_monitor.serv_mod_act_stat_enable(service_name => 'PROD_PRIMARY_01',module_name => 'test02');
              end;
              select * from v$serv_mod_act_stats s ;--如果查不到值,需要在sqlplus开启
              复制

              测试client跟踪

              语法:

                begin
                DBMS_SESSION.set_identifier('client_identifier_test');
                end;
                复制

                可以多开启几个窗口,分别测试

                比如我新开窗口,执行下面语句

                窗口1

                  {
                  begin
                  DBMS_SESSION.set_identifier('client_identifier_test');
                  end;
                  select * from cux_test1
                  }
                  复制

                  窗口2

                    {
                    begin
                    DBMS_SESSION.set_identifier('client_identifier_test');
                    end;
                    select * from cux_test2
                    }
                    复制
                    窗口3
                      {
                      dbms_monitor.session_trace_enable;--开启会话级别跟踪,保证生成trace文件,但未设置client标识符
                      select * from cux_test3
                      }
                      复制
                      捕捉并合并跟踪文件
                        trcsess output=/tmp/client_identifier_test_trace.trc clientid='client_identifier_test' usr/local/oracle19c/diag/rdbms/prod_primary/DUPDB/trace/*.trc
                        复制
                          /usr/local/oracle19c/diag/rdbms/prod_primary/DUPDB/trace替换成自己的trace文件所在路径
                          /*******************/
                          复制
                          打开生成的跟踪文件,发现只有cux_test1 cux_test2 ,并没有cux_test3,成功对client进行了跟踪


                          2.2

                          开启module跟踪

                          语法:

                            begin
                            dbms_monitor.serv_mod_act_trace_enable(service_name => 'PROD_PRIMARY_01',module_name => 'module_test');
                            end;
                            复制

                            同样按2.1一样,开启多个窗口测试

                            窗口1

                              {
                              begin
                              dbms_application_info.set_module('module_test',action_name =>'select test1');
                              end;
                              select * from cux_test1
                              }
                              复制

                              窗口2

                                {
                                begin
                                dbms_application_info.set_module('module_test',action_name =>'select test2');
                                end;
                                select * from cux_test2
                                }
                                复制
                                窗口3
                                  {
                                  begin
                                  dbms_application_info.set_module('module_others',action_name =>'select test3');
                                  end;
                                  select * from cux_test3
                                  }
                                  复制
                                  捕捉并合并跟踪文件
                                    trcsess output=/tmp/client_identifier_test_trace.trc service='PROD_PRIMARY_01' module='module_test'
                                    /usr/local/oracle19c/diag/rdbms/prod_primary/DUPDB/trace/*.trc
                                    /usr/local/oracle19c/diag/rdbms/prod_primary/DUPDB/trace替换成自己的trace文件所在路径
                                    /*******************/
                                    复制
                                    仍然只能跟踪到cux_test1和cux_test2的查询
                                    注意实验结束需要执行disbaled,比如dbms_monitor.client_id_trace_disable,否则一直会产生对应的跟踪文件


                                    trcsess 语法:

                                      trcsess [output=<output file name >]  [session=<session ID>] [clientid=<clientid>]
                                      [service=<service name>] [action=<action name>] [module=<module name>] <trace file names>


                                      output=<output file name> output destination default being standard output.
                                      session=<session Id> session to be traced.
                                      Session id is a combination of session Index & session serial number e.g. 8.13.
                                      clientid=<clientid> clientid to be traced.
                                      service=<service name> service to be traced.
                                      action=<action name> action to be traced.
                                      module=<module name> module to be traced.
                                      <trace_file_names> Space separated list of trace files with wild card '*' supported.
                                      复制


                                      更多Oracle课程内容 可添加下方老师获取

                                      文章转载自云贝教育,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                      评论