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