设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

该用户从未签到

1

主题

4

帖子

4

积分

偶而路过

Rank: 1

积分
4
QQ
跳转到指定楼层
1#
发表于 2012-5-17 17:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.在线查看执行计划表/ t1 y, L& l- N
- a9 A1 y. r) M- i5 a6 a( e
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。9 _" q! j! M" ]+ I0 ?" h
, J% u" R, v) C) c- }
  1.explain plan
# Q9 Y& X/ g4 t/ m$ A  a
: s7 t# B4 }! r, Q  for
" ~  {5 j  k9 U' {2 ~/ h/ a
' f+ O7 S* q1 i$ y  select * from ......
& V1 \8 D& P2 j8 M9 C7 B% S
: \2 }7 k; W" c* Q8 s  2.select * from table(DBMS_XPLAN.Display);% p& [* S$ v! y5 g

+ D5 ?3 `( ]4 Y& p: B' E  二.使用oracle第三方工具:
$ e* R+ z" S( s3 {* ]# @
/ N- s9 C0 N( [( D, q  plsql developer(F5)6 `7 w& X( t: O! Q; O# Q

! L0 q4 i# N4 l( f* C" v) p% S  Toad (Ctrl+E)
, `* s2 ~, D) b. c# r* }) x# m# x' [' i4 k
  三.使用SQL*PLUS:
. v! [0 a' f, p
2 a4 Y8 s: u  y, w  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。: ^1 H' N! U* f- e8 o
+ J. \3 r+ W9 y( h1 U# v. u/ p  E
  如果PLUSTRACE角色不存在,执行
2 h0 K. m4 i' c( R( f) C
: z7 V: q5 s7 ~5 U5 _4 s: E  $ORACLE_HOME/sqlplus/admin/plustrce.sql. I& s$ [4 @- m- l* k8 |2 Q' u
0 H6 n' ?/ I3 [; V3 y
  1.sqlplus / as sysdba# x& {' X) U5 S& O2 [( C# X

2 Y  [7 @- I- I  _* ^  {  set autotrace on;
6 s" E8 h! W- S2 n( n0 g1 n; X: k
6 |; S% d* `# p1 A- A  关于Autotrace几个常用选项的说明:7 @$ a5 R1 O3 a6 o) K0 g

, S" U0 T- b7 \5 ^% z  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式6 S5 w. E4 g4 _+ Q
! T1 v9 o0 O4 h
  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告$ q( {% }' B/ p& ~( ?. i: @* u2 z
* E$ E5 d8 K, _: g4 B
  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息$ y  E' n8 ]. b$ }1 K
# l, F. l" E: T% q5 v) W2 I
  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
/ q- w1 P: J; _6 O- e8 ~* \  x/ r5 [+ T7 Q3 P" X1 \
  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
, H" K1 P& j' m; N+ }3 j, N% i9 k4 F( O) [% W! `" O( Q' j
  2.执行sql
) ~# d  p8 U, M, Y. T
( e" u8 l% `% [- l3 c3 v! j; b/ N; {  四.sql trace5 [8 y  r- d- d+ Z7 l8 H* j( r

( U* c3 [8 u* l8 b8 g. p0 o5 s' J  1.alter session set sql_trace=true;+ k; q0 K3 n5 l+ G1 w: Y

1 Y8 g5 K5 M5 X, c; j$ S  2.执行sql3 c2 m+ L1 p$ e+ ?
8 v# J' _# g7 P7 I1 b- b: a* b
  3.alter session set sql_trace=false;" c; A: S" q" m

$ ]# W# c4 `. K8 ?- ]4 {, e  4.查看相应的sql trace文件。
: ^: ~* j: ^: E
! W5 t7 L2 o6 m% g6 h# A  五.诊断事件(10046)
: K; d. H1 u. Z8 p: K8 Z; T# e  n# Y5 @" ?) a
  1.alter session set events '10046 trace name context forever,level 12';, ]8 C/ f$ i% Q: n. J% x9 U! L
! a7 k' W2 g1 m' N, W+ ?$ d9 k
  2.执行sql3 C( F) b& `, Z2 B$ Y

0 ]* K, e  p: `  3.alter session set events '10046 trace name context off';
6 g, a- f% E- t  e* k' l
1 }) Q& i6 R9 S7 `# o" j  3.查看相应的sql trace文件。
( r# x! H7 ^3 c# _% g/ w3 @, p0 D+ G, |
  可利用TKPROF工具查看跟踪文件6 x  M! O5 W. r, w

( n/ d3 Q7 A& _! e* X; c  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。- _' U: V1 X" ]

# k1 Q7 ^3 U# m& }, S: U  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。" ]9 V  h! J5 S1 `
! F# |" g7 [$ C: q
  下面简单描述一下TKPROF工具的使用步骤:
/ \% C: {8 u, r* _, M5 T/ V0 Z$ q4 ^2 F9 X& ~
  1、在session级别设置sql_trace=true
: P# r/ n* W. S2 n1 G! y
/ l+ p7 X6 T" d" V5 S  alter">sys@ORCL>alter session set sql_trace=true;
+ @3 M+ g5 d: E& _8 r' q$ z' {
4 t3 |9 e; S. k2 L) e  Session altered." d4 Q' E2 t4 \0 S1 |0 n2 J

3 J7 G9 X' ^: e  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:
2 P) F  ?# H' A9 [2 ~! f8 J, P9 @0 S% s+ b7 c3 k
  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
) \) t7 T% L+ H, f0 P, f  s) z, V6 E. t
, B9 |0 k8 B% |0 [  _% [! F: g: B  2、指定一下生成的trace文件的名字,便于查找:
% K! w4 j) Z' s
: T2 w8 D! N* j' [) g& K  J6 R  alter">sys@ORCL>alter session set trace file_identifier='yourname';
& s: k0 E: `, E: n' w, w  k6 t: z8 T  b" j* \# f! D
  3、执行SQL语句。
  P) f" h3 n$ `( a" p8 O  }  d1 f7 z& l* [; a
  4、利用TKPROF工具格式化输出的trace 文件:3 ?* N: I! d8 h: L) v7 B; }

% p3 d* ?: ^0 i% K& F; n  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
' ~% g1 ^; U3 f' z, ?7 B) F8 F7 x' N3 l% [4 z) N
  5、查看生成的文件再设置sql_trace=false:' |3 _. G8 }( U5 `+ a
* B3 s. g2 i) j
  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, 2025-1-7 15:36 , Processed in 0.067386 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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