当前位置:  数据库>oracle

Oracle 使用TRACE进行SQL性能分析

    来源: 互联网  发布时间:2017-06-09

    本文导语: 设置sql_trace参数为true会对整个实例进行跟踪,包括所有进程:用户进程和后台进程,会造成比较严重的性能问题,生产环境一定要慎用。 一、根据相关事务或者sql 执行trace操作: 1) 使用前需要注意的地方 1,初始化参数timed_stat...

设置sql_trace参数为true会对整个实例进行跟踪,包括所有进程:用户进程和后台进程,会造成比较严重的性能问题,生产环境一定要慎用。

一、根据相关事务或者sql 执行trace操作:

1) 使用前需要注意的地方

1,初始化参数timed_statistics=true。允许sql trace 和其他的一些动态性能视图收集与时间(cpu,elapsed)有关的参数。一定要打开,不然相关信息不会被收集。这是一个动态的参数,也可以在session级别设置。

SQL>alter session set titimed_statistics=true

2,MAX_DUMP_FILE_SIZE跟踪文件的大小的限制,如果跟踪信息较多可以设置成unlimited。可以是KB,MB单位,9I开始默认为unlimited这是一个动态的参数,也可以在session级别设置。

SQL>alter system set max_dump_file_size=300

SQL>alter system set max_dump_file_size=unlimited

2)trace执行过程:

1.      启动SQL_TRACE:SQL> alter session set sql_trace=true;

2.      进行相关事务或者sql操作:SQL> select * from t;

3.      关闭SQL_TRACE:SQL> alter session set sql_trace=false;

也可以通过Oracle提供的系统包 DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来实现。例如:首先从os上利用top命令找到当前占用cpu资源最高的一个进程的PID号;然后在数据库中根据PID号找到相应的sid和serial#。

SQL>execute dbms_system.set_sql_trace_in_session(sid,serial#,true);

SQL>execute dbms_system.set_sql_trace_in_session(sid,serial#,false);

二、获得当前生成trace文件的位置:

在Oracle 10g中,SQL_TRACE生成的trace文件默认路劲是$ORACLE_BASE/admin/SID/udump;到了11g,trace 默认路径在:$ORACLE_BASE/diag/rdbms/orcl/orcl/trace目录下。

也可以通过查询出trace文件所在的默认路径:SELECT VALUE  FROM V$PARAMETER WHERE NAME = 'user_dump_dest'(BACKGROUND_DUMP_DEST)

如需修改:alter system set user_diagnostic_dest = 'd:oracletrace';

或者: select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat));

此外,也可以直接用如下SQL直接查出当前的trace文件名。

SELECT      d.VALUE || ''  || LOWER (RTRIM (i.INSTANCE, CHR (0)))  || '_ora_' || p.spid || '.trc'

AS "trace_file_name"

