使用SQL TRACE 实用工具和TKPROF

来源:百度文库 编辑:神马文学网 时间:2024/04/28 03:16:05
使用SQL TRACE 实用工具和TKPROF
set timing on
设置SQL查询时间
一、设置init.ora 中的TIMED_STATISTICES、MAX_DUP_FILE_SIZE、USER_DUMP_DEST
show parameter timed_statistics;
TIMED_STATISTICS      用于启动或禁止对定时统计信息(如CUP时间、占用时间),以及动态性能表中多种统计信息的收集功能。

alter session set timed_statistics true;
alter system set timed_statistics false;

MAX_DUP_FILE_SIZE     当实例层启用SQL TRACE的时候,在每次请求服务器的时候,都将在跟踪文件中产生一个文本行,这些文件
        的最大尺寸受限于初始化参数的设置。默认为500。若里面的数据被截断则增大SIZE。若为UNLIMITED则意味
        着没有上限。
USER_DUMP_DEST        设置跟踪文件的存储位置。默认为admin/用户/udump;alter system set user_dump_dest=newdir
BACKGROUND_DUMP_DEST 在多线程服务器(MTS)连接时采用。
二、启动SQL TRACE实用工具
对会话启动SQL TRACE
alter session set sql_trace=true;
alter session set sql_trace=false;
SYS.DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION=( SID , SERIAL# , TRUE );
ALTER SESSION SET EVENTS
alter session set events ‘10046 trace name context forever,level‘;
alter session set events ‘10046 trace name context off‘;
alter system set events ‘10046 trace name context forever,level 1‘
alter system set events ‘10046 trace name context off‘

n=1---------激活标准SQL_TRACE工具,这与设置SQL_TRACE=TRUE 没有任何不同;
n=4---------激活标准SQL_TRACE,且可以扑获跟踪文件中的绑定变量。
n=8---------激活标准SQL_TRACE,且可在查询级上扑获跟踪文件中的等待事件。
n=12--------激活标准SQL_TRACE,并包括扑获绑定变量与等待事件。
对用户实例启动 SQL TRACE
alter system set sql_trace=true;
alter system set sql_trace=false;

在WEB应用程序中用该用户的触发器
create or replace trigger logon_trigger
alter logon on database
begin
  if(user=‘TKYTE‘)then
  excute immediate
  ‘ALTER SESSION SET ENVETS"10046 TRACE NAME CONTEXT FOREBER,LEVEL4"‘);
  end if;
end;   

create or replace trigger trace_logon
after logon on database
begin
if ( user = ‘SCOTT‘ ) then
execute immediate
‘alter session set sql_trace=true‘;
end if;
end;
/

 

三、利用TKPROF格式化跟踪文件
tkprof
对跟踪文件中的COMMIT、ROLLBACK,TKPROF不能产生报告

tkprof filename1 filename2 sort=(prsdsk,exedsk,fchdsk) print=10 explanin=scott/tiger table=scott.temp_plan_table_a
       insert=storea.sql sys=no

