sql跟踪及tkprof使用

简述

在oracle数据库中,awr是关于数据库系统总体的负载情况和运行情况的报告。而当系统负载都显示正常,而client运行某些动作响应非常慢,或者某些终端连接的会话运行缓慢或异常时,就须要用到会话级别的跟踪了。

常见方法概述

Session级别跟踪的方法有很多。比方当前会话的跟踪,能够运行命令

Alter session set sql_trace=true;

Alter session set sql_trace=false;

或者使用10046事件

Alter session set events ‘10046 trace name context forever,level 12’;

Alter session set events ‘10046 trace name context off’

当中level 12是可选级别。

Level 1是指标准的sql跟踪。与设置sql_trace效果同样。

Level 4是指在标准的基础上添加绑定变量信息。

Level 8是指在标准的基础上添加等待事件信息。

Level 12是指在标准的基础上同一时候添加绑定变量信息和等待事件信息。

以上样例是在session级别进行跟踪。若环境中须要在整个实例级别进行跟踪,则直接将以上命令中的session更改为system就可以实现。

但系统级别的跟踪将消耗大量的系统资源,因此,若非性能诊断须要。不要开启在系统级别的sql_trace。

我们要用的方法

方法有非常多。会用一种即可。以下我们说下我推荐的一种方法。

首先,能够设置trace文件标志。使我们的trace文件更easy找出来。

Alter session set tracefile_identifier=’wjf’;

之后打开计时

Alter system set timed_statistics=true;

然后查找到要跟踪会话的sid与serial#,

Select sid,serial#,osuser,machine from v$session;

找到sid与serial#后,就能够运行跟踪了。比方sid=22,serial#=22;

运行下面命令

Exec dbms_monitor.session_trace_enable(22,22,waits=>true,binds=>true);

Exec dbms_monitor.session_trace_disable(22,22);

当中waits=>true跟binds=>true想必也不用解释了。

追踪文件处理(tkprof)

追踪后的trc文件能够在DIAGNOSTIC_DEST文件夹下找到。可是直接追踪产生的trc文件可读性并不好,须要借助一个oracle提供的工具处理下面。这个工具就是tkprof。

比如我们此处生成trc文件名为orcl_ora_1234_wjf.trc.

则我们须要在系统级别。即退出sqlplus。在shell或cmd下运行下面命令

Shell>tkprof d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_1234_wjf.trcd:/wjf_2222.txt

这样就能生成可读性较强的追踪文件进行分析了。Tkprof工具必须输入的两个參数也就是一个输入文件。一个输出文件而已。

但tkprof另一些其它參数,非常多时候须要利用其它參数来生成文件,从而更方便找出问题。

Tkprof工具的标准语法

tkprof filename1filename2 [waits=yes|no] [sort=option] [print=n]

    [aggregate=yes|no] [insert=filename3] [sys=yes|no] [table=schema.table]

    [explain=user/password] [record=filename4] [width=n]

Tkprof參数介绍

介绍几个自我感觉比較经常使用的參数

Waits=yes|no:是否包括等待事件信息。

Print=n:设置显示多少行sql。比方你设置了排序信息,能够仅仅查看top 10的sql,就能够设置print=10了。

Sys=yes|no:设置是否包括sys用户所公布的sql。主要是为了启动或禁止显示用户为运行自己的sql所产生的递归sql。默觉得yes。

Sort=option:设置生成sql依据指定选项进行排序。

prscnt  number oftimes parse was called

 prscpu  cpu timeparsing

  prsela  elapsedtime parsing

  prsdsk  numberof disk reads during parse

  prsqry  numberof buffers for consistent read during parse

   prscu   numberof buffers for current read during parse

   prsmis  numberof misses in library cache during parse

 

    execnt  numberof execute was called

    execpu  cputime spent executing

    exeela  elapsedtime executing

    exedsk  numberof disk reads during execute

    exeqry  numberof buffers for consistent read during execute

    execu   numberof buffers for current read during execute

    exerow  numberof rows processed during execute

    exemis  numberof library cache misses during execute

 

    fchcnt  numberof times fetch was called

    fchcpu  cputime spent fetching

    fchela  elapsedtime fetching

    fchdsk  numberof disk reads during fetch

    fchqry  numberof buffers for consistent read during fetch

    fchcu   numberof buffers for current read during fetch

    fchrow  numberof rows fetched

    userid  useridof user that parsed the cursor

其它另一些參数。详细能够查看联机文档中的performance tunning guide。

Tkprof举例

所以。一个比較正常的tkprof语句可能是这个样子的

tkprof d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_1234_wjf.trcd:/wjf_2222.txt waits=no  sys=no  sort=(prscpu,execpu,fchcpu) print=10;

就这样了。就像生成awr报告一样,生成文件永远是最简单的。能把生成的报告读的多透彻才是见功底的东西。在此。我只把生成报告的过程做个记录,至于怎么读,慢慢再说。

原文地址:https://www.cnblogs.com/mthoutai/p/6867969.html