1.oracle数据库的跟踪和分析方法

1.SQL_TRACE以及10046事件

   最常用的跟踪方式是通过初始化参数sql_trace或者设置10046事件。 

SQL> show parameter sql_trace;

NAME                     TYPE
------------------------------------ ----------------------
VALUE
------------------------------
sql_trace                 boolean
FALSE

  

    这里可以通过设置sql_trace可以启动或禁用sql跟踪工具,设置为true可以收集信息用于性能优化或问题诊断,DBMS_SYSTEM包也可以用于类似功能

  警告:设置该参数为true会严重影响性能,因此在产品环境中如非必要,确保不要设置该参数,如果是对特定的session启动跟踪,可以使用alter session或者DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来设置。

  在12c中不再支持sql_trace参数,推荐使用DBMS_MONTTOR和DBMS_SESSION包来替代其功能。而事实上,在DBA工作中,sql_trace很少使用,更多是10046事件。

复制代码
SQL> alter session set sql_trace=true;   ##开启跟踪事件

Session altered.

SQL> select count(*) from dba_users;    

  COUNT(*)
----------
    38

SQL> alter session set sql_trace=false; ##关闭跟踪事件

Session altered.

SQL> select value from v$diag_info where name='Default Trace File';  ##查看跟踪事件生成的文件

VALUE
--------------------------------------------------------------------------------
/data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_82172.trc   ##生成的该文件一般用tkprof进行格式化解析
复制代码

  tkprof + 跟踪文件   会生成一个新的prf文件,该文件显示的更加清除明白 

复制代码
********************************************************************************

SQL ID: aam2chsgpj7mb
Plan Hash: 0
alter session set sql_trace=false
call
count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 0.00 0.00 0 0 0 0 Misses in library cache during parse: 1 Optimizer mode: ALL_ROWS Parsing user id: SYS
复制代码

   但是很多时候需要跟踪其他用户的进程,而不是当前用户,这里可以通过oracle提供的系统包DBMS_SYSTEM的set_sql_trace_in_session过程来完成。

 通过查询V$session可以获取会话中sid,serial#等信息,获取会话信息之后就可以跟踪 

select username,sid,serial# from v$session where username is not null
USERNAME            SID    SERIAL#
-------------------- ---------- ----------
SYS                125        311

   设置跟踪   

SQL> exec dbms_system.set_sql_trace_in_session(123,311,true)   ##这里开启跟踪功能
过程时间后在关闭跟踪 SQL
> exec dbms_system.set_sql_trace_in_session(123,311,false) ##这里关闭跟踪功能

  以上会生成一个trace文件,然后再用tkprof命令进行格式化解析,最后将解析后的文件打开进行具体分析

   

 

 

    

 

posted on   太白金星有点烦  阅读(1315)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示