SQL_TRACE使用案例
admin
2023-05-04 20:21:27
0

  SQL_TRACE主要是为了追踪SQL的执行过程,分析SQL的性能,资源消耗情况。

它可以查看SQL是如何操作处理数据、在执行过程中产生了哪些等待事件,查看sql在执行过程中的资源消耗、可以查看sql的递归语句,是sql的实际执行计划。

(1)开启跟踪

  • 跟踪自己的会话很简单

SQL>alter session set tracefile_identifier='mysession'; ---给当前会话一个标示,便于查找跟踪生成的文件

Alter session set sql_trace= true;
或者
exec dbms_session.set_sql_trace(true);

 

  • 如果跟踪别人的会话,需要调用一个包
    exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false);

  • 整个数据库系统跟踪


      alter system set sql_trace=true; ---
11g中已经不推荐使用

(2)执行sql语句

  SQl >select * from SCOTT.DEPT; --当前会话执行的语句

  或者如果跟踪别人的会话则等待别的会话执行sql语句

(3)关闭跟踪

  • 关闭跟踪自己的会话
    Alter session set sql_trace= false;
    或者
    exec dbms_session.set_sql_trace(false);

 

  • 如果跟踪别人的会话,需要调用一个包
    exec dbms_system.set_sql_trace_in_session(sid,serial#,false);

  • 关闭整个数据库系统跟踪


     alter system set sql_trace=
false; ---11g中已经不推荐使用
(4)查找跟踪文件

  在$ORACLE_BASE/admin/sid/udump下找到跟踪文件,比如前面设置标示符为'mysession'trace文件

 

或者用脚本查看跟踪文件位置(当前会话):

select d.value||'\'||lower(rtrim(i.instance,chr(0)))||'_ora_'||p.spid||'.trc'trace_file_name from

(select p.spid from v$mystat m, v$session s,v$process p wherem.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr ) p,

(select t.instance from v$thread t,v$parameter v where v.name ='thread' and(v.value = 0 or t.thread# = to_number(v.value))) i,

(select value from v$parameter where name = 'user_dump_dest') d;

 

5)格式化跟踪文件

 

tkprof  跟踪文件名  输出文件名

 

 (6)案例1(当前会话跟踪)

【示例】:

SQL>  alter session set tracefile_identifier='mysession';

 

会话已更改。

 

SQL>  Alter session set sql_trace= true;

 

会话已更改。

 

SQL>  select * from SCOTT.DEPT;

 

    DEPTNO DNAME                        LOC

----------  ---------------------------- --------------------------

        50 ACCOUNTINGcs                 NEW YORK

        60 RESEARCHcs                   DALLAS

        70 SALEScs                      CHICAGO

        80 OPERATIONScs                 BOSTON

        51 ACCOUNTINGcscs               NEW YORK

        61 RESEARCHcscs                 DALLAS

        71 SALEScscs                    CHICAGO

        81 OPERATIONScscs               BOSTON

        11 ACCOUNTINGcs                 NEW YORK

        21 RESEARCHcs                   DALLAS

        31 SALEScs                      CHICAGO

 

    DEPTNO DNAME                        LOC

----------  ---------------------------- --------------------------

        41 OPERATIONScs                 BOSTON

        10 ACCOUNTING                   NEW YORK

        20 RESEARCH                     DALLAS

        30 SALES                        CHICAGO

        40 OPERATIONS                   BOSTON

 

已选择16行。

 

SQL>  Alter session set sql_trace= false;

 

会话已更改。

SQL>  select d.value||'\'||lower(rtrim(i.instance,chr(0)))||'_ora_'||p.spid||'.tr

c'  trace_file_name from(select p.spid from v$mystat m, v$session s,v$process p w

here  m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr ) p, (select t.inst

ance from  v$thread t,v$parameter v where v.name = 'thread' and(v.value = 0 or t.

thread# =  to_number(v.value))) i, (select value from v$parameter where name = 'u

ser_dump_dest')  d;

 

TRACE_FILE_NAME

--------------------------------------------------------------------------------

 

e:\app\yan\diag\rdbms\orcl\orcl\trace\orcl_ora_1584.trc

 

进入命令行:

C:\Users\yan>e:

 

E:\>cd  E:\app\yan\diag\rdbms\orcl\orcl\trace

 

由于刚才用了标示符,所以跟踪文件多了mysessio字符串:

E:\app\yan\diag\rdbms\orcl\orcl\trace>tkprof  orcl_ora_1584_mysession.trc orcl_or

a_1584_mysession.txt

 

TKPROF:  Release 11.2.0.1.0 - Development on 星期三 3月 26 15:47:50 2014

 

Copyright (c) 1982, 2009, Oracle and/or its  affiliates.  All rights reserved.

 

    案例2(跟踪别人的会话)

【示例】:

 

当前会话执行:

SQL>  select distinct sid from v$mystat;

 

       SID

----------

       134

另一个会话执行:

SQL>  select distinct sid from v$mystat;

 

       SID

----------

       141

 

当前会话执行:

SQL>  select sid,serial# from v$session where sid in (141,134);

 

       SID     SERIAL#

----------  ----------

       134       7471

       141      14317

 

SQL>  execute sys.dbms_system.set_sql_trace_in_session(141,14317,true);

 

PL/SQL 过程已成功完成。

 

另一个会话执行:

 

SQL>  select count(*) from SCOTT.t1;

 

  COUNT(*)

----------

     72564

 

当前会话执行:

SQL>  execute sys.dbms_system.set_sql_trace_in_session(141,14317,false);

 

PL/SQL 过程已成功完成。

 

进入命令行:

C:\Users\yan>e:

 

E:\>cd  E:\app\yan\diag\rdbms\orcl\orcl\trace

 

由于刚才用了标示符,所以跟踪文件多了mysessio字符串:

E:\app\yan\diag\rdbms\orcl\orcl\trace>tkprof  orcl_ora_12224.trc orcl_or

a_12224.txt

 

TKPROF:  Release 11.2.0.1.0 - Development on 星期三 3月 26 15:47:50 2014

 

Copyright (c) 1982, 2009, Oracle and/or its  affiliates.  All rights reserved.

 

 

 


相关内容

热门资讯

时隔九年再度来京,特朗普有何诉... ◆5月12日,特朗普登上“空军一号”前对着镜头挥手告别。(图源:美联社)文/何平编辑/漆菲5月13日...
硬科技管控,中美关系的新压舱石 特朗普此次访华,英伟达CEO黄仁勋随行的消息提振美股市场,凸显芯片与人工智能已成为中美关系的核心议题...
报告:今年一季度AI原生APP... 中国青年网北京5月12日电(记者 高蕾)近日,第三方智能数据服务商QuestMobile发布了《中国...
七大新品发布!国轩高科第15届... 央广网合肥5月13日消息(记者徐鹏)5月16日至17日,电池龙头企业国轩高科将在合肥举办第15届全球...
百度伐谋2.0发布,李彦宏:能... 5月13日举办的Create2026百度AI开发者大会开幕式上,自我演化决策智能体百度伐谋升级至2....
泰顶级豪门曝性侵丑闻!哥哥侵犯... 泰国最有影响力的巨头之一Singha集团(胜狮集团),这两天爆出性侵丑闻。集团第四代成员,环保活动家...
什么信号?多地要求干部带头缴纳... 多地要求干部带头缴纳物业费。最近一段时间,物业费成了社会关注的焦点。原因竟然是多地密集出台文件,号召...
“这不是威胁而是绝佳机遇”,默... 【文/观察者网 张菁娟】“当下挑战之所以如此巨大,是因为我们长期以来为自己制造了太多问题,而这些问题...
老杜盟友半路杀出,“闪电夺权”... 最近两天,马尼拉的政治温度直接爆表。5月11日上午,菲律宾众议院以255票赞成、26票反对、9票弃权...
“六张网”项目密集启动 进一步... 新华社北京5月13日电 题:“六张网”项目密集启动 进一步释放内需潜力经济参考报记者汪子旭近期,一批...