二、用法:
1、文件跟踪的分类:
跟踪DBA可以动用两种方式开展跟踪:
. 跟踪整个数据库实例。只须求容易的修改参数文件(pfile/spfile)参数
SQL_TRACE = TRUE
,然后再度起动数据库即可。在大局启用SQL_TRACE会导致所有进度的移位被跟踪,包含后台进度及拥有用户进度,那样也会数据库导致性能下降比较明显。
.
会话级跟踪。SQL_TRACE的不以为奇采用格局是仅跟踪一个对话。被跟踪的对话可以是你自己的,也得以是此外用户的对话。若是是投机的对话,只必要在SQL*PLUS中运行一下命令即可:
SQL> alter session set sql_trace = true;
类似的只要废除对会话的跟踪,运行一下下令:
SQL> alter session set sql_trace = false;
如若必要跟踪一个特定的对话,首先须要得到会话的SID和Serial#,那么些音信能够在视图V$SESSION中得到,一旦领悟了那七个参数,就足以运作一下指令:
SQL> execute
SYS.dbms_system.set_sql_trace_in_session(13,9,true);
同样也可以利用那些进度关闭会话跟踪:
SQL> execute
SYS.dbms_system.set_sql_trace_in_session(13,9,false);
2、跟踪文件的职位:
一旦为会话激活了SQL_TRACE,ORACLE就会在udump管理区创造跟踪文件,文件的目的地方由参数user_dump_dest来确定。每个
操作都不会覆盖原来的文书,新的跟踪记录将会被追加到文件末尾。日常状态下,可以按照文件的修改时间判定目录下哪些文件是新型的文书。
SQL> show parameter user_dump_dest;
NAME TYPE VALUE
———————————— ———–
user_dump_dest string d:oracleadminora9iudump
也足以因而以下SQL来确定文件名:
select d.value||”||lower(rtrim(i.instance,
chr(0)))||’_ora_’||p.spid||’.trc’ trace_file_name
from
(
select p.spid
from sys.v$mystat m,sys.v$session s,sys.v$process p
where m.statistic# = 1
and s.sid = m.sid
and p.addr = s.paddr
) p,
(
select t.instance
from sys.v$thread t,sys.v$parameter v
where v.name = ‘thread’
and ( v.value = 0 or t.thread# = to_number(v.value) )
) i,
(
select value from sys.v$parameter where name = ‘user_dump_dest’
) d ;
TRACE_FILE_NAME
——————————————————————————–
d:oracleadminora9iudumpora9i_ora_2060.trc
3、计时音讯:
为了最大限度的选用跟踪文件,应该开辟计时声明,通过参数TIMED_STATISTICTS=TRUE举办设置,那样可以对各类SQL语句的执行时间等举行记录,这些效果对系统性能的负责很小。
打开对话的计时新闻:
SQL> alter session set timed_statistics = true ;
打开数据库系统的计时音信
SQL> alter system set timed_statistics = true ;
4、TKPROF:
通过前三步的设置已经知晓哪些生成SQL跟踪文件了,ORACLE生成的跟踪文件阅读起来很困难(也就是易读性很差),可以看跟踪文件的一局地,执行以下SQL语句:
SQL> select count(*) from sys_dept;
COUNT(*)
———-
16
执行完后,查看跟踪文件中这一个讲话的情节如下:
PARSING IN CURSOR #1 len=31 dep=0 uid=62 oct=3 lid=62
tim=14727407741 hv=2200985491 ad=’128e3820′
select count(*) from sys_dept
END OF STMT
PARSE
#1:c=0,e=16348,p=1,cr=31,cu=0,mis=1,r=0,dep=0,og=4,tim=14727407735
EXEC
#1:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727407814
FETCH
#1:c=0,e=15641,p=5,cr=7,cu=0,mis=0,r=1,dep=0,og=4,tim=14727423807
=====================
PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62
tim=14727508742 hv=3517412409 ad=’12bbcff4′
begin :id := sys.dbms_transaction.local_transaction_id; end;
END OF STMT
PARSE
#2:c=0,e=122,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727508735
EXEC
#2:c=0,e=144,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727508945
=====================
PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62
tim=14727587562 hv=3517412409 ad=’12bbcff4′
begin :id := sys.dbms_transaction.local_transaction_id; end;
END OF STMT
PARSE
#2:c=0,e=121,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727587556
EXEC
#2:c=0,e=97,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727587721
那样不仅涉猎麻烦,并且也有很多情节难以领悟。ORACLE提供了一个格式化跟踪文件的工具
- TKPROF( Transient Kernel Profiler
),通过那么些工具能将SQL文件转载为分析人士不难领会的格式。
一般TKPROF工具的利用的简要方法,只用到了七个举足轻重字:跟踪文件名和输出文件名
(TKPROF的现实请参阅其余材料):
TKPROF <trace file> <output file>
在命令行格局下运作(数据库在window2000下安装的)
C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc
d:report.txt
执行完后,在reprot.txt中查询刚才的口舌内容如下:
select count(*)
from
sys_dept
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———-
———- ———-
Parse 1 0.00 0.01 1 31 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.01 5 7 0 1
——- —— ——– ———- ———- ———-
———- ———-
total 3 0.00 0.03 6 38 0 1
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 62
通过设置tkprof的根本字[EXPLAIN =
<username/password>],也足以在跟踪文件中扩张SQL语句的施行陈设:
C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt
explain=test/test;
********************************************************************************
select count(*)
from
sys_dept
call count cpu elapsed disk query current rows
——- —— ——– ———- ———- ———-
———- ———-
Parse 2 0.00 0.01 1 31 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.01 5 14 0 2
——- —— ——– ———- ———- ———-
———- ———-
total 6 0.00 0.03 6 45 0 2
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 62
Rows Row Source Operation
——- —————————————————
1 SORT AGGREGATE
16 TABLE ACCESS FULL SYS_DEPT
一、概述:
SQL_TRACE是Oracle的一个要命强大的工具。打开SQL_TRACE就足以逐步捕获任何一个会话的数据库活动,或者捕获整个数据库的活动,并将数据库活动记录成跟踪文件。每一回使用完将来必要关闭跟踪,否则会下跌系统的性质。
SQL_TRACE可以帮忙诊断许多题目,其中囊括:
sql_trace是oracle提供的一个那么些好的跟踪工具,主要用来检查数据库的相当意况,通过跟踪数据库的位移,找到有问题的讲话。