oracle的trace步骤

12 views
Skip to first unread message

Lian...@gmail.com

unread,
May 24, 2008, 12:22:59 PM5/24/08
to Liant's Oracle Note
1.首先核查几个init参数

TIMED_STATISTICS最好设为TRUE,该参数决定是否收集时间相关的统计
在STATISTICS_LEVEL为TYPICAL或者ALL时, TIMED_STATISTICS缺省值为true
在STATISTICS_LEVEL为BASIC, TIMED_STATISTICS缺省值为then false
该参数可以通过ALTER SESSION或ALTER SYSTEM修改

MAX_DUMP_FILE_SIZE最好设为unlimited, 该参数决定了trace文件的最大尺寸
该参数可以通过ALTER SESSION或ALTER SYSTEM修改

USER_DUMP_DEST必须设置为一个实际的oracle所在服务器目录, 该参数决定了trace文件的存放目录
该参数可以通过ALTER SYSTEM修改

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

2.设置TRACEFILE_IDENTIFIER

通常为了方便识别生成的trace文件, 可以通过如下语句给trace文件设置一个标识

ALTER SESSION SET TRACEFILE_IDENTIFIER = 'my_trace_id';

生成的trace文件中就会包含设置的TRACEFILE_IDENTIFIER

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

3. 开启TRACE

对于trace会话自身SQL的, 可以通过SQL_TRACE参数或者10046事件来做TRACE

SQL_TRACE参数:
开启: alter session set SQL_TRACE=true;
关闭: alter session set SQL_TRACE=true;

10046事件:
开启: alter session set events '10046 trace name context forever, level
<num>';
关闭: alter session set events '10046 trace name context off';
<num> 可以是1, 4, 8 或 12
1 等同于sql_trace=true
4 包含level 1的内容,同时包含绑定变量信息
8 包含level 1的内容,同时包含等待事件
12 包含level 1, 4, 8的内容

另外可以通过DBMS_MONITOR这个包来trace其他会话,不过不仅需要给出session_id,还要给serial_num
SESSION_TRACE_DISABLE
SESSION_TRACE_ENABLE

此外DBMS_MONITOR还可以trace如下级别上的sql:
client_id级别:
CLIENT_ID_TRACE_DISABLE
CLIENT_ID_TRACE_ENABLE
需要说明下client_id, 这个需要在被trace的会话中通过dbms_session.set_identifier设置。
database级别:
DATABASE_TRACE_DISABLE
DATABASE_TRACE_ENABLE
service, modual, action级别
SERV_MOD_ACT_TRACE_DISABLE
SERV_MOD_ACT_TRACE_ENABLE


DBMS_MONITOR还包含如下几个procedure,可以在动态性能视图上直接显示统计信息
(DBA_ENABLED_AGGREGATIONS, V$CLIENT_STATS, V$SERVICE_STATS, V
$SERV_MOD_ACT_STATS, V$SVCMETRIC)
CLIENT_ID_STAT_DISABLE
CLIENT_ID_STAT_ENABLE
SERV_MOD_ACT_STAT_DISABLE
SERV_MOD_ACT_STAT_ENABLE

不过通过DBMS_MONITOR做的trace, 需要用trcsess命令生成trace文件, 语法如下

trcsess [output=output_file_name]
[session=session_id]
[clientid=client_id]
[service=service_name]
[action=action_name]
[module=module_name]
[trace_files]

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

4. 确定trace文件路径

如果指定了TRACEFILE_IDENTIFIER, 则可以在USER_DUMP_DEST通过TRACEFILE_IDENTIFIER识别出
trace文件
如果是通过trcsess命令生成的trace文件, 则可以根据trcsess命令中的[output=output_file_name]找到
trace文件
否则的话,就必须知道所trace的会话对应的实例名以及OS级别上的进程号, 用system用户可以通过如下sql得到trace文件路径
SELECT d.VALUE
|| '/'
|| LOWER (RTRIM (i.INSTANCE, CHR (0)))
|| '_ora_'
|| p.spid
|| '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$session s, v$process p
WHERE s.sid = <trace的会话的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, 格式化trace文件

tkprof语法, 参数具体意义可以查《Oracle Database Performance Tuning Guide 10g
Release 2》:
tkprof input_filename
output_filename
[waits=yes|no]
[sort=option]
[print=n]
[aggregate=yes|no]
[insert=filename3]
[sys=yes|no]
[table=schema.table]
Reply all
Reply to author
Forward
0 new messages