ITPub博客

首页 > 数据库 > Oracle > 跟踪客户端执行的SQL

跟踪客户端执行的SQL

原创 Oracle 作者:leon830216 时间:2014-03-01 19:22:48 0 删除 编辑
-- 识别要跟踪的客户端程序到数据库的数据库连接
-- 只有DEDICATED模式下,跟踪才有效
column machine format a30
column program for a40
column username format a15
select
    s.sid,
    s.serial#,
    s.username,
    /*s.machine,
    s.program,
    p.spid,
    s.server,*/
    to_char(s.logon_time,'yyyy-mm-dd hh24:mi:ss') logon_time
from
    v$session s,
    v$process p
where
    p.addr=s.paddr and
    s.username is not null
/

-- 设定相应的参数
-- 一下参数最好在session级别启用,否则性能影响太大
-- 只有跟踪的session再次发出sql语句后,才会产生trc文件

-- timed_statistics
-- 收集跟踪信息时,是否将收集时间信息,如果收集,则可以知道一个sql的各个执行阶段耗费的时间情况
alter session set timed_statistics=true;

-- user_dump_dest
-- 存放跟踪数据的文件的位置
-- 只能在system级别作修改,所以一般用默认路径
show parameter user_dump_dest

-- max_dump_file_size
-- 放跟踪数据的文件的最大值,防止由于无意的疏忽,使跟踪数据的文件占用整个硬盘,影响系统的正常运行
alter session set max_dump_file_size=2048000000;

-- 启动跟踪功能
alter session set sql_trace = true;

-- 设置其他session
begin
exec dbms_system.set_int_param_in_session(sid,serial#,'max_dump_file_size',2048000000);
exec dbms_system.set_bool_param_in_session(sid,serial#,'timed_statistics',true);
exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
end;
/

-- 让系统运行一段时间,收集被跟踪session中正在执行的sql性能数据
select * from emp;

-- 关闭跟踪功能
alter session set sql_trace = false;

-- 格式化跟踪数据
tkprof /udump/xe_ora_4687.trc out.log

-- 直接输入tkprof,显示帮助信息
-- 计算sql消耗资源时,也要将recursive calls考虑进去

-- tkprof参数介绍
-- tracefile --- 指定输入文件,即oracle产生的trace文件,该文件中可以只包含一个session的跟踪信息,也可以包含系统中所有session的信息(此时需要在系统级进行跟踪)
-- outputfile --- 指定输出文件
-- explain --- explain=go/go,利用哪个用户对trace文件中的sql进行分析,从而得到该sql语句的执行计划,这也说明在tracefile中并没有各个sql语句的执行计划,只是在运行tkprof程序时才将tracefile文件中的sql语句用explian参数指定的用户连接到数据库,然后运用EXPLAIN PLAN命令生成sql的执行计划,这个用户一般是你的程序中连接数据库的用户
-- table --- 在对sql语句进行分析时,将产生的执行计划暂时存放到该表中。一般不需要该参数,这样当表不存在时,tkprof会自动创建相应的表,并在分析完之后,将创建的表自动删除。如果要指定自定义的表,该表的结构必须与utlxplan.sql文件中指定的表的结构一样。我一般不设置这个参数,让其采用默认的表名,并自动创建、删除
-- sys --- 是否对sys用户运行的sql语句或被跟踪session产生的recursive SQL也进行分析,并将分析结果放到输出文件中。缺省值为YES。我一般设为NO,这样输出文件中只包含我发出的sql语句,而不包含系统产生的sql。
-- sort --- 按照指定的排序选项(条件)对格式化好的sql语句进行降序排列,然后存放到输出文件中。可以将多个排序选项组合起来,如果没有指定排序选项,则按照使用sql的先后顺序。
-- print --- 只列出指定数量的已排序的sql语句,排序的条件参见SORT参数。如果忽略此参数,tkprof将跟踪文件中的所有的sql语句及其相关的分析数据存放到输出文件中。print与sort参数组合在一起,可以实现,找出某一阶段耗费cpu最多的前n个sql,找出某一阶段读硬盘最多的前n个sql等等。
-- insert --- 创建一个sql脚本文件,里面包含create table 与insert语句。利用这个脚本文件创建一个表及插入数据后,可以得到跟踪文件中所有sql语句(包含recursive SQL)的统计信息。利用这些信息,也可以发现有问题的sql。即是格式化好的输出文件中有关sql性能信息数据的数据库表的形式。我一般不用该参数
-- record --- 创建一个包含客户端程序发出的所有的sql语句的脚本文件。注意,并不包含recursive SQL。可以窥探别人程序是如何访问数据库的,从而对了解程序的访问流程。此时,最好不用sort参数,这样就可以按先后发出的顺序的到sql
-- aggregate --- 把同一sql的数据综合统计起来,只输出一此统计信息,默认为yes,指定为no时,每条sql会输出多次统计信息
-- waits --- 输出任何等待事件的统计信息,默认为yes

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22558114/viewspace-1097816/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 等待事件
请登录后发表评论 登录
全部评论

注册时间:2009-09-18

  • 博文量
    164
  • 访问量
    320387