filename1 tkprof的输入文件,它是SQL跟踪工具产生的跟踪文件,包含有关的统计信息。
filename2 输出TKPROF输出的格式化文件名。
SORT 在将被跟踪的SQL语句列表输出到跟踪文件之前,先将其按照指定排序选项的降序关系对其进行排序;若指定了多种排序选项,
     那么根据排序选项所指定值的和的降序关系对其进行排序;若忽略此参数,那么TKPROF将按照使用次序把语句列表到输出文件中。
        PRSCNT 语句解析的数目;
 PRSCPU 语句解析所占用的CPU时间;
 PRSELA 语句解析所占用的时间(总是大于或等于CPU时间);
 PRSDSK 语句解析期间,从磁盘进行物理读取的数目;
 PRSQRY 语句解析期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目;
 PRSCU  语句解析期间,当前模式读取(CURRENT MODE BLOCK READ)的数目
 PRSMIS 语句解析期间,库缓存失败的数目;
 
 EXECNT 语句执行的数目;
 EXECPU 语句执行所占用的CPU时间;
 EXEELA 语句执行所占用的时间(总是大于或等于CPU时间);
 EXEDSK 语句执行期间,从磁盘进行物理读取的数目;
 EXEQRY 语句执行期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目;
 EXECU  语句执行期间,当前模式读取(CURRENT MODE BLOCK READ)的数目
 EXEROW 语句执行期间,所处理的语句行数;
 EXEMIS 语句执行期间,库缓存失败的数目;
    
        FCHCNT 取数据的数目;
 FCHCPU 取数据所占用的CPU时间;
 FCHELA 取数据所占用的时间(总是大于或等于CPU时间);
 FCHDSK 取数据期间,从磁盘进行物理读取的数目;
 FCHQRY 取数据期间,一致模式块读取(CONSISTENT MODE BLOCK READ)的数目;
 FCHCU  取数据期间,当前模式读取(CURRENT MODE BLOCK READ)的数目
 FCHROW 所获取的行数;     
PRINT 只列出输出文件中的第一个INTEGER的SQL语句,若忽略,则TKPROF将列出所有跟踪的SQL语句。
AGGREGATE 若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总。
INSERT SQL脚本的一种,用于将跟踪文件的动机信息存储到数据库中。
SYS   用于启动或禁止将用户SYS所发布的SQL语句列表到输出文件之中,也包括递归SQL(为执行用户的SQL语句,ORACLE还必须执行
      一些附加语句)语句在内。默认为YES。
TABLE 用于指定在将执行规划写进输出文件之前,TKPROF用于临时存放执行规划所用表的架构和名称。
SESSION 对于跟踪文件中的个条SQL语句,用于确定其相应的执行规划,并将执行规划写进输出文件之中。
RECORD 对于跟踪文件中的所用非递归SQL语句,TKPROF 将以指定的名称来创建某个SQL脚本。用于对跟踪文件中的用户时间进行重放。

find "total" resport.txt 用FIND来抽取所有的TOTAL行,以便我能知道应加速进行的查询。
三、表式统计信息
PARSE 将把SQL语句转化为执行规划,其中包括对安全授权的检查,以及对存在表、列和其他访问对象进行检查。
EXECUTE 由ORACLE进行语句执行。对于INSERT、UPDATE、DELETE的语句,将对数据进行修改;对于SELECT语句,将对所选行进行确定。
FETCH 将检查出查询的返回行,只有SELECT语句能够执行取数据的操作。
COUNT 语句解析、执行或取数据等调用的次数;
CPU 某条语句进行解析、执行和取数据等调用所占用地时间,单位为秒。若TIMED_STATISTICS功能处于为启动,则该值为0;
ELAPSED 某条语句进行解析、执行和取数据等调用所占用地时间,单位为秒。若TIMED_STATISTICS功能处于为启动,则该值为0;
DISK 对于所有语句解析、执行和取数据等调用,从磁盘数据文件中物理读取的数据块数目;
QHERY 对于所有语句解析、执行和取数据等调用,以一致模式所检索的缓冲总数目。通常下,查询通过一致模式进行检索工作。
CURRENT 以当前模式所检索的缓冲总数目,对INSERT、UOPDATE、DELETE 等语句,查询通过当前模式进行检索工作。
ROWS SQL语句所处理行的总数目,它并不包括SQL语句的子查询所处理的行数。

PARSE-COUNT/EXECUTE-COUNT确定内存使用情况
CPU/ELAPSED确定等待时间
FETCH-COUNT/FETCH-ROW确定一次性读取的行数,是否用批量处理(默认使用时为15行)
DISK COUNT=QUERY+CRRENT MODE BLOCK COUNT 则所有的块从磁盘读。应该有些从SGA中读取。

 

 

UNNEST_SUBQUERY =TRUE 启动子查询去嵌套。
NO_UNNEST 关闭特定子查询块