Oracle sql trace用法
sql_trace是oracle提供的一个非常好的跟踪工具,主要用来检查数据库的异常情况,通过跟踪数据库的活动,找到有问题的语句。
一、概述:
SQL_TRACE是Oracle的一个非常强大的工具。打开SQL_TRACE就可以逐步捕获任何一个会话的数据库活动,或者捕获整个数据库的活动,并将数据库活动记录成跟踪文件。每次使用完之后需要关闭跟踪,否则会降低系统的性能。
SQL_TRACE可以帮助诊断许多问题,其中包括:
二、用法:
1、文件跟踪的分类:
跟踪DBA可以采用两种方式进行跟踪:
. 跟踪整个数据库实例。只需要简单的修改参数文件(pfile/spfile)参数 SQL_TRACE = TRUE ,然后重新启动数据库即可。在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这样也会数据库导致性能下降比较明显。
. 会话级跟踪。SQL_TRACE的通常使用方式是仅跟踪一个会话。被跟踪的会话可以是您自己的,也可以是其它用户的会话。如果是自己的会话,只需要在SQL*PLUS中运行一下命令即可:
SQL> alter session set sql_trace = true;
类似的如果取消对会话的跟踪,运行一下命令:
SQL> alter session set sql_trace = false;
如果需要跟踪一个特定的会话,首先需要获取会话的SID和Serial#,这些信息可以在视图V$SESSION中获得,一旦知道了这两个参数,就可以运行一下命令:
SQL> execute SYS.dbms_system.set_sql_trace_in_session(13,9,true);
同样也可以使用这个过程关闭会话跟踪:
SQL> execute SYS.dbms_system.set_sql_trace_in_session(13,9,false);
2、跟踪文件的位置:
一旦为会话激活了SQL_TRACE,ORACLE就会在udump管理区创建跟踪文件,文件的目标位置由参数user_dump_dest来确定。每个 操作都不会覆盖原来的文件,新的跟踪记录将会被追加到文件末尾。通常情况下,可以根据文件的修改时间判断目录下哪个文件是最新的文件。
SQL> show parameter user_dump_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string d:oracleadminora9iudump
也可以通过以下SQL来确定文件名:
select d.value||''||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from
(
select p.spid
from sys.v$mystat m,sys.v$session s,sys.v$process p
where m.statistic# = 1
and s.sid = m.sid
and p.addr = s.paddr
) p,
(
select t.instance
from sys.v$thread t,sys.v$parameter v
where v.name = 'thread'
and ( v.value = 0 or t.thread# = to_number(v.value) )
) i,
(
select value from sys.v$parameter where name = 'user_dump_dest'
) d ;
TRACE_FILE_NAME
--------------------------------------------------------------------------------
d:oracleadminora9iudumpora9i_ora_2060.trc
3、计时信息:
为了最大限度的利用跟踪文件,应该打开计时标志,通过参数TIMED_STATISTICTS=TRUE进行设置,这样可以对每个SQL语句的执行时间等进行记录,这个功能对系统性能的负担很小。
打开会话的计时信息:
SQL> alter session set timed_statistics = true ;
打开数据库系统的计时信息
SQL> alter system set timed_statistics = true ;
4、TKPROF:
通过前三步的设置已经知道如何生成SQL跟踪文件了,ORACLE生成的跟踪文件阅读起来很困难(也就是易读性很差),可以看跟踪文件的一部分,执行以下SQL语句:
SQL> select count(*) from sys_dept;
COUNT(*)
----------
16
执行完后,查看跟踪文件中这个语句的内容如下:
PARSING IN CURSOR #1 len=31 dep=0 uid=62 oct=3 lid=62 tim=14727407741 hv=2200985491 ad='128e3820'
select count(*) from sys_dept
END OF STMT
PARSE #1:c=0,e=16348,p=1,cr=31,cu=0,mis=1,r=0,dep=0,og=4,tim=14727407735
EXEC #1:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727407814
FETCH #1:c=0,e=15641,p=5,cr=7,cu=0,mis=0,r=1,dep=0,og=4,tim=14727423807
=====================
PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62 tim=14727508742 hv=3517412409 ad='12bbcff4'
begin :id := sys.dbms_transaction.local_transaction_id; end;
END OF STMT
PARSE #2:c=0,e=122,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727508735
EXEC #2:c=0,e=144,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727508945
=====================
PARSING IN CURSOR #2 len=61 dep=0 uid=62 oct=47 lid=62 tim=14727587562 hv=3517412409 ad='12bbcff4'
begin :id := sys.dbms_transaction.local_transaction_id; end;
END OF STMT
PARSE #2:c=0,e=121,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=14727587556
EXEC #2:c=0,e=97,p=0,cr=0,cu=0,mis=0,r=1,dep=0,og=4,tim=14727587721
这样不仅阅读麻烦,并且也有很多内容难以理解。ORACLE提供了一个格式化跟踪文件的工具 - TKPROF( Transient Kernel Profiler ),通过这个工具能将SQL文件转化为分析人员容易理解的格式。
一般TKPROF工具的使用的简单方法,只用到了两个关键字:跟踪文件名和输出文件名 (TKPROF的具体请参阅其他资料):
TKPROF <trace file> <output file>
在命令行模式下运行(数据库在window2000下安装的)
C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt
执行完后,在reprot.txt中查询刚才的语句内容如下:
select count(*)
from
sys_dept
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.01 1 31 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.01 5 7 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.03 6 38 0 1
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 62
通过设置tkprof的关键字[EXPLAIN = <username/password>],也可以在跟踪文件中增加SQL语句的执行计划:
C:>tkprof D:oracleadminora9iudumpora9i_ora_2060.trc d:report.txt explain=test/test;
********************************************************************************
select count(*)
from
sys_dept
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 2 0.00 0.01 1 31 0 0
Execute 2 0.00 0.00 0 0 0 0
Fetch 2 0.00 0.01 5 14 0 2
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 6 0.00 0.03 6 45 0 2
Misses in library cache during parse: 1
Optimizer goal: CHOOSE
Parsing user id: 62
Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE
16 TABLE ACCESS FULL SYS_DEPT
Oracle sql trace用法的更多相关文章
- Oracle sql trace
一.SQL_TRACE说明 1.1.在全局启用 在参数文件(pfile/spfile)中指定:sql_trace =true 1.2.在当前session级设置 启用当前session的跟踪: alt ...
- Oracle SQL Trace 和 10046 事件
http://blog.csdn.net/tianlesoftware/article/details/5857023 一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRAC ...
- Oracle 课程八之性能优化之Oracle SQL Trace
一. SQL_TRACE 当SQL语句出现性能问题时,我们可以用SQL_TRACE来跟踪SQL的执行情况,通过跟踪,我们可以了解一条SQL或者PL/SQL包的运行情况,SQL_TRACE命令会将SQL ...
- Oracle 11g R2性能优化 SQL TRACE
作为Oracle官方自带的一种基本性能诊断工具,SQL Trace可以用来评估当前正在运行的SQL语句的效率,同时为该语句生成统计信息等,并保存这些信息到指定路径下的跟踪文件(trace)当中.SQL ...
- Oracle核心技术之 SQL TRACE
1.SQL TRACE说明: 参数类型 布尔型 缺省值 false 参数类别 动态 取值范围 True|false 2.类型 1)sql trace参数:alter system改变对全局进程影响,如 ...
- Oracle SQL优化[转]
Oracle SQL优化 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化 ...
- Oracle SQL优化规则详解
1. 选用适合的Oracle优化器 Oracle的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) 设置缺省的优化器,可以通过对init.o ...
- ORACLE 中ROWNUM用法总结(转)
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<.<=.!=) ...
- Oracle SQL explain/execution Plan
From http://blog.csdn.net/wujiandao/article/details/6621073 1. Four ways to get execution plan(anyti ...
随机推荐
- android 小工具:pc 上用 curl 命令打开手机浏览器,浏览指定网址
测试 API 时或其它情况经常需要在手机浏览器中输入 url 一长串的 url 输起来真是麻烦 AirDroid 很强大也不用数据线,但有时老断开连接,不是很爽.发到手机 qq 吧还得手动粘贴 所以自 ...
- springmvc整合mybatis详细教程
需求:整合springmvc和mybatis 整合的目标是:控制层采用springmvc,持久层使用mybatis 整合思想 dao层: 1.SqlMapConfig.xml.空文件即可.但是需要头文 ...
- 自定义ajax,添加loading效果
自定义ajax /** * @desc 自定义ajax请求,添加等待gif */ var n=0; $.defineAjax=function(obj){ n++; if(!$('#loadingDi ...
- dll和so文件区别与构成
http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html 动态链接,在可执行文件装载时或运行时,由操作系统的装载程序加载库.大多数操作系 ...
- MySql的内置函数
MySQL的内置函数不但可以在SELECT查询语句中应用,同样也可以在INSERT.UPDATE和DELECT等语句中应用.例如,在INSERT添加语句中,应用日期时间函数获取系统的当前时间,并且将其 ...
- poj 2017 Speed Limit
Speed Limit Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 17704 Accepted: 12435 Des ...
- Java入门系列-20-异常
为什么要进行异常处理 下面这段代码能否正常执行 public class DemoCalc { public static void main(String[] args) { int a=0; in ...
- YII框架一个请求的生命周期
用户向入口脚本 web/index.php 发起请求. 入口脚本加载应用配置并创建一个应用实例去处理请求. 应用通过请求组件解析请求的路由. 应用创建一个控制器实例去处理请求. 控制器创建一个操作实例 ...
- [android] 界面切换的核心方法
根据效果图拆分界面 主体部分 View ==> ViewGroup ==> RelativeLayout,主体部分使用RelativeLayout作为占位 View和ViewGroup的区 ...
- Thrift笔记(七)--回调源码分析
网上找了写代码,东拼西凑写了个demo.开始server用的是阻塞io,不行,换成非阻塞的io就可以.这里可能需要注意下 thrift文件 namespace java com.gxf.thrift ...