oracle sql_trace 简单应用介绍

SQL_TRACE是Oracle提供的用于进行SQL跟踪的手段,是强有力的辅助诊断工具.在日常的数据库问题诊断和解决中,SQL_TRACE是非常常用的方法。

1.通过putty 或其他主机工具进入数据库所在主机.

2.在命令行中通过sqlplus登录oracle.

???连接数据库命令:sqlplus username/password

3.使用SQL_TRACE分析sql语句.

SQL_TRACE可以作为初始化参数在全局启用,也可以通过命令行方式在具体session启用。(以下案例均在session下进行)

?1).在全局启用?

?在参数文件(pfile/spfile)中指定:

?sql_trace =true

在全局启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在生产环境中要谨慎使用,这个参数在10g之后是动态参数,可以随时调整,在某些诊断中非常有效。
提示: 通过在全局启用sql_trace,我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程之间的紧密协调.

所以不建议使用以上方式


?2).在当前session级设置

?大多数时候我们使用sql_trace跟踪当前进程.通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),
?研究SQL执行,发现后台错误等.


启用当前session的跟踪:
SQL>?alter?session?set?sql_trace=true;

Session?altered.

此时的SQL操作将被跟踪:
SQL>?select?count(*)?from?dba_users;--此sql语句可被更换成需要跟踪分析的sql.

??COUNT(*)
----------
????????34
结束跟踪:
SQL>?alter?session?set?sql_trace=false;

Session?altered.

或者使用?DBMS_SESSION程序包?来开启或关闭sql_trace
SQL> exec DBMS_SESSION.SET_SQL_TRACE (sql_trace boolean);

? ?

一般放seesion追踪的信息,对应系统初始化参数文件参数show?parameter?user_dump???--11g之前使用user_dump_dest
对应的就是它的位置。

SQL>?show?parameter?user_dump?--查看session中trace文件的存放位置

NAME?????????????????????????????????TYPE??????????????????????????????VALUE
------------------------------------?---------------------------------?------------------------------
user_dump_dest???????????????????????string????????????????????????????/oracle/diag/rdbms/templatedb/
??????????????????????????????????????????????????????????????????????????????????????templatedb/trace
??
??SQL>?show?parameter?trace?--查看trace在当前session中的相关参数的值,sql_trace的值会随着trace的开启与关闭发生变化,如下为仅为验证过程.

NAME?????????????????????????????????TYPE??????????????????????????????VALUE
------------------------------------?---------------------------------?------------------------------
log_archive_trace????????????????????integer???????????????????????????0
sec_protocol_error_trace_action??????string????????????????????????????TRACE
sql_trace????????????????????????????boolean???????????????????????????FALSE
trace_enabled????????????????????????boolean???????????????????????????TRUE
tracefile_identifier?????????????????string
SQL>?alter?session?set?sql_trace=TRUE;

Session?altered.

SQL>?show?parameter?trace

NAME?????????????????????????????????TYPE??????????????????????????????VALUE
------------------------------------?---------------------------------?------------------------------
log_archive_trace????????????????????integer???????????????????????????0
sec_protocol_error_trace_action??????string????????????????????????????TRACE
sql_trace????????????????????????????boolean???????????????????????????TRUE
trace_enabled????????????????????????boolean???????????????????????????TRUE
tracefile_identifier?????????????????string

SQL>?select?value?from?v$diag_info?where?name=‘Default?Trace?File‘;--查看当前session默认的trace文件url

VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/oracle/diag/rdbms/templatedb/templatedb/trace/templatedb_ora_5581.trc

--设置自定义标识符,也可以不设置,设置后的则会改变当前session文件名末尾的字符串?如:templatedb_ora_5581.trc?变为?templatedb_ora_5581_testsession.trc,如下所示
SQL>?alter?session?set?tracefile_identifier=‘testsession‘;

Session?altered.

SQL>?select?value?from?v$diag_info?where?name=‘Default?Trace?File‘;

VALUE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
/oracle/diag/rdbms/templatedb/templatedb/trace/templatedb_ora_5581_testsession.trc

5 退出sqlplus

使用exit命令即可退出.

6 根据刚才设置的标示符可以很容易的锁定当前session所涉及的trace文件

[[email protected] trace]$ ll *test*

-rw-r----- 1 oracle oinstall 2780 Dec 11 11:41 templatedb_ora_10420_testsession.trc

-rw-r----- 1 oracle oinstall? 136 Dec 11 11:41 templatedb_ora_10420_testsession.trm

