zoukankan      html  css  js  c++  java
  • SQL Tuning 基础概述03

    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跑得更快》

  • 相关阅读:
    使用pjsip传输已经编码的视频
    xubuntu14.04下编译pjsip及pjsua2 java
    解决 Python.h:没有那个文件或目录 错误的方法
    HIbernate與不支持boolean的數據庫之間的映射
    js数组的操作
    jQuery中ajax的使用与缓存问题的解决方法
    网络游戏中应用可插拔工厂处理消息
    How to Train Triplet Networks with 100K Identities?
    (转)如何用TensorLayer做目标检测的数据增强
    图像超分辨-IDN
  • 原文地址:https://www.cnblogs.com/jyzhao/p/3850047.html
Copyright © 2011-2022 走看看