Lian...@gmail.com
unread,May 24, 2008, 12:22:59 PM5/24/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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]