7?使用Oracle自带的一个命令行工具tkprof,将trace文件生成一个易读的文本文件

[[email protected] trace]$ tkprof templatedb_ora_10420_testsession.trc testsession.txt

[[email protected] trace]$ ll *test*

-rw-r----- 1 oracle oinstall 2780 Dec 11 11:41 templatedb_ora_10420_testsession.trc

-rw-r----- 1 oracle oinstall? 136 Dec 11 11:41 templatedb_ora_10420_testsession.trm

-rw-r--r-- 1 oracle oinstall 5605 Dec 11 11:44 testsession.txt

cat?testsession.txt

TKPROF:?Release?11.2.0.4.0?-?Development?on?Mon?Dec?11?11:44:46?2017

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

Trace?file:?templatedb_ora_10420_testsession.trc
Sort?options:?default

********************************************************************************
count????=?number?of?times?OCI?procedure?was?executed
cpu??????=?cpu?time?in?seconds?executing
elapsed??=?elapsed?time?in?seconds?executing
disk?????=?number?of?physical?reads?of?buffers?from?disk
query????=?number?of?buffers?gotten?for?consistent?read
current??=?number?of?buffers?gotten?in?current?mode?(usually?for?update)
rows?????=?number?of?rows?processed?by?the?fetch?or?execute?call
********************************************************************************
SQL?ID:?61yfbh3s7h5x1?Plan?Hash:?2596900044
select?count(1)?from?test_random_04
call?????count???????cpu????elapsed???????disk??????query????current????????rows
-------?------??--------?----------?----------?----------?----------??----------
Parse????????1??????0.00???????0.00??????????0??????????0??????????0???????????0
Execute??????1??????0.00???????0.00??????????0??????????0??????????0???????????0
Fetch????????2??????0.10???????0.10??????????0???????2769??????????0???????????1
-------?------??--------?----------?----------?----------?----------??----------
total????????4??????0.10???????0.10??????????0???????2769??????????0???????????1
Misses?in?library?cache?during?parse:?0
Optimizer?mode:?ALL_ROWS
Parsing?user?id:?62
Number?of?plan?statistics?captured:?1
Rows?(1st)?Rows?(avg)?Rows?(max)??Row?Source?Operation
----------?----------?----------??---------------------------------------------------
?????????1??????????1??????????1??SORT?AGGREGATE?(cr=2769?pr=0?pw=0?time=102729?us)
????999999?????999999?????999999???TABLE?ACCESS?FULL?TEST_RANDOM_04?(cr=2769?pr=0?pw=0?time=192830?us?cost=762?size=0?card=999999)
********************************************************************************

oracle性能优化:如何懂tkprof

CALL?:每次SQL语句的处理都分成以下三个部分
??Parse:这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
??Execute:这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
??Fetch:返回查询语句中所获得的记录,这步只有select语句会被执行。?
COUNT:这个语句被parse、execute、fetch的次数。?
CPU:这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED:这个语句所有消耗在parse、execute、fetch的总的时间。
DISK:从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY:在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。?
CURRENT: 在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取 buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。?
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步,对于insert、update、delete操作,返回记录则是在execute这步。

?

A、query+current/rows 平均每行所需的block数,太大的话(超过20)SQL语句效率太低
B、Parse count/Execute count parse count应尽量接近1,如果太高的话,SQL会进行不必要的reparse
C、rows Fetch/Fetch Fetch Array的大小,太小的话就没有充分利用批量Fetch的功能,增加了数据在客户端和服务器之间的往返次数。
D、disk/query+current 磁盘IO所占逻辑IO的比例,太大的话有可能是db_buffer_size过小(也跟SQL的具体特性有关)
E、elapsed/cpu 太大表示执行过程中花费了大量的时间等待某种资源
F、cpu Or elapsed 太大表示执行时间过长,或消耗了了大量的CPU时间,应该考虑优化
G、执行计划中的Rows 表示在该处理阶段所访问的行数,要尽量减少

时间: 2024-11-05 20:40:50

oracle sql_trace 简单应用介绍的相关文章

Oracle CASE WHEN 用法介绍

Oracle CASE WHEN 用法介绍 1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASEWHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT gra

Oracle EBS WMS功能介绍(二)

