加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Oracle优化10-SQL_TRACE和10046事件-更新中

发布时间:2020-12-12 15:34:22 所属栏目:百科 来源:网络整理
导读:概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起来就好好像卡在什么地方一样,该如何入手呢? 是不是恨不得钻进去看下到底发生了什么? 好在 Oracle提供了我们这样的一种方法使用SQL_TRACE来跟踪SQL的执

概述

当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起来就好好像卡在什么地方一样,该如何入手呢?

是不是恨不得钻进去看下到底发生了什么?

好在Oracle提供了我们这样的一种方法使用SQL_TRACE来跟踪SQL的执行情况,通过SQLTRACE我们可以很容易的知道当前正在执行的SQL正在干什么。


以下操作基于Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production


SQL_TRACE

SQL_TRACE命令会将SQL的执行过程输出到一个TRACE文件中,我们通过阅读这个TRACE文件就可以了解到在这个SQL执行的过程中,oracle究竟做了哪些事情。


如何开启SQL_TRACE

#设置sql_trace生成的文件标识,便于查找
SQL> alter session set tracefile_identifier='mytest';

Session altered

#对当前的会话开启sql_trace
SQL> alter session set sql_trace=true;

Session altered

SQL> 执行具体的sql

#关闭当前会话的sql_trace
SQL> alter session set sql_trace=false;

SQL_TRACE生成的文件在哪个目录下呢?

开启SQL跟踪后,会生成一个trace文件,通过初始化参数user_dump_dest配置其所在目录,该参数的值可以通过下面方法获取到:

select name,value from v$parameter where name = 'user_dump_dest'
oracle@entel2:[/oracle]$cd /oracle/diag/rdbms/cc/cc/trace
oracle@entel2:[/oracle/diag/rdbms/cc/cc/trace]$ls *mytest*
cc_ora_305_mytest.trc  cc_ora_305_mytest.trm

cc_ora_305_mytest.trc 就是我们的trace文件。

扩展:

11g中新增的trm文件

.trc文件称为Sql Trace Collection file,它是系统的跟踪文件(trace),当系统启动时或运行过程中出现错误时,系统会自动记录跟踪文件到指定的目录,以便于检查,这些文件需定期维护删除。

.trm file 全称是trace map file. 被称为跟踪元数据文件,.trm文件中的元数据描述了存储在.trc文件中的跟踪记录 。

.trm文件是伴随着.trc文件产生,一个.trm对应一个.trc文件。.trm文件包含.trc文件的结构化信息。

The files located in the TRACE directory,with the “.trm” extensions,are called Trace Metadata files. The metadata in .trm files describe the trace records stored inside of .trc trace files.


不指定文件标识时,如何查找呢?

如果我们没有指定标识时,改如何快速查找对应的trace文件呢?

trace文件的名字是独立于版本和平台的,在大部分常见的平台下,命名结构如下:

{instance name}_{process name}_{process id}.trc

知道当前会话的sid 便可以查找到

比如下面这种情况

通过如下sql

select s.SID,s.SERVER,lower(case when s.SERVER in ('DEDICATED','SHARED') then i.INSTANCE_NAME || '_' || nvl(pp.SERVER_NAME,nvl(ss.NAME,'ora')) || '_' || p.SPID || '.trc' else null end) as trace_file_name from v$instance i,v$session s,v$process p,v$px_process pp,v$shared_server ss where s.PADDR = p.ADDR and s.SID = pp.SID(+) and s.PADDR = ss.PADDR(+) and s.TYPE = 'USER' and s.SID = '263' order by s.SID ;
oracle@entel2:[/oracle/diag/rdbms/cc/cc/trace]$ls cc_ora_2642.trc
cc_ora_2642.trc

其他情况的说明

  • SQLTRACE除了设置会话级别,也可以设置系统级别
alter system set sql_trace=true;

这样就可以对实例上的全部SQL进行跟踪了,需要注意的是这种方式的代价是非常巨大的,请慎重操作。

  • 另外SQLTRACE也可以在初始化参数中设置
SQL> show parameter sql_trace

NAME             TYPE        VALUE
-------------- ----------- --------------
sql_trace        boolean     FALSE
  • 关闭会话级别的sql_trace,除了使用
alter session set sql_trace=false ;

关闭外,直接退出sql_plus来终止也是可以的,只要关闭了当前会话,会话级别的sql_trace就失效了。


TKPROF工具

最原始的trace文件的可读性是比较差的,除非有必要,我们一般都是通过tkprof工具来处理这个trace文件。

TKPROF工具是oracle自带的一个工具,用于处理原始的trace文件,它的主要的作用就是合并汇总trace文件中的一些项,规范化文件的格式,是文件更具有可读性。

TKPROF使用

oracle@entel2:[/oracle/diag/rdbms/cc/cc/trace]$tkprof cc_ora_305_mytest.trc  mytest.txt

TKPROF: Release 11.2.0.4.0 - Development on Wed Dec 14 18:45:34 2016

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

执行后,会生成mytest.txt文件,阅读更加方便。


TKPROF参数

在命令行下直接输入 tkprof,回车,会看到tkprof支持的所有参数


下面重点说一下常用的几个参数

explain=user/password

Connect to ORACLE and issue EXPLAIN PLAN.

在trace文件中输入SQL的执行计划。

需要注意的是,如果不使用explain,在trace文件中,我们看到的是SQL实际的执行路径。比如:

使用explain,tkprof在trace文件中不但输入sql的实际执行路径,还会生成该SQL的执行计划。

比如:

oracle@entel2:[/oracle/diag/rdbms/cc/cc/trace]$tkprof cc_ora_305_mytest.trc  mytest_explain.txt  explain=cc/xgongjiang 

TKPROF: Release 11.2.0.4.0 - Development on Wed Dec 14 19:26:15 2016

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

查看 mytest_explain.txt文件可以看到比上面的多了一个Execution Plan:

上面的信息中,第一部分是SQL的实际执行路径,下面的部分是使用Explain for的方式生成的SQL执行计划。


sys=(yes|no)

如果设置为yes,在trace文件中将输出所有SYS用户的操作(也包含用户SQL语句引发的递归SQL),如果为no,则不输出。 默认为yes. 实际上设置为no,trace文件更具有可读性。

oracle@entel2:[/oracle/diag/rdbms/cc/cc/trace]$tkprof cc_ora_305_mytest.trc  mytest_explain_sysno.txt  explain=cc/xgongjiang sys=no

TKPROF: Release 11.2.0.4.0 - Development on Wed Dec 14 19:47:25 2016

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

左侧为默认yes,右侧为sys=no,可以sys用户的操作被过滤掉,清晰了很多。


aggregate=yes|no


10046事件

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读