FROM  (SELECT  p.spid

FROM  v$mystat m, v$session s, v$process p

WHERE  m.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;

三、转换生成trace文件:

SQL_TRACE 生成最原始的trace文件的可读性比较差,所以通常我们使用tkprof 工具来处理trace文件。 Tkprof 工具是Oracle 自带的一个工具,用于处理原始的trace文件,它的作用主要是合并汇总trace文件中的一些项,规范化文件的格式,使文件更具有可读性。 Tkprof 是系统级别的,直接在系统下执行即可。

注意:tkprof 工具只能用在处理SQL_TRACE和10046事件产生的trace,其他事件如10053不能处理。

格式:  tkprof tracefile outputfile [optional | parameters ]

C:/Users/Administrator/VIDI>tkprof d:/app/administrator/diag/rdbms/orcl/orcl/trace/orcl_ora_3048.trc orcl_ora_3048.txt sys=no

参数和选项:

explain=user/password执行explain命令将结果放在SQL trace的输出文件中

sys=[yes/no]确定系统是否列出由sys用户产生或重调的sql语句。设置为no后,trace文件具有更佳的可读性

sort=sort_option按照指定的方法对sql trace的输出文件进行降序排序

sort_option选项:设置排序选项,可以用逗号分隔多个选项。默认是跟踪文件中发现的SQL顺序。

prscnt按解析次数排序

prscpu按解析所花cpu时间排序

prsela按解析所经历的时间排序

prsdsk按解析时物理的读操作的次数排序

prsqry按解析时以一致模式读取数据块的次数排序

prscu按解析时以当前读取数据块的次数进行排序

execnt按执行次数排序

execpu按执行时花的cpu时间排序

exeela按执行所经历的时间排序

exedsk按执行时物理读操作的次数排序

exeqry按执行时以一致模式读取数据块的次数排序

execu按执行时以当前模式读取数据块的次数排序

exerow按执行时处理的记录的次数进行排序

exemis按执行时库缓冲区的错误排序

fchcnt按返回数据的次数进行排序

fchcpu按返回数据cpu所花时间排序

fchela按返回数据所经历的时间排序

fchdsk按返回数据时的物理读操作的次数排序

fchqry按返回数据时一致模式读取数据块的次数排序

fchcu按返回数据时当前模式读取数据块的次数排序

fchrow按返回数据时处理的数据数量排序

注:这些排序中经常用到的是fchdsk,fckchela ,fchqry.因为有问题的sql一般都是大的查询造成的,当然更新,插入,删除时也会存在全表扫描,这就需要:exedsk,exeqry,exeela等选项。根据具体情况具体分析。

Cpu时间和Elapsed时间都是以秒为单位,而且两个值基本上一样,但我比较常用elapsed,他是反映的用户相应时间,从运行sql到用户得到结果的时间,会更实际些。

tkprof输出文件各列的含义:

parse:将sql语句转换成执行计划,包括检查是否有正确的授权,需要到得表,列及其他引用到得对象是否存在,这些信息分别存在v$librarycache.v$rowcache..

execute:oracle实际执行的语句,如:insert,update,delete,这些会修改数据,对于select操作,这部只是确定选择的行数。

fetch:返回查询获得的行数,只有执行select会被收集。

Count:这个语句被parse,execute,fetch的次数的统计

Cpu:这个语句所有的parse,execute,fetch所用的cpu总的时间,以秒为单位。如果TIMED_STATISTICS 关闭的话,值为0。

Elapsed:这个语句所有的parse,execute,fetch所消耗的总的时间,以秒为单位。如果TIMED_STATISTICS 关闭的话,值为0。

Disk:这个语句所有的parse,execute,fetch从磁盘上的数据文件中读取的数据块的数量

Query:在一致性读的模式下,这个语句所有的parse,execute,fetch所获取的数据块数量(这部分是从内存读取的也就是逻辑读取的,相当于执行计划里的consistent gets)

Current:在current模式下,这个语句所有的parse,execute,fetch所获取的数据块数量,一般是current模式下发生的delect,insert,update的操作都会获取。数据块

Rows:语句返回的行数,不包括子查询中返回的记录数目。对于select语句,返回在fetch这步,对于insert,delete,update操作,返回记录是在execute这步。

四、对trace文件分析过程:

1,先找磁盘多的sq l(sort= fchdsk ),意味着全表扫描;

2,找运行时间长的(sort= fchela),意味着sql可能写的不好或磁盘,逻辑读较多;

3,找出一致性读较多的(sort= fchqry),当表不是很大的时候(可能全部缓存住了),没有发生磁盘读,但不意味着不需要建立索引,或者sql需要优化;

4,找出当前模式从缓冲区获得数据的数量(sort=exedsk,exeela,exeqry),这些主要集中在dml语句里的操作,看是否有必要优化sql或建立索引之所以排序是为了在sql很多的时候快速定位sql,如果sql比较少的话就没必要排序了,但我们要有分析问题的思路。

--------------------------------------分割线 --------------------------------------

在CentOS 6.4下安装Oracle 11gR2(x64)

Oracle 11gR2 在VMWare虚拟机中安装步骤

Debian 下 安装 Oracle 11g XE R2

--------------------------------------分割线 --------------------------------------


    
 
 

您可能感兴趣的文章:

  • Oracle 数据库(oracle Database)性能调优技术详解
  • Oracle收购TimesTen 提高数据库软件性能
  • 关于提高Oracle数据库性能的四个错误认识
  • 用Oracle动态性能视图采集查询调优数
  • Oracle性能究极优化 上第1/2页
  • 用PHP连mysql比oracle数据库性能好
  • Oracle性能究极优化 下
  • 保持Oracle数据优良性能的技巧分享
  • 100分寻求最优化的连接oracle的java程序,请给我讲出理由,我是初学者,在做项目时不想让连接oracle影响我的程序性能
  • Oracle数据库应用程序性能优化探究
  • oracle 使用递归的性能提示测试对比
  • 善用Oracle表空间设计提升数据库性能
  • Oracle性能究极优化
  • Oracle SQL性能优化系列学习一
  • Oracle SQL性能优化系列学习三
  • Linux平台下如何监控Oracle数据库的性能
  • Oracle SQL性能优化系列学习二
  • 性能陷阱:Oracle表连接中范围比较
  • 基于Oracle的高性能动态SQL程序开发
  • 浅谈Oracle性能优化可能出现的问题
  • 如何保持Oracle数据库的优良性能
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle10g装在redhat linux es3 下进行pro*cc++进行编程的问题
  • 紧急求救:jsp对Oracle数据库中long 型数据进行模糊查询 如何查?
  • Oracle针对数据库某一行进行操作的时候,如何将这一行加行锁
  • Oracle 中文字段进行排序的sql语句
  • 紧急求救:对Oracle数据库中long 型数据进行模糊查询 如何查?
  • 请问:ORACLE中的数据取出来后,需不需要进行一定的转换才能变为C语言的数据类型啊?
  • 如何能在网上找到一个可以提供ORACLE进行JSP设计的主机展示我的作品啊,付费也行
  • 使用Oracle Text进行全文检索
  • 在命令行下进行Oracle用户解锁的语句
  • 对Oracle执行计划进行监控
  • Oracle ASM环境下怎么进行数据库冷备
  • 在Oracle库存模块中进行帐龄分析
  • 使用Oracle的Decode函数进行多值判断
  • RH7.1下安装Oracle8.1.7,安装到Configuration Tools时,不能进行下去。请教高手指点。
  • 大侠解决一下java 如何和 oracle 进行连接??(高分—)
  • DBA_Oracle Startup / Shutdown启动和关闭过程详解(概念)(对数据库进行各种维护操作)
  • 使用Oracle Partition Table对日志表进行分区
  • Oracle设置系统参数进行性能优化
  • 在Oracle中手工对任务进行分区的方法
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,