使用sql_trace/10046事件进行数据库诊断
2012-07-27 11:28
337 查看
sql_trace/10046事件是oracle提供的用于进行sql跟踪的手段,其内容包括sql的解析过程、sql的执行计划、绑定变量的使用、会话发生的等待事件。
在使用sql_trace/10046事件前,有两个参数需要注意:
sql_trace的作用域:
1)对所有用户:
i)在参数文件中指定sql_trace=true
ii)alter system set sql_trace=true/false
2) 对当前用户:
启用当前session的跟踪:alter session set sql_trace=true;
结束跟踪:alter session set sql_trace=false;
3)对其他用户:
选择跟踪的进程(用户)
设置跟踪:
停止跟踪:
*************************************↖(^ω^)↗**********************************
10046事件是对sql_trace的增强,可分4个级别,具体如下:
1)level 1:等价于sql_trace
2)level 4:level 1+绑定值
3)level 8:level 1+等待事件跟踪
4)level 12:等价于level 1+level 4+level 8
10046事件的作用域:
1)对所有用户
i)在参数文件中修改:event=“10046 trace name context forever,level 12”
ii)alter system set events ‘10046 trace name context forever,level 8';
/ alter system set events '10046 trace name context off';
2)对当前用户
alter session set events '10046 trace name context forever,level 12'; 或者
alter session set events '10046 trace name context off';
3)对其他用户
查询要跟踪的对象
执行跟踪
结束跟踪
*********************************~(@^_^@)~*************************************
由于trace文件的格式比较难以阅读,我们可以通过TKPROF工具进行格式化,最终生成符合我们阅读习惯的sql trace 文件。
格式如下:
tkprof tracefile outputfile [options]
其中,option选项的说明和使用,我们可以通过在bash环境罗列:
我们通过一个例子来介绍对tkprof的使用:
SQL> show parameter timed_statistics
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
SQL> show parameter max_dump_file_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_dump_file_size string UNLIMITED
sys@ORCL> alter session set sql_trace=true;
sys@ORCL> select * from hr.departments;
sys@ORCL> alter session set sql_trace=false; --最好是关闭跟踪,减小对性能的开销
sys@ORCL> exit; --在运行完查询后,要退出sql*plus(断开连接),这样才能完全关闭跟踪文件,使trace文件的所有信息都是有效的。
然后,我们就可以使用tkprof:
在使用sql_trace/10046事件前,有两个参数需要注意:
sys@ORCL> show parameter max_dump_file_size --对trace文件的大小限制 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ max_dump_file_size string UNLIMITED sys@ORCL> show parameter timed_statistics --对重要信息的收集 NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ timed_statistics boolean TRUE
sql_trace的作用域:
1)对所有用户:
i)在参数文件中指定sql_trace=true
ii)alter system set sql_trace=true/false
2) 对当前用户:
启用当前session的跟踪:alter session set sql_trace=true;
结束跟踪:alter session set sql_trace=false;
3)对其他用户:
选择跟踪的进程(用户)
sys@ORCL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME ---------- ---------- ------------------------------ 142 14 HR 159 5 SYS
设置跟踪:
sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,true) PL/SQL procedure successfully completed.
停止跟踪:
sys@ORCL> exec dbms_system.set_sql_trace_in_session(142,14,false) PL/SQL procedure successfully completed.
*************************************↖(^ω^)↗**********************************
10046事件是对sql_trace的增强,可分4个级别,具体如下:
1)level 1:等价于sql_trace
2)level 4:level 1+绑定值
3)level 8:level 1+等待事件跟踪
4)level 12:等价于level 1+level 4+level 8
10046事件的作用域:
1)对所有用户
i)在参数文件中修改:event=“10046 trace name context forever,level 12”
ii)alter system set events ‘10046 trace name context forever,level 8';
/ alter system set events '10046 trace name context off';
2)对当前用户
alter session set events '10046 trace name context forever,level 12'; 或者
alter session set events '10046 trace name context off';
3)对其他用户
查询要跟踪的对象
sys@ORCL> select sid,serial#,username from v$session where username is not null; SID SERIAL# USERNAME ---------- ---------- ------------------------------ 142 14 HR 159 5 SYS
执行跟踪
sys@ORCL> exec dbms_system.set_ev(142,14,10046,8,'hr'); PL/SQL procedure successfully completed.
结束跟踪
sys@ORCL> exec dbms_system.set_ev(142,14,10046,0,'hr'); PL/SQL procedure successfully completed.
*********************************~(@^_^@)~*************************************
由于trace文件的格式比较难以阅读,我们可以通过TKPROF工具进行格式化,最终生成符合我们阅读习惯的sql trace 文件。
格式如下:
tkprof tracefile outputfile [options]
其中,option选项的说明和使用,我们可以通过在bash环境罗列:
[oracle@localhost ~]$ tkprof Usage: tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ] table=schema.tablename Use 'schema.tablename' with 'explain=' option. explain=user/password Connect to ORACLE and issue EXPLAIN PLAN. print=integer List only the first 'integer' SQL statements. aggregate=yes|no insert=filename List SQL statements and data inside INSERT statements. sys=no TKPROF does not list SQL statements run as user SYS. record=filename Record non-recursive statements found in the trace file. waits=yes|no Record summary for any wait events found in the trace file. sort=option Set of zero or more of the following sort options: prscnt number of times parse was called prscpu cpu time parsing prsela elapsed time parsing prsdsk number of disk reads during parse prsqry number of buffers for consistent read during parse prscu number of buffers for current read during parse prsmis number of misses in library cache during parse execnt number of execute was called execpu cpu time spent executing exeela elapsed time executing exedsk number of disk reads during execute exeqry number of buffers for consistent read during execute execu number of buffers for current read during execute exerow number of rows processed during execute exemis number of library cache misses during execute fchcnt number of times fetch was called fchcpu cpu time spent fetching fchela elapsed time fetching fchdsk number of disk reads during fetch fchqry number of buffers for consistent read during fetch fchcu number of buffers for current read during fetch fchrow number of rows fetched userid userid of user that parsed the cursor
我们通过一个例子来介绍对tkprof的使用:
SQL> show parameter timed_statistics
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
timed_statistics boolean TRUE
SQL> show parameter max_dump_file_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_dump_file_size string UNLIMITED
sys@ORCL> alter session set sql_trace=true;
sys@ORCL> select * from hr.departments;
sys@ORCL> alter session set sql_trace=false; --最好是关闭跟踪,减小对性能的开销
sys@ORCL> exit; --在运行完查询后,要退出sql*plus(断开连接),这样才能完全关闭跟踪文件,使trace文件的所有信息都是有效的。
然后,我们就可以使用tkprof:
[oracle@localhost ~]$ tkprof /u01/app/oracle/admin/orcl/udump/orcl_ora_5467.trc tkprof_think.txt TKPROF: Release 10.2.0.1.0 - Production on Fri Jul 27 11:18:13 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. [oracle@localhost ~]$ ls tkprof_think.txt
相关文章推荐
- 使用 SQL_TRACE/10046 事件进行数据库诊断
- 使用SQL_Trace/10046事件进行数据库诊断
- oracle优化6(使用sql_trace/10046事件进行数据库诊断)
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断(转载)
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断 (转自eygle)
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断
- 使用SQL_TRACE进行数据库诊断