设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

该用户从未签到

1

主题

4

帖子

4

积分

偶而路过

Rank: 1

积分
4
QQ
跳转到指定楼层
1#
发表于 2012-5-17 17:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.在线查看执行计划表
" e0 t2 }" V; t! l: q) E* a' D4 j' z
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。. K" k* W0 U: w7 |, x

$ }# h% j8 C& k6 m' `* U  1.explain plan
4 T+ E: A% g$ G0 u* }" L! k+ b9 P" I# C. N+ G" b/ H3 u5 t
  for$ X2 C6 t# h6 B4 V7 c* ]2 A
5 r9 z* s/ c2 z' \( I. l5 c) h
  select * from ......
$ w$ e$ x8 M  J9 d9 F  e
8 w9 @1 S* ]' L  2.select * from table(DBMS_XPLAN.Display);) r- z1 D  I* ~% p

$ D; X$ u4 A* y( w/ R. Q- v  二.使用oracle第三方工具:* h. x  y* ^$ P. c2 ]( K

  G& C  w7 j% V4 p# Q  plsql developer(F5)& W% V5 r3 X1 T6 d! K  H
  W) ?0 \( `: \. X! f9 g
  Toad (Ctrl+E)" i; G* w$ v) p* T7 R5 @' S) r

  K$ S6 g; X) C" C# @* O  三.使用SQL*PLUS:. y0 v. R" Q/ p- |
8 P* J$ `9 S( C$ _7 J
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。  d( a$ {/ F: p' Z( L) `# f

  T( m: C2 Y# v  如果PLUSTRACE角色不存在,执行
1 Z( q" ^& E, x* M9 d. q
/ ~3 z4 P' @" ]7 `0 X) B. Z  $ORACLE_HOME/sqlplus/admin/plustrce.sql
) S) `6 U6 k  K& t/ p
, Z% ]3 j) ~! T( z+ ?5 {) k  1.sqlplus / as sysdba* m/ y& Y* M9 M3 [9 ~3 r
0 E6 m9 m3 Q( j( w3 k
  set autotrace on;
* q+ k( ~" K$ x# B3 H5 [2 h6 f$ B& ~' e7 X
  关于Autotrace几个常用选项的说明:
5 R+ _; ?5 R& b' W0 _5 ~" Y5 g/ H2 j% m
  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式0 e+ ]" h5 b4 J: b5 u3 L: h
  R$ A8 n0 u9 K0 A: R+ g( ]
  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
' P% l* _% g" S" a9 ^: X" |+ B
' K& _+ W- P; i) N. {& \0 ^  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息( q. C9 m% P6 |2 ~' B

; g% v- c, }, P8 E; w  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
! a; z- {/ h: I5 ?, u
% g( H/ J" b  F/ \' Y  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询, z9 T2 b+ g+ y8 U
& S6 @; `- v- ^% r1 H" F$ {$ t
  2.执行sql
9 W% w5 V. b5 F( b$ @' [3 H# Z& S8 g3 z5 v* |8 V
  四.sql trace6 ^  b( ~8 e9 ~, c+ J: C

9 d) E, S6 R# @/ ]& G$ u  1.alter session set sql_trace=true;
5 G6 ?( Z' W, Z) M7 _# K+ U0 l* i7 r- ]3 @8 C! b+ x9 j
  2.执行sql
3 f5 X1 |; m& r) m
- s5 ^$ d. n: n5 d% R! c  3.alter session set sql_trace=false;
5 g: s; q2 _  T$ p& u8 A6 R
# l: {- Z) Q2 V: ]; y! z* G  4.查看相应的sql trace文件。
- P- l  t9 R: X. ]& ^3 Z0 B2 @8 B2 d, `$ I: s5 O) c: S
  五.诊断事件(10046). o* `$ ?3 H- J3 x- ~2 K

7 i- G7 q7 r% N- g  1.alter session set events '10046 trace name context forever,level 12';
) v* @4 w  n7 h9 ?" K- W* b9 R, U, x3 t' }1 |: ?
  2.执行sql
( }" B0 e4 ^5 U& o, ]6 u' C0 w# ?5 Z8 F5 G
  3.alter session set events '10046 trace name context off';# P) E; Y$ K& M9 B: I* l# s
6 o" y6 v- m- ^6 _+ C, f. k0 k( L
  3.查看相应的sql trace文件。/ t( k' U( R2 b8 t6 ]6 U6 @

8 e! Q5 A8 K4 x6 g* O1 G3 @( k  可利用TKPROF工具查看跟踪文件. {/ l3 S; C/ a

! D6 M' ~# x9 f( O7 O  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。/ t. M) A/ n: p4 o
) G* N5 u8 i& n  ^
  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
0 |# c' `, d% N+ C. [' i* `& K8 q: A
& ]* t- F3 T1 O  下面简单描述一下TKPROF工具的使用步骤:
+ E# Y, f: a# I+ Q4 @3 m# R
& M( ~* e4 S2 x  1、在session级别设置sql_trace=true
$ h9 |* V! Q0 N! o% Z/ S& \* r- p' D  ^* [4 j- x
  alter">sys@ORCL>alter session set sql_trace=true;- p# r: Y; s4 ~/ U1 j  Z& k

( R5 Z/ Z+ `% l( A. f. @# \& Y  Session altered.
' _1 g- \9 G/ n' i# L+ B9 {1 q' e7 w
  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:) t7 ]8 N% {6 v3 p9 S2 L5 A4 ]

- j% k; r. ^) Z# p) S3 x9 O2 E, w! Q  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
3 s0 u: n- |2 B  }
* n! {6 l6 w, z+ t4 ?  2、指定一下生成的trace文件的名字,便于查找:" U5 [  a% D1 U, J( W! y4 a
$ ^- d0 F: J7 N; J: h/ U( f
  alter">sys@ORCL>alter session set trace file_identifier='yourname';
" V# n* z. w* c! f
1 E# O' e" V& J* l  3、执行SQL语句。
: o( z% `3 ?6 ^! y: ~$ B. n' \+ Y. x9 y# V% F" p
  4、利用TKPROF工具格式化输出的trace 文件:2 Y, f" }, @& t

$ ^* Z3 Y" g' t( U' h5 I  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
2 f# U0 k+ ~# L5 u! Q6 v, C$ c: ^5 T9 H1 B/ b/ x; `5 P- ~7 y
  5、查看生成的文件再设置sql_trace=false:$ O* o2 g: w6 ~, m; I+ P" s% l0 m

5 N2 ~/ M) B) A) V8 p  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 16:02 , Processed in 0.064456 second(s), 27 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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