利用sql_trace来跟踪sql的执行情况

来源:互联网 发布:六度空间理论知乎 编辑:程序博客网 时间:2024/06/08 01:31

1.在oracle里面,有关sql执行的的性能问题中有一个sql_trace跟踪sql。

那么怎么利用sql_trace进行sql语句的性能分析呢,怎么对sql语句进行跟踪。以下举一个简单的例子,仅供参考。


以oracle10g为例:

首先设置自己定义的trace文件的标识方便查找。

SQL> alter session set tracefile_identifier='longshen';
Session altered.

然后对当前会话启动SQL_TRACE,最好不要一直打开该开关,会产生太多的trc文件

SQL> alter session set sql_trace=true;
Session altered.

然后我们执行一条sql语句:

SQL> select empno,ename,sal from scott.emp;

最后关闭该开关的状态:

SQL> alter session set sql_trace=false;
Session altered.

找到产生的trace文件

[oracle@localhost udump]$ cd $ORACLE_BASE/admin/$ORACLE_SID/udump

[oracle@localhost udump]$ ls
law_ora_11271_longshen.trc
 law_ora_20741.trc  law_ora_6982.trc
law_ora_12734.trc           law_ora_21404.trc  law_ora_7009.trc
law_ora_12882.trc           law_ora_3932.trc   law_ora_7043.trc

由于原始的trace文件的可读性不高,我们一般使用oracle自带的工具,tkprof来处理这个trace文件。

[oracle@localhost udump]$ tkprof law_ora_11271_longshen.trc longshen.txt (生成longshen.txt文件)

查看生成的longshen.txt:


Rows     Row Source Operation
-------  ---------------------------------------------------
      1  TABLE ACCESS BY INDEX ROWID OBJ$ (cr=3 pr=0 pw=0 time=987 us)
      1   INDEX RANGE SCAN I_OBJ2 (cr=2 pr=0 pw=0 time=324 us)(object id 37)

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.01          0          0          0           0
Execute      1      0.02       0.02          0          0          0           0
Fetch        1      0.00       0.01          0          4          0           1
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.03       0.05          0          4          0           1


 



原创粉丝点击