Oracle 10046 SQL TRACE
10046是一个Oracle的内部事件(event),通过设置这个事件可以得到Oracle内部执行系统解析、调用、等待、绑定变量等详细的trace信息,对于分析系统的性能有着非常重要的作用。
设置10046事件的不同级别能得到不同详细程度的trace信息,下面就列出各个不同级别的对应作用:
等级 | 二进制 | 作用 |
---|---|---|
0000 | 无输出 | |
1 | 0001 | 输出 ****,APPNAME(应用程序名),PARSING IN CURSOR,PARSE ERROR(SQL解析),EXEC(执行),FETCH(获取数据),UNMAP,SORT UNMAP(排序,临时段),ERROR,STAT(执行计划),XCTEND(事务)等行 |
2 | 0011 | 与等级1完全一样 |
4 | 0101 | 包括等级1的输出,加上BIND行(绑定变量信息) |
8 | 1001 | 包括等级1的输出,加上WAIT行(等待事件信息) |
12 | 1101 | 输出等级1、等级4以及等级8的所有信息 |
等级1的10046 trace被视为是普通的SQL Trace,而等级4、等级8以及等级12则被称为Extended SQL Trace,Extended SQL Trace里面包括了最有用的WAIT信息,因此在实际中也是用的最多的。
与SQL Trace相关的参数
在打开10046时间的SQL Trace之前,要先设置好下面几个参数。
- timed_statistics
- 这个参数决定了是否收集与时间相关的统计信息,如果这个参数为FALSE的话,那么SQL Trace的结果基本没有多大的用处,默认情况下这个参数设置为TRUE。
- max_dump_file_size
- dump文件的大小,也就是决定是否限制SQL Trace文件的大小,在一个很忙的系统上面做SQL Trace的话可能会生成很多的信息,因此最好在会话级别将这个参数设置成unlimited。
- tracefile_identifier
- 给Trace文件设置识别字符串,这是个非常有用的参数,设置一个易读的字串能更快的找到Trace文件。
要在当前会话修改上述参数很简单,只要使用下面的命令即可:
1
2
3
|
ALTER
SESSION
SET
timed_statistics=
true
ALTER
SESSION
SET
max_dump_file_size=unlimited
ALTER
SESSION
SET
tracefile_identifier='my_trace_session
|
10046 Trace启动方法
使用sql_trace参数
sql_trace应该是简单快捷的开启Trace的方法了,不过通过sql_trace只能开启级别为1的Trace,而无法开启其他更高级的Trace。
session 级别: alter session set events ‘10046 trace name context forever,level X’;
system 级别 : alter system set events ‘10046 trace name context forever,level X’;
针对非本会话的 某一个进程设置,如果你知道他的SPID 操作系统进程号
oradebug setospid SPID;
oradebug event 10046 trace name context forever, level X;