SQL_TRACE使用案例

SQL_TRACE主要是为了追踪SQL的执行过程,分析SQL的性能,资源消耗情况。

它可以查看SQL是如何操作处理数据、在执行过程中产生了哪些等待事件,查看sql在执行过程中的资源消耗、可以查看sql的递归语句,是sql的实际执行计划。

(1)开启跟踪

  • 跟踪自己的会话很简单

SQL>alter session set tracefile_identifier=‘mysession‘; ---给当前会话一个标示,便于查找跟踪生成的文件

Alter session set sql_trace= true;
或者
exec dbms_session.set_sql_trace(true);

  • 如果跟踪别人的会话,需要调用一个包
    exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false);
  • 整个数据库系统跟踪

alter system set sql_trace=true; ---在11g中已经不推荐使用

(2)执行sql语句

SQl >select * from SCOTT.DEPT; --当前会话执行的语句

或者如果跟踪别人的会话则等待别的会话执行sql语句

(3)关闭跟踪

  • 关闭跟踪自己的会话
    Alter session set sql_trace= false;
    或者
    exec dbms_session.set_sql_trace(false);
  • 如果跟踪别人的会话,需要调用一个包
    exec dbms_system.set_sql_trace_in_session(sid,serial#,false);
  • 关闭整个数据库系统跟踪

alter system set sql_trace= false; ---在11g中已经不推荐使用
(4)查找跟踪文件

在$ORACLE_BASE/admin/sid/udump下找到跟踪文件,比如前面设置标示符为‘mysession‘的trace文件

或者用脚本查看跟踪文件位置(当前会话):

select d.value||‘\‘||lower(rtrim(i.instance,chr(0)))||‘_ora_‘||p.spid||‘.trc‘trace_file_name from

(select p.spid from v$mystat m, v$session s,v$process p wherem.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr ) p,

(select t.instance from v$thread t,v$parameter v where v.name =‘thread‘ and(v.value = 0 or t.thread# = to_number(v.value))) i,

(select value from v$parameter where name = ‘user_dump_dest‘) d;

(5)格式化跟踪文件

tkprof  跟踪文件名  输出文件名

(6)案例1(当前会话跟踪)

【示例】:


SQL>  alter session set tracefile_identifier=‘mysession‘;

会话已更改。

SQL>  Alter session set sql_trace= true;

会话已更改。

SQL>  select * from SCOTT.DEPT;

DEPTNO DNAME                        LOC

----------  ---------------------------- --------------------------

50 ACCOUNTINGcs                 NEW YORK

60 RESEARCHcs                   DALLAS

70 SALEScs                      CHICAGO

80 OPERATIONScs                 BOSTON

51 ACCOUNTINGcscs               NEW YORK

61 RESEARCHcscs                 DALLAS

71 SALEScscs                    CHICAGO

81 OPERATIONScscs               BOSTON

11 ACCOUNTINGcs                 NEW YORK

21 RESEARCHcs                   DALLAS

31 SALEScs                      CHICAGO

DEPTNO DNAME                        LOC

----------  ---------------------------- --------------------------

41 OPERATIONScs                 BOSTON

10 ACCOUNTING                   NEW YORK

20 RESEARCH                     DALLAS

30 SALES                        CHICAGO

40 OPERATIONS                   BOSTON

已选择16行。

SQL>  Alter session set sql_trace= false;

会话已更改。

SQL>  select d.value||‘\‘||lower(rtrim(i.instance,chr(0)))||‘_ora_‘||p.spid||‘.tr

c‘  trace_file_name from(select p.spid from v$mystat m, v$session s,v$process p w

here  m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr ) p, (select t.inst

ance from  v$thread t,v$parameter v where v.name = ‘thread‘ and(v.value = 0 or t.

thread# =  to_number(v.value))) i, (select value from v$parameter where name = ‘u

ser_dump_dest‘)  d;

TRACE_FILE_NAME

--------------------------------------------------------------------------------

e:\app\yan\diag\rdbms\orcl\orcl\trace\orcl_ora_1584.trc

进入命令行:

C:\Users\yan>e:

E:\>cd  E:\app\yan\diag\rdbms\orcl\orcl\trace

由于刚才用了标示符,所以跟踪文件多了mysessio字符串:

E:\app\yan\diag\rdbms\orcl\orcl\trace>tkprof  orcl_ora_1584_mysession.trc orcl_or

a_1584_mysession.txt

TKPROF:  Release 11.2.0.1.0 - Development on 星期三 3月 26 15:47:50 2014

Copyright (c) 1982, 2009, Oracle and/or its  affiliates.  All rights reserved.

案例2(跟踪别人的会话)

【示例】:


当前会话执行:

SQL>  select distinct sid from v$mystat;

SID

----------

134

另一个会话执行:

SQL>  select distinct sid from v$mystat;

SID

----------

141

当前会话执行:

SQL>  select sid,serial# from v$session where sid in (141,134);

SID     SERIAL#

----------  ----------

134       7471

141      14317

SQL>  execute sys.dbms_system.set_sql_trace_in_session(141,14317,true);

PL/SQL 过程已成功完成。

另一个会话执行:

SQL>  select count(*) from SCOTT.t1;

COUNT(*)

----------

72564

当前会话执行:

SQL>  execute sys.dbms_system.set_sql_trace_in_session(141,14317,false);

PL/SQL 过程已成功完成。

进入命令行:

C:\Users\yan>e:

E:\>cd  E:\app\yan\diag\rdbms\orcl\orcl\trace

由于刚才用了标示符,所以跟踪文件多了mysessio字符串:

E:\app\yan\diag\rdbms\orcl\orcl\trace>tkprof  orcl_ora_12224.trc orcl_or

a_12224.txt

TKPROF:  Release 11.2.0.1.0 - Development on 星期三 3月 26 15:47:50 2014

Copyright (c) 1982, 2009, Oracle and/or its  affiliates.  All rights reserved.

时间: 2024-10-10 14:10:20

SQL_TRACE使用案例的相关文章

Oracle性能优化之性能跟踪工具_超越OCP精通Oracle视频教程培训34

Oracle性能优化之性能跟踪工具_超越OCP精通Oracle视频教程培训34 课程介绍 Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第4/10套:Oracle性能优化之性能跟踪工具.主要学习Oracle性能优化,如何获取跟踪文件,sql_trace及案例,10046事件及案例,trace内容分析,oradebug及案例,dbms_system,dbms_monitor及案例,dbms_support,10053事件及案例,综合案例

Oracle数据库案例整理-Oracle系统执行失败-sql_trace至TRUE导致Oracle在根文件夹中缺乏可用空间

1.1       述 在"$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace"文件夹下产生大量"oracle_w000_9708.trc"和"oracle_w000_9708.trm"文件. 产生这些文件的速度太快.导致Oracle根文件夹可用空间不足. 1.2       可能原因 导致"$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_S

通过案例学习调优之--ADDM

通过案例学习调优之--ADDM使用 应用环境: 操作系统: RedHat EL55 Oracle:   Oracle 10gR2 一.ADDM简介          在Oracle9i及之前,DBA们已经拥有了很多很好用的性能分析工具,比如,tkprof.sql_trace.statspack.set event 10046&10053等等.这些工具能够帮助DBA很快的定位性能问题.但这些工具都只给出一些统计数据,然后再由DBA们根据自己的经验进行优化.        那能不能由机器自动在统计数

PLSQL_在执行1亿条资料插入长脚本如何判断需耗时多久v$sql / v$sqltext / v$sqlarea / v$sql_plan(案例)(监控SQL效率)

2014-08-27 BaoXinjian 一.摘要 当执行耗时时间较长的PLSQL时,有时需要查看程式运行的进度,目前已经处理了多少资料,还需处理多上资料 如果程式中专门的Log Module管控这一块,问题就不太大 如果没有这个这块的管控,可能就需要通过跟踪session,并查询动态性能视图,大概猜测出系统的运行情况,特别是undo表空间的变化 二.案例 案例: Step1. 创建测试表bxj_test create table bxj_test ( invoice_id number, i

oracle sql_trace 简单应用介绍

SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法. 1.通过putty 或其他主机工具进入数据库所在主机. 2.在命令行中通过sqlplus登录oracle. ???连接数据库命令:sqlplus username/password 3.使用SQL_TRACE分析sql语句. SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用.(以下案例均在sess

解决 libev.so.4()(64bit) is needed by percona-xtrabackup-2.3.4-1.el6.x86_64案例

在mysql主从同步时经常会用到Xtra, XtraBackup可以说是一个相对完美的免费开源数据备份工具,支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比mysqldump来说优势较大好处多,在RHEL6中安装XtraBackup时会发生缺少依赖包的现象 本案例针对Xtra缺少依赖包的情况进行安装分析解决 1.本实验环境 [root@master ~]# uname  -r 2.6.32-573.el6.x86_64 [root@master ~]# cat /etc/redhat-

系统内存耗尽的案例分析

近日遇到一个RAC节点hang导致节点被重启的问题,最后经过分析,发现在系统运行一段时间后,系统内存就会耗尽,原本256G的内存,最后只剩几百M. 1. 问题时间段的TOP输出可以看到,内存只剩7G,而分析内存问题,TOP输出是不够的,一般情况下,Database的SGA和PGA是内存使用大户,所以,在TOP很难发现谁是使用内存最多的. 除非某些进程内存使用的格外明显 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Linux OSWbb v7.3.

案例分享:使用员工电脑监控,有什么好处?

下面分享一个真实案例: 北京**科技有限公司梁总想要通过企业员工电脑监控来对员工上网进行管理,通过软件的监控与管理,减少上班与工作无关的上网行为,从而提高员工有效工作效率. 员工工作效率低,上网无节制 梁总发现,最近公司业绩颇有下滑的趋势,于是想要了解员工的详细工作进展,当他在公司时,每一个员工看起来都在忙碌着工作,似乎没什么不妥,但是原因到底是什么呢?难道这只是表面的工作,平时我不在公司,是这样的状态吗?员工会在我离开时,大部分时间在做与工作无关的事,上网聊天?购物? 后来,梁总经朋友介绍,说

OpenFEA应用案例

OpenFEA分析性能卓越,使用简便,自发布以来,即受到大数据分析师的推祟,在各行各业广泛得到应用.    案例一:网络安全态势感知     网络安全态势感知,是基于OpenFEA技术,通过对影响网络安全的资产.漏洞.攻击.异常流量等因素进行大数据分析,使用户宏观.全局的了解网络的安全状况,动态把握特定环境下的网络风险演变过程.从而有效保障网络空间的安全,构筑"防护+监测"的全方位安全保障体系.      案例二:用户异常行为分析     用户异常行为分析(简称UBA),是以OpenF