前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL Tuning 基础概述

SQL Tuning 基础概述

作者头像
Alfred Zhao
发布2019-05-24 20:42:52
3570
发布2019-05-24 20:42:52
举报

1.使用sql_trace跟踪执行计划

1.1 当前session跟踪:

代码语言:javascript
复制
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#定位,最常用)

代码语言:javascript
复制
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 级别:(很少用到,会造成系统的额外开销)

代码语言:javascript
复制
alter system set sql_trace = true; //开始

alter system set sql_trace = false; //结束

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

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

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

代码语言:javascript
复制
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跟踪:

代码语言:javascript
复制
alter session set events '10046 trace name context forever, level 12';
代码语言:javascript
复制
alter session set events '10046 trace name context off';

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

代码语言:javascript
复制
exec dbms_monitor.session_trace_enable(sid,serial#,waits=>true,binds=>true); //开始
代码语言:javascript
复制
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下.

代码语言:javascript
复制
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命令直接回车就可以看到。

代码语言:javascript
复制
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跑得更快》

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-11-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.使用sql_trace跟踪执行计划
    • 1.1 当前session跟踪:
      • 1.2 其他session跟踪:(根据其他session的sid, serial#定位,最常用)
        • 1.3 Instance 级别:(很少用到,会造成系统的额外开销)
        • 2.使用10046内部事件跟踪更详细的信息
          • 2.1 关于10046事件的四个级别,参考盖总博客,区别如下:
            • 2.2 当前session跟踪:
              • 2.3 其他session跟踪(最常用):
                • 2.4 实例级别(很少用到):
                • 3.阅读生成的跟踪文件
                  • 3.1定位跟踪文件(下面这条sql来源Dave博客)
                    • 3.2使用tkprof命令美化生成的跟踪文件
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档