设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

该用户从未签到

1

主题

4

帖子

4

积分

偶而路过

Rank: 1

积分
4
QQ
跳转到指定楼层
1#
发表于 2012-5-17 17:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.在线查看执行计划表
8 q0 M! o, w' w7 }  |5 ~* g. ?5 j/ O+ u$ c# w) Y" C( h
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。  X: Y: {% J9 d3 [1 f5 I9 Q0 B* j
- l8 F5 [! B9 Z
  1.explain plan
) R; [+ y+ b1 {
, X" q: w) A9 U  for. X, O3 W# j3 }# G" A
; Y1 U& j9 C0 `: W6 \! o1 Z
  select * from ....... `0 X( G8 }: F9 N# M  c
5 k1 o' {, d2 ~
  2.select * from table(DBMS_XPLAN.Display);
  {* y* {# [6 Q* x0 L" G: r% E% e! @
  二.使用oracle第三方工具:# @; Y) _5 N* u

5 ^% C1 s/ m# |" G. `! j- D  plsql developer(F5)9 {! x, t6 p3 O! b5 z% M
: a! R, q2 f) X  Y; t
  Toad (Ctrl+E)
) X( D1 K, v  ?9 E" n$ q& R3 ]( k5 J" I, V# y
  三.使用SQL*PLUS:
( T! d3 ], @1 F. m  D5 G* F1 b5 H9 F0 g6 B6 B8 ?# f9 S
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。
" t& x: Z; M6 c2 K
8 W2 }) X! p! ]1 L  如果PLUSTRACE角色不存在,执行
  _6 E7 a: j. A+ E( p8 e$ s
+ ~5 k1 t. a2 m  $ORACLE_HOME/sqlplus/admin/plustrce.sql
; `/ K- A! Y! H; G, j, I$ _2 ?4 ]1 d" U# }4 M* t! B& V; g0 i
  1.sqlplus / as sysdba4 i! h: h# C* \' q9 y  P
3 ]+ L- S% p$ _- p
  set autotrace on;6 F: v5 n; ]* t6 `- k" u

1 D9 \/ r/ X9 J0 k  关于Autotrace几个常用选项的说明:  }0 t8 i1 T/ C* s8 ]( `
( V1 A* B! T! x
  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式7 ?) ?4 i9 D5 x1 G9 E- F; ?; Z! U

/ A5 g3 ]# f, `+ ]9 A  o! H  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
# |, i! O% u7 ?& I1 J2 \
& y& ]5 z2 V1 F, C: O" G- G$ |% E1 R  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息6 b- b# l3 e, Q! }. \" i8 v

1 E: n1 H6 t1 p$ \" m: `* B" E4 F  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息1 V5 o! C; Q! a$ R  ~' G
0 U8 m8 Y8 m2 b$ j3 k- l# [( O
  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
4 B5 H4 o0 a5 I8 N6 J
/ m; @0 t/ A# `: u  2.执行sql
' N6 O/ N% Z9 ~" r' V- d
5 U% k9 y/ k: B  四.sql trace
' X7 c# L! p% i$ \; l" t! b5 X7 X. u& _8 z! ]& {7 v/ k' y
  1.alter session set sql_trace=true;
' l& q5 r5 K% W0 ]5 l/ e8 ?4 q# P* W+ y3 o
  2.执行sql- d' J7 D$ J5 f8 n/ D2 e; ]& J
2 O0 i3 r! h# [! b9 S  b* @6 s5 U
  3.alter session set sql_trace=false;9 [5 `4 \+ C. b  j8 D
5 C- K4 K: Z' N* k4 v6 Z
  4.查看相应的sql trace文件。
; W; @/ h) f( T7 {+ A/ J  ~# Q* A( S
  五.诊断事件(10046)
" F& T4 [! |$ j% T- t/ d  i$ ?3 B$ M  ?9 u4 V" \. k
  1.alter session set events '10046 trace name context forever,level 12';2 `6 z# h: V3 C* c6 m7 ]- C# f7 h
1 j9 R9 ?& Q& S
  2.执行sql
/ ^% G" H0 o% s
2 }) r; i4 B  a" d8 l% ^1 i* n  3.alter session set events '10046 trace name context off';
' {& r; T1 I0 @6 |; x
0 P8 V) Q- b( ~4 L: a9 e4 v  3.查看相应的sql trace文件。
/ M  R5 f( V, y) y& T: z& |# W$ [, u
  可利用TKPROF工具查看跟踪文件
7 w- J/ w. G, w8 D% H& P. k  i; ]  Q8 M) S4 Q- U
  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。1 p: M, A/ v8 D( \8 x! u1 @
! H6 c# R/ `3 J8 M
  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。: o! F) o/ C6 q; Y

; P! ]7 r  D+ W, V6 u  下面简单描述一下TKPROF工具的使用步骤:! l: w- z' j/ x5 V1 m& v
; i* z: O' W! k4 Q' f
  1、在session级别设置sql_trace=true* R  u; |  Y; D
, m  H% O' p6 y# \1 d! v
  alter">sys@ORCL>alter session set sql_trace=true;
0 q+ X9 g( X5 g0 J6 }) h6 u3 d1 r  u6 J2 P* J! g" p
  Session altered.
( w- t$ ?% \  L) y8 J
" P: \" {, r9 {! z; w1 Y  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:6 `2 b) ^5 P0 S) w# d$ J
1 a8 ~' z- Y$ H3 u4 v
  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);$ S9 l/ Q6 r5 W0 p$ @3 O- X
* H  ^( ]% h4 Z. e' Y( |
  2、指定一下生成的trace文件的名字,便于查找:
4 V  Z9 U; _, e4 O' j
5 {' Y' G# q' P# {& H  alter">sys@ORCL>alter session set trace file_identifier='yourname';7 K" R7 F$ |: e
. S6 B* V: F" S  H! W' G& S& X
  3、执行SQL语句。8 x2 U1 g/ M, O

. K% b" l5 y8 @+ ~' U& g5 s  k4 X6 f  4、利用TKPROF工具格式化输出的trace 文件:
- P0 q" k4 A% G7 Z2 [0 H& X. S; g; e; j
  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
( W$ Z5 F) o% a, D" f
) ~& i1 W- Q: C  5、查看生成的文件再设置sql_trace=false:
7 D- |& k9 j6 d4 n+ G  q0 I4 {, u3 O- _. }3 b/ d, |' _
  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 07:12 , Processed in 0.066416 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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