(版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 出货物流逻辑主要包括 1.      打包,可以进行多层嵌套式的打包,并通知用户为订单所做的特殊打包方法.打包可以在拣货时做,也可以作为一个独立的操作来做. 2.      为行程进行码头预约,可以使仓库经理计划出库运输公司的预约,码头门的可用性和仓库内的待装区的使用. 3.      拣货方法,为不同订单的拣货需要选择不同的拣货方法. 4.      管理拣货,可以使订单基于移动手持应用拣

oracle初级简单逻辑备份还原

oracle初级简单逻辑备份还原 注: 1,所有命令在cmd命令提示符下运行(键入 EXP HELP=Y 或者IMP HELP=Y 获取帮助信息). 2,路径文件夹必须存在(本例中,文件夹oracleback必须存在). 单独备份用户orcl下的fruit表: exp userid=xxk/password direct=y tables=(fruit) file=d:\oracleback\baktb_fruit20140509.dmp log=d:\oracleback\baktb_frui

Oracle 最简单的随系统自动启动

Oracle 最简单的随系统自动启动 俗话说用户是上帝,他们有时候提出一个问题非常的简单,就只需要一句话,一分钟就完事了,但是拿到我们DBA来说,可能至少得半个小时甚至半个月才能满足他的一句话,有没有更好更快的办法呢,我告诉大家这是有的: 我就拿一个例子来说,用户通常都会为了维护简单,需要数据库自动随系统启动,一句非常简单的话,但是拿给DBA来说至少得多花半个小时的时间来配置实现这个功能.那么今天你看完这篇文档之后,可以在他的话还没有说完就可以完成自启动的配置,非常简单. 一.配置自动 1.添加

简单的介绍下WPF中的MVVM框架

最近在研究学习Swift,苹果希望它迅速取代复杂的Objective-C开发,引发了一大堆热潮去学它,放眼望去各个培训机构都已打着Swift开发0基础快速上手的招牌了.不过我觉得,等同于无C++基础上手学习C#一样,即使将来OC被淘汰,那也是N年之后的事情,如果真的要做IOS开发,趁现在Swift才刚开始,花那么几个月去了解一下OC绝对是一件有帮助的事情. 扯远了,我前几天刚接触到一个叫做mvvm的框架,发现很有意思,带着学习的态度来写点东西,不足之处一起研究.还有一个很重要的原因,我发现不少同

Asp.Net+Oracle+EasyUI简单增删查改

Asp.Net+Oracle+EasyUI简单增删查改 概要:网上有很多关于EasyUI前端框架的资料,本人在学习的基础上,基于自己之前搭建的框架(Oracle+Ado.Net),配合EasyUI实现一套简单的增删查改. 正文: 在实体层新建一个EMP.cs,继承至BaseModel 1 namespace myOracle.Model 2 { 3 public class Emp:BaseModel 4 { 5 public Emp() 6 { 7 base.PrimaryKey = "emp

Oracle性能分析工具介绍及使用

oracle数据库级别优化分析工具介绍 当我们对数据库优化诊断时,需要收集相应的信息以供参考,从个人的使用经验来说,这种统计数据分为两大类 一类是数据库级别的统计信息二类是os级别的统计信息 下面就分别介绍在不同的级别下,常用什么工具来收集信息帮助优化诊断 首先是oracle数据库级别优化分析工具介绍 目录: 1.statspack2.ASH3.AWR4.ORACLE EXPLAIN PLAN的总结(查询sql的执行计划)   a.autotrace   b.explain的使用 1.stats

vue学习笔记——简单的介绍以及安装(一)

学习编程需要的是 API+不断地练习^_^ Vue官网:https://cn.vuejs.org/ 菜鸟教程:http://www.runoob.com/vue2/vue-tutorial.html 1.简单的介绍 Vue.js(读音 /vju?/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. Vue 学习起来非常简单,本教程基于 Vue 2.1.8 版

Oracle 最简单的随系统自己主动启动

Oracle 最简单的随系统自己主动启动 俗话说用户是上帝,他们有时候提出一个问题很的简单,就仅仅须要一句话,一分钟就完事了.可是拿到我们DBA来说,可能至少得半个小时甚至半个月才干满足他的一句话.有没有更好更快的办法呢.我告诉大家这是有的: 我就拿一个样例来说,用户通常都会为了维护简单,须要数据库自己主动随系统启动.一句很easy的话,可是拿给DBA来说至少得多花半个小时的时间来配置实现这个功能.那么今天你看完这篇文档之后,能够在他的话还没有说完就能够完毕自启动的配置.很easy. 一.配置自