10046 trace详解(1)
10046 trace帮助我们解析一条/多条SQL、PL/SQL语句的运行状态,这些状态包括:Parse/Fetch/Execute三个阶段中遇到的等待事件、消耗的物理和逻辑读、CPU时间、执行计划等,它为我们揭示了一条、多条SQL的运行情况,对SQL调优是一个非常好的辅助工具,同时还能帮我们分析一些DDL维护命令的内部工作原理,RMAN、Data Pump Expdp/impdp等工具缓慢问题。
记得进公司面试时提到这个一样问题,查看SQL执行计划有哪此方法,10046、PL/SQL F5快捷键、EXPLAIN PLAN FOR ....、TOAD也可以查看,其实10053也可以查看SQL的执行计划,那么10046和10053的区别是什么呢?10053是最常用的ORACLE优化器optimizer跟踪trace,10053可以作为我们解析优化器为什么选择某个执行计划,其中理由的辅助工具,但并不告诉我们这个执行计划到底运行的如何。而10046并不解释optimizer优化器的工作,但它同样说明了在SQL解析Parse阶段所遇到的等待事件和所消耗的CPU资源,以及Execute执行和Fetch阶段的各项指标,简单来说,10046告诉我们SQL插计划运行情况,10053告诉我们优化器为什么选择这个执行计划。
通常为了诊断SQL调优类问题,我们需要记录下这些语句在执行过程中产生的等待以及bind variables(绑定变量)的信息。 这些信息可以通过级别为12的10046 trace获得。下面的例子列举了在各种场景下,如何设定10046事件。
一、Trace文件的位置
从11gR1开始,Oracle引入了新的诊断结构,以参数DIAGNOSTIC_DEST控制存放trace文件与core文件的路径。可以用以下命令,获取DIAGNOSTIC_DEST的位置:
SQL> show parameter diagnostic_dest;
11gR1以前,果是用户进程,10046 trace文件会被生成在user_dump_dest下,如果是后台进程,trace文件会被生成在background_dump_dest下,下面的命令可以显示user_dump_dest:
SQL> show parameter user_dump_dest
注:通过设定tracefile_identifier,通过这个设置可以帮助我们更容易的找到生成的trace文件。
二、在Session级打开trace
这种方法适用于SQL语句可以在新的session创建后再运行。
alter session set tracefile_identifier='10046';
alter session set timed_statistics = true;
alter session set statistics_level=all;--实例级别设置此选项需要注意,会消耗大量的CPU
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 12'; --常用的级别是12
执行需要被trace的SQL
select * from dual;
exit;
如果不退出当前session, 可以用以下命令关闭trace:
alter session set events '10046 trace name context off';
注意,如果session没有被彻底地关闭并且跟踪被停止了,某些重要的trace信息的可能会丢失。
注意:这里我们将"statistics_level"设置为all,这是因为有可能这个参数在系统级不是默认值"TYPICAL"(比如 BASIC)。为了收集性能相关问题的信息我们需要打开某个级别的statistics。我们推荐在 session 级将这个参数设置成 ALL 以便于收集更多的信息,尽管这不是必须的。
三、跟踪一个已经开始的进程
如果需要跟踪一个已经存在session,可以用 oradebug连接到session上,并发起10046 trace。
首先,用某种方法找到需要被跟踪的session.
例如,在SQL*Plus里,找出目标session的OS的进程ID(spid):
select p.PID,p.SPID,s.SID
from v$process p,v$session s
where s.paddr = p.addr
and s.sid = &SESSION_ID
/
PID 是Oracle的进程标识符(ora pid)
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
注: 也可以通过oradebug使用 'setorapid'命令连接到一个session。
oradebug setorapid 9834
oradebug unlimit
oradebug event 10046 trace name context forever,level 12
注意: 在实例层设置跟踪需要非常小心,这是因为整体性能会由于所有session都被跟踪而受到影响,这个设置将会跟踪在这个参数设置“以后”创建的每个session。已经存在的session不会被跟踪,系统层的10046跟踪适用于当我们知道问题session会出现,但是不能预先识别它的时候,在这种情况下,可以打开系统层跟踪一小段时间,当问题被重现以后立即将其关闭,然后从已经生成的trace中查找需要的信息,用以下命令打开系统层的跟踪:
alter system set events '10046 trace name context forever,level 12'
用以下命令关闭在所有session中的10046跟踪:
alter system set events '10046 trace name context off';
五、通过初始化参数设置进行实例层的跟踪
设置以下参数并重新启动实例后,实例上所有的session都会打开跟踪。
event="10046 trace name context forever,level 12"
如果要关闭可以通过移除这个参数并且重启实例,或者使用下面的alter system命令可以关闭跟踪。
alter system set events '10046 trace name context off';
六、通过logon trigger设置跟踪
有的时候当需要跟踪某个特定用户的操作时,可以使用logon trigger来打开跟踪
CREATE OR REPLACE TRIGGER SYS.set_trace
AFTER LOGON ON DATABASE
WHEN (USER like '&USERNAME')
DECLARE
lcommand varchar(200);
BEGIN
EXECUTE IMMEDIATE 'alter session set tracefile_identifier=''From_Trigger''';
EXECUTE IMMEDIATE 'alter session set statistics_level=ALL';
EXECUTE IMMEDIATE 'alter session set max_dump_file_size=UNLIMITED';
EXECUTE IMMEDIATE 'alter session set events ''10046 trace name context forever, level 12''';
END set_trace;
/
需要注意的事,为了能打开跟踪session, 执行trigger的用户需要被显式地授予'alter session'权限
grant alter session to user_xj
七、用SQLT收集trace
SQLTXPLAIN的Xecute方法生成的诊断文件中会包含10046 trace,正如XECUTE这个名字所示,SQLT会执行被分析的SQL语句,然后生成一个诊断文件集(包括10046 trace)。详见:
Note:215187.1 SQLT (SQLTXPLAIN) - Tool that helps to diagnose SQL statements performing poorly (Doc ID 215187.1)
用这种方法生成的trace文件会被包含在SQLT输出包中, 格式为:
sqlt_s12345_10046_execute.trc --其中12345是SQLT报告ID。
八、用DBMS_MONITOR进行跟踪
DBMS_MONITOR包提供几个打开跟踪的方法。详细请见:
Note:293661.1 Tracing Enhancements In 10g Using DBMS_MONITOR
如果您运行的是PL/SQL存储过程或包,那么可以通过使用PL/SQL profiler判断PL/SQL运行期间的时间消耗的具体信息。下面的文档介绍了PL/SQL profiler的使用方法:
Note:243755.1 Implementing and Using the PL/SQL Profiler
九、其它特定场景下打开跟踪的方法
Note:21154.1 EVENT: 10046 "enable SQL statement tracing (including binds/waits)"
Note:1274511.1 General SQL_TRACE / 10046 trace Gathering Examples
Note:160124.1 How to Set SQL Trace on with 10046 Event Trace which Provides the Bind Variables
Note:371678.1 Capture 10046 Traces Upon User Login (without using a trigger)
Note:1102801.1 How to Get 10046 Trace for Parallel Query
Note:242374.1 Tracing PX session with a 10046 event or sql_trace
Note:258418.1 Getting 10046 Trace for Export and Import
十、Trace文件解析
Note:199081.1 SQL_TRACE (10046), TKProf and Explain Plan - Overview Reference
Note:39817.1 Interpreting Raw SQL_TRACE and DBMS_SUPPORT.START_TRACE output
Note:224270.1 Trace Analyzer TRCANLZR - Interpreting Raw SQL Traces with Binds and/or Waits
generated by EVENT 10046
NOTE:41634.1 - TKProf Basic Overview
NOTE:32951.1 - TKProf Interpretation (9i and below)
NOTE:760786.1 - TKProf Interpretation (9i and above)
NOTE:214106.1 - Using TKProf to compare actual and predicted row counts
Note:199083.1 * Master Note: SQL Query Performance Overview
Note:398838.1 * FAQ: SQL Query Performance - Frequently Asked Questions
10046 trace详解(1)的更多相关文章
- 10046 trace详解(2)--tkprof
10046或10053生成的文件格式比较乱,直接查看有一定的困难,ORACLE自带的一个格式化命令工具tkprof可以将生成的.trc文件进行格式化,具体用说如下: 一.直接输入tkprof不带任 ...
- Oracle 10046 event详解-转载
0046事件概述Oracle的10046事件,可以跟踪应用程序所执行的SQL语句,并且得到其解析次数.执行次数,CPU使用时间等信息.这对我们分析.定位数据库性能问题是非常有用的. 10046 eve ...
- ASSER、VERIFY、TRACE详解
ASSERT()被测试它的参数,如果参数为零,则中断执行并打印一段说明消息.在Release版本的程序中它不起任何作用. ASSERT()使用的时候必须保证参数表达式中不能有函数调用,因此对于任何有函 ...
- 深入理解Oracle调试事件:10046事件详解
10046事件是SQL_TRACE的扩展,被戏称为"吃了兴奋剂的SQL_TRACE" 有效的追踪级别: ① 0级:SQL_TRACE=FASL ...
- Form_通过Trace分析Concurrent和Form性能和异常详解(案例)
2014-06-21 Created By BaoXinjian
- SQL Server 默认跟踪(Trace)捕获事件详解
SQL Server 默认跟踪 -- 捕获事件详解 哪些具体事件默认跟踪文件能够捕获到? --returns full list of events SELECT * FROM sys.trace_e ...
- Oracle数据字典详解
学习笔记:oracle数据字典详解 --- 本文为TTT学习笔记,首先介绍数据字典及查看方法,然后分类总结各类数据字典的表和视图.然后列出一些附例. 数据字典系统表,保存在system表空间中. ...
- [转]keil使用详解
第一节 系统概述 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上.结构性.可读性.可维护性上有明显的优势,因而易学易用.用过 ...
- linux查看端口及端口详解
今天现场查看了TCP端口的占用情况,如下图 红色部分是IP,现场那边问我是不是我的程序占用了tcp的链接,,我远程登陆现场查看了一下,这种类型的tcp链接占用了400多个,,后边查了一下资料,说E ...
随机推荐
- linux学习笔记11---命令more
more命令,功能类似 cat ,cat命令是整个文件的内容从上到下显示在屏幕上. more会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会 ...
- vim搜索设置高亮
vim搜索设置高亮 linux vim打开文档搜索字符串时,设置被搜索到字符串高亮显示. 有两种方法: 1.暂时设置:vim打开文档-->命令行形式输入set hlsearch. 缺点:关闭文档 ...
- 元器件封装标准IPC-7351
IPC-7351依赖久经考验的数学算法,综合考虑制造.组装和元件容差,从而精确计算焊盘图形.该标准以IPC-SM-782研发概念为基础进一步提高,对每一个元件都建立了三个焊盘图形几何形状,对每一系列元 ...
- yii2 RESTful API Develop
参考文档:http://www.yiiframework.com/doc-2.0/guide-rest.html 以 DB 中的 news 表为例创建该资源的 RESTful API,最终的测试通过工 ...
- ajax取消重复请求
var pendingRequests = {}; $.ajaxPrefilter(function(options, originalOptions, jqXHR) { var key = opti ...
- 几款 ping tcping 工具总结
本文转载至:http://www.cnblogs.com/kerrycode/p/8092942.html ping 命令以前是一个很好用并且常用的网络测试工具,它是基于 ICMP 协议,但是出于网络 ...
- visio中设置下标
下标:ctrl+"=" 上标:ctrl+shift+"="
- Android 电源管理 -- wakelock机制
转载地址:http://blog.csdn.net/wh_19910525/article/details/8287202 Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, ...
- tsinsen A1333. 矩阵乘法
题目链接:传送门 题目思路:整体二分(二分的是答案,附带的是操作) 把矩阵中的元素对应成插入操作,然后就有插入和询问操作. 然后根据插入操作对于答案的影响,询问操作所匹配的符合答案个数,将操作分为两段 ...
- 170223、Tomcat部署时war和war exploded区别以及平时踩得坑
war和war exploded的区别 在使用IDEA开发项目的时候,部署Tomcat的时候通常会出现下边的情况: 是选择war还是war exploded 这里首先看一下他们两个的区别: war模式 ...