Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1134175
  • 博文数量: 113
  • 博客积分: 2422
  • 博客等级: 大尉
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-25 17:54
文章分类
文章存档

2016年(1)

2014年(8)

2013年(7)

2012年(13)

2011年(42)

2010年(26)

2009年(6)

2008年(6)

2007年(4)

我的朋友

分类: Oracle

2014-06-21 10:28:11

oracle监控进程的具体操作

在实际工作中,我们经常发现系统比较慢,但是具体原因不清楚,需要我们跟踪到数据库内部看到底执行了什么,这就需要我们使用trace文件,下面是我自己总结的一点tip。

应用场景一:知道某个用户,想跟踪这个用户的操作

1.找到SID和serial#
select * from v$session 根据machine program type找个这个用户的sid,serial#

2.找到trace文件路径
根据v$session的paddr找对对应的v$process的addr
select tracefile from v$process where addr='4D3CD904'

3.开启trace
 exec dbms_monitor.session_trace_enable(sid,serial#)

4.开启文件输出
  alter session set sql_trace=true;

5.session操作,让客户端执行一些操作

6.检查文件是否存在,oracle11g默认在/opt/oracle/diag/rdbms/orcl/orcl/trace/
  也可以查询select * from v$diag_info where name='Default Trace File';
  获取默认路径地址

7. 关闭trace
alter session set sql_trace=false;
exec dbms_monitor.session_trace_enable(sid,serial#,false);

8.tkprof格式化输出
  在trace文件路径下可以执行tkprof dbname_ora_2000.trc /opt/out/traceview.txt
  tkprof存在$ORACLE_HOME/bin下,如果没有配置环境变量需要注意
   tkprof colm_ora_2056.trc /opt/out/trace.txt print=100 record=/opt/out/sql.txt sys=yes

 

应用场景二:如果系统负载比较高,想找到负载重的进程到底做了什么,可以按如下操作
  1.例如首先从os上利用top命令找到当前占用cpu资源最高的一个进程的PID号9999;
  2.数据库中根据PID号找到相应的sid和serial#
   select s.sid,s.serial# from v$session s,v$process p where s.paddr=p.addr and p.spid='9999';
  3.开启trace和文件输出,后面就一样操作了。
 trprof参数:
  tkprof tracefile outputfile [explain= ] [table= ] [print= ] [insert= ] [sys= ] [sort= ]
  <1>table=schema.tablename Use 'schema.tablename' with 'explain=' option.
     用于指定在将执行规划写进输出文件之前,TKPROF用于临时存放执行规划所用表的架构和名称
  <2>explain=user/password Connect to ORACLE and issue EXPLAIN PLAN.
  <3>print=integer List only the first 'integer' SQL statements.
     只列出输出文件中的第一个INTEGER的SQL语句,若忽略,则TKPROF将列出所有跟踪的SQL语句
  <4>aggregate=yes|no
     若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总
  <5>insert=filename
     List SQL statements and data inside INSERT statements.
     SQL脚本的一种,用于将跟踪文件的动机信息存储到数据库中
  <6>sys=yes/no
     TKPROF does not list SQL statements run as user SYS.
     用于启动或禁止将用户SYS所发布的SQL语句列表到输出文件之中,也包括递归SQL(为执行用户的SQL语句,ORACLE还必须执行一些附加语句)语句在内。默认为YES
  <7>record=filename
     Record non-recursive statements found in the trace file.
     对于跟踪文件中的所用非递归SQL语句,TKPROF 将以指定的名称来创建某个SQL脚本。用于对跟踪文件中的用户时间进行重放
  <8>aits=yes|no
      Record summary for any wait events found in the trace file.
  <9>sort=option
     Set of zero or more of the following sort options:
     在将被跟踪的SQL语句列表输出到跟踪文件之前,先将其按照指定排序选项的降序关系对其进行排序;若指定了多种排序选项,那么根据排序选项所指定值的和的降序关系对其进行排序;若忽略此参数,那么TKPROF将按照使用次序把语句列表到输出文件中
阅读(1631) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~