SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划

1.使用sql_trace跟踪执行计划

1.1 当前session跟踪:

alter session set sql_trace = true; //开始sql_trace

alter session set tracefile_identifier = jytrace; //设定trace文件的标识符

alter session set sql_trace = false; //结束sql_trace

1.2 其他session跟踪:(根据其他session的sid, serial#定位,最常用)

exec dbms_system.set_sql_trace_in_session(sid,serial#,true); //开始

exec dbms_system.set_sql_trace_in_session(sid,serial#,false); //结束

1.3 Instance 级别:(很少用到,会造成系统的额外开销)

alter system set sql_trace = true; //开始

alter system set sql_trace = false; //结束

实例级别还可以在pfile/spfile参数文件中加 sql_trace = true

2.使用10046内部事件跟踪更详细的信息

2.1 关于10046事件的四个级别,参考盖总博客,区别如下:

10046事件是Oracle提供的内部事件,是对SQL_TRACE的增强.
10046事件可以设置以下四个级别:
1 - 启用标准的SQL_TRACE功能,等价于sql_trace
4 - Level 1 + 绑定值(bind values)
8 - Level 1 + 等待事件跟踪
12 - Level 1 + Level 4 + Level 8
类似sql_trace,10046事件可以在全局设置,也可以在session级设置。

2.2 当前session跟踪:

alter session set events ‘10046 trace name context forever, level 12‘;
alter session set events ‘10046 trace name context off‘;

2.3 其他session跟踪(最常用):

exec dbms_monitor.session_trace_enable(sid,serial#,waits=>true,binds=>true); //开始
exec dbms_monitor.session_trace_disable(sid,serial#);  //结束

2.4 实例级别(很少用到):

pfile/spfile参数文件增加 event = "10046 trace name context forever,level 12"

3.阅读生成的跟踪文件

3.1定位跟踪文件(下面这条sql来源Dave博客)

Oracle 10g版本:生成的trace文件默认路径是$ORACLE_BASE/admin/SID/udump下.

Oracle 11g版本:生成的trace文件默认路径是$ORACLE_BASE/diag/rdbms/jy/jy/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;

3.2使用tkprof命令美化生成的跟踪文件

下面是我经常用的,有关tkprof命令的更详细说明,敲完tkprof命令直接回车就可以看到。

tkprof xxx.trc xxx.txt explain=system/oracle  sys=n

参考网址:http://www.eygle.com/archives/2004/10/use_sql_trace_to_diagnose_database.html

http://blog.csdn.net/tianlesoftware/article/details/5857023

参考书籍:《让Oracle跑得更快》

时间: 2024-10-12 04:44:46

SQL Tuning 基础概述03 - 使用sql_trace和10046事件跟踪执行计划的相关文章

SQL Tuning 基础概述01 - autotrace的设定

1.autotrace的设定 SQL> set autotrace Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]] set autot on --打开autotrace,之后执行的sql,会显示sql执行结果.执行计划.统计信息 set autot on exp --会显示sql执行结果.执行计划 set autot on stat --会显示sql执行结果.统计信息 set autot tra

SQL Tuning 基础概述10

在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描,单块读,有序INDEX RANGE SCAN:索引的范围扫描INDEX FAST FULL SCAN:索引的快速全扫描,多块读,无序INDEX FULL SCAN(MIN/MAX):针对MAX(),MIN()函数的查询INDEX SKIP SCAN:查询条件没有用到组合索引的第一列,而组合索引的第一列重复度

SQL Tuning 基础概述08 - SQL Tuning Advisor

SQL调优顾问 SQL Tuning Advisor的使用案例: 1.构建测试表T SQL> conn zjy/zjy Connected. SQL> create table t as select * from dba_objects; Table created. SQL> select count(*) from t; COUNT(*) ---------- 653500 2.对“select owner, object_id, object_name from t where

SQL Tuning 基础概述05 - Oracle 索引类型及介绍

一.B-Tree索引 三大特点:高度较低.存储列值.结构有序 1.1利用索引特性进行优化 外键上建立索引:不但可以提升查询效率,而且可以有效避免锁的竞争(外键所在表delete记录未提交,主键所在表会被锁住). 统计类查询SQL:count(), avg(), sum(), max(), min() 排序操作:order by字段建立索引 去重操作:distinct UNION/UNION ALL:union all不需要去重,不需要排序 1.2联合索引    应用场景一:SQL查询列很少,建立

SQL Tuning 基础概述02 - explain plan的使用

1.explain plan的使用 SQL> explain plan for delete from t_jingyu; Explained. SQL> select * from table(dbms_xplan.display); PLAN_TABLE_OUTPUT ----------------------------------------------------------------------------------------------------------------

SQL Tuning 基础概述06 - 表的连接方式:Nested Loops Join,Merge Sort Join &amp; Hash Join

nested loops join 嵌套循环 merge sort join 排序合并 hash join 哈希连接 nested loops join(嵌套循环)   驱动表返回几条结果集,被驱动表访问多少次,有驱动顺序,无须排序,无任何限制. 驱动表限制条件有索引,被驱动表连接条件有索引. hints:use_nl() merge sort join(排序合并)   驱动表和被驱动表都是最多访问1次,无驱动顺序,需要排序(SORT_AREA_SIZE),连接条件是<>或like导致无法使用

SQL Tuning 基础概述07 - SQL Joins

N多年之前,刚刚接触SQL的时候,就被多表查询中的各种内连接,外连接,左外连接,右外连接等各式各样的连接弄的晕头转向. 更坑的是书上看到的各种表连接还有两种不同的写法, 比如对于表A,表B的查询 1,内连接两种写法: select * from A, B where A.id = B.id; select * from A join B on A.id = B.id; 2,右外连接写法: select * from A, B where A.id(+) = B.id; select * from

SQL Tuning 基础概述04 - Oracle 表的类型及介绍

Tables A table describes an entity such as employees. You define a table with a table name, such as employees, and set of columns. In general, you give each column a name, a data type, and a width when you create the table. 1.普通堆表(Heap-Organized Tabl

10046事件跟踪会话sql

背景知识: 10046 事件按照收集信息内容,可以分成4个级别: Level 1: 等同于SQL_TRACE 的功能 Level 4: 在Level 1的基础上增加收集绑定变量的信息 Level 8: 在Level 1 的基础上增加等待事件的信息 Level 12:等同于Level 4+Level 8, 即同时收集绑定变量信息和等待事件信息. 一: 跟踪当前会话sql 1. sys用户给执行跟踪dblink用户授权SQL> grant alter session to dblink; Grant