设为首页收藏本站

中国喷墨论坛-喷墨技术应用-数码影像-数码印刷-数码印花

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 930|回复: 3
打印 上一主题 下一主题

多种方法查看Oracle SQL执行计划

[复制链接]

该用户从未签到

1

主题

4

帖子

4

积分

偶而路过

Rank: 1

积分
4
QQ
跳转到指定楼层
1#
发表于 2012-5-17 17:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.在线查看执行计划表2 Z1 G3 p5 O! c
# k& Y* `' z/ k$ f' _
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。2 \* r, j8 T% O) _: m* F
& M% A; U/ S: b3 U9 E  S2 [
  1.explain plan# z' i. Z; n# f! e' D  o
" v) i" ?' t! N& L5 S+ k
  for
" b; G& R$ ]* A2 U% C# E1 O* L. U6 H& F7 r
  select * from ......; s9 V9 I  ?: J2 L" k. i
* j2 {3 ~3 x! z5 j1 u" h( Z" y
  2.select * from table(DBMS_XPLAN.Display);
7 W' N( f( a) \$ b% W
$ {' i$ c& e1 ^7 d" {5 _; j  二.使用oracle第三方工具:
, P3 V, Z; R6 ?! M
6 |6 C& i1 a: [0 o  plsql developer(F5)
! K& V' E( R! E% B* u' E
" b) S4 E/ J) `  Toad (Ctrl+E)
/ ?1 u) k: W6 I- r" ]$ E4 M
" v+ \3 [& y- X/ L* J: f  三.使用SQL*PLUS:
/ F  v4 E  I7 E
* f4 N% A) Q8 r7 W" _7 x  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。
$ _0 {. }( _* e/ D! i% k# P- G6 E! w# \9 u
  如果PLUSTRACE角色不存在,执行( M8 g  S( l- Z* o3 s' L, ?
" I9 o3 P- n4 J
  $ORACLE_HOME/sqlplus/admin/plustrce.sql
+ _9 R! y; T" Q3 S
3 [6 D7 t- `8 r3 Z& J  1.sqlplus / as sysdba' |7 s0 e: G5 T& U$ d
! t! h8 Y, ]0 p2 c) C6 q( P$ e% Q% \
  set autotrace on;
3 A" G+ j/ Y$ _
2 C* ]: x2 b4 C) v: k  关于Autotrace几个常用选项的说明:/ Z- @  m- E" n# P1 w; ~8 M

% b7 y8 S; @8 B) a  [) `  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式. e' ^4 i% T/ v8 ?. w  b+ s

0 S/ D! \# T$ N1 C, Q9 U  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告0 r, m. }5 ~6 Z" f" j/ |" U: D

9 v9 R2 V: _6 w  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息0 b$ T+ F; W' k* O/ H  Y3 W

2 C& \1 d! |# v3 y0 p+ n  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
0 g5 W( f$ Y* r8 I  m4 ]! s* z0 _7 R
  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
; n5 H( Q: w9 @) j! R# ?: K  o. I
! S3 R. L( }- p: N3 j1 ]  2.执行sql
9 d( n7 p6 N; E2 H& ]! V
+ J0 H4 d0 E  ?+ E  r  四.sql trace/ g7 v9 @) ^9 _4 p; A0 h

4 L* }9 q8 L' N" M- ^! T  1.alter session set sql_trace=true;
# P- A2 H4 E. z/ \# K1 C
5 N6 m+ `# J& A$ p( f  2.执行sql! E8 b$ c9 O' P# `' h) ]
5 ~/ |. u; e- k7 c
  3.alter session set sql_trace=false;9 B- h6 ]# n1 ]4 b  W2 m
) z3 v0 b5 ^+ p7 @* ?' O/ Z' d
  4.查看相应的sql trace文件。6 D# ~9 u5 |' l: k: }! I

4 C" k* P3 [  R  五.诊断事件(10046)& v2 H% B+ [+ w

* f% H4 u% g9 I) `  1.alter session set events '10046 trace name context forever,level 12';
- ~# q9 p6 d1 D  |$ m% z/ u6 R5 X, }( K. S, |6 i3 V
  2.执行sql5 D) |1 o/ @# ]: E: s
- e* d$ s$ U, l# T
  3.alter session set events '10046 trace name context off';# _9 P# u. N7 K% ?/ m
: f' n& e, B0 N" N) J
  3.查看相应的sql trace文件。
+ i0 b- d' H3 ?$ [
( ]% R9 B  w" Y2 \, L6 z7 C  可利用TKPROF工具查看跟踪文件
: u0 }2 w$ n8 c" _' s! k  Z) [' r6 M7 @7 M  [/ |; F  L) ?
  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。* A4 E* E4 ^  T: o  P) n

% {3 W3 y: ~! O0 R( C3 Y! W7 Z  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
( z* n3 L5 s. p% D* o  c$ n! S0 p% M7 t- I; z  W
  下面简单描述一下TKPROF工具的使用步骤:
/ D" s: |) _2 T% q- |) {3 p( K5 W! i) N5 d- h
  1、在session级别设置sql_trace=true3 L8 B. T- Q  g! S8 c5 R

( E$ V, A) x9 ]' F; ^  alter">sys@ORCL>alter session set sql_trace=true;8 ~) |1 |3 M5 u

& `" \# n( n. ^1 P' N6 [) s8 c2 S' h  Session altered.
0 l. D  K2 w& _' s2 ~- s+ z2 _3 B; G0 r3 M; f* O
  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:5 k6 M3 Z& U0 ~/ p- K
; P/ y& o' |# }3 y
  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);! U2 L- @3 N8 s/ u3 X; a
9 [% j8 k' {( I% V# k8 n( h" B
  2、指定一下生成的trace文件的名字,便于查找:
7 _5 M* ?( @0 G( I3 S4 _
. D9 b  v* L8 }7 g: Y6 M+ w: J" S6 ~  alter">sys@ORCL>alter session set trace file_identifier='yourname';5 a5 v" ]( \" d; T6 [

6 B3 r1 q( Y- N2 A+ S1 K6 h  3、执行SQL语句。. J* h9 o- N6 Q9 K5 R8 s0 P

0 J( @8 K) c: h  4、利用TKPROF工具格式化输出的trace 文件:
/ e- @, Y/ F4 x7 b- p9 U, @
( u9 l) i2 k& y5 n6 M, R6 J0 k  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela3 b2 W3 U9 J% O7 z  e
* m! p, f" s1 U$ n6 F. u7 {* f
  5、查看生成的文件再设置sql_trace=false:
- Q1 A- n( u, l) |9 z% _2 ~
7 w, |- p3 B9 V: h9 Q  alter">sys@ORCL>alter session set sql_trace=false;
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖

该用户从未签到

1

主题

3

帖子

3

积分

禁止访问

积分
3
QQ
2#
发表于 2012-5-18 16:10:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

3

积分

禁止访问

积分
3
QQ
3#
发表于 2012-5-18 17:14:42 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

帖子

1

积分

偶而路过

Rank: 1

积分
1
QQ
4#
发表于 2012-5-18 19:23:27 | 只看该作者
只是路过看帖就要回帖。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|中国喷墨论坛 ( 沪ICP备05013984号

  

GMT+8, 2024-11-28 09:01 , Processed in 0.085950 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表