设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

该用户从未签到

1

主题

4

帖子

4

积分

偶而路过

Rank: 1

积分
4
QQ
跳转到指定楼层
1#
发表于 2012-5-17 17:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.在线查看执行计划表. E6 ?) }; |8 S, M4 _4 G$ C
1 e5 }) B# y! M- _& s
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。  M2 K4 z: u- x0 Y+ s( s- w

3 e2 H+ V) P. g% k  1.explain plan9 p3 K( d4 z! s) Z; E. M
7 x) x' y' ?# O' D
  for( z6 j2 a, |1 y$ T; P% i3 ?

" z4 G2 ~, H1 J! i+ ]' @6 a7 u  select * from ......
5 e3 R6 c) V$ S* G8 h5 s
; h# H3 D! W0 P  2.select * from table(DBMS_XPLAN.Display);
4 A8 q* r1 o, l0 n0 S2 o
9 {' d3 S$ k, D  二.使用oracle第三方工具:* ^1 [. [, B/ \6 B

  Y/ h5 V( g6 H4 n+ p$ f  plsql developer(F5)
7 o4 j1 k" S' n! r/ a1 n4 w
! p) L' h8 q0 ]- ^# O7 s  Toad (Ctrl+E)
: A+ F7 B  L# H1 [% Y
' q( T8 z) T4 F) R( z- x2 X  三.使用SQL*PLUS:
2 {% C; F0 B6 P, I( W+ q  b
7 L% ^% [$ r, b8 x: U6 |- M4 U  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。& K$ s; a2 n- D

* h4 C" j7 {1 v/ q* ?9 J  如果PLUSTRACE角色不存在,执行
* N0 M2 \/ [0 t6 v4 {, ^8 ^+ T/ ~* U, [- c5 T1 U" [: L1 U' c
  $ORACLE_HOME/sqlplus/admin/plustrce.sql/ ]& q8 [; d+ w) P6 u0 S+ E

  v8 K4 r. Q. Q; R  1.sqlplus / as sysdba8 [! Z: R$ f+ O. ~% a& X
% y$ b3 a- Q3 ^: `/ z% O
  set autotrace on;
+ K1 E# w& z8 D
$ E. l+ Z! N/ k) e  关于Autotrace几个常用选项的说明:6 Q# p4 A" M- Z% d; l. Q9 y

, f8 B2 O1 Y: U0 ]- p  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式+ }. s- @& |. }- o" O: u/ h& ~
- t% _1 d6 m4 O: S6 i
  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
0 I5 C* T" x7 A- D) w0 S* x' {9 w& S& A2 Z
  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
! c1 J( w& x/ j$ x
0 l+ ]+ k4 J+ G! @: _. Q& c% P7 E  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
- Y9 M1 L, h8 [6 p8 _* c( j
) g& ^& k  L% \/ j  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
4 c  s# U: l0 g! y5 L2 S' ]6 m! a6 i& A
  2.执行sql
& S# N) @( {* `0 V# T& t! l& ?9 k4 @: s4 \. D% v; S3 N' B9 z) B. g5 P  n6 F
  四.sql trace
! V9 a2 M; R) S5 a- p
* [2 |& d! r8 |, Y8 v  1.alter session set sql_trace=true;
' C$ q9 d0 P! M& P; w
6 s$ R# g+ R% `2 H! I- x  A  a' J  2.执行sql- I. ~3 H6 U& m- [
# a: v. c' N0 v0 n
  3.alter session set sql_trace=false;
6 H. W0 l. Q" n! J0 g  d. ~8 P9 Q' h, x+ a9 V1 L; f9 H. M
  4.查看相应的sql trace文件。
2 z9 c$ G* U1 [0 ^0 w
1 a/ W# w* W9 w, L8 E, Q+ a  五.诊断事件(10046)
) J) v/ P9 V5 U2 b, y: x& G0 m' i2 P* _9 u( Y3 U# t: z2 O
  1.alter session set events '10046 trace name context forever,level 12';4 Q; ]% [' V+ b4 O1 v8 _2 W; z
% |# A- n1 d# c* E
  2.执行sql4 x! L, O  @: v9 {

5 W! g. I' R7 ~" h  3.alter session set events '10046 trace name context off';
; m# F3 {  j9 w& M9 l. r; s5 U8 y" u7 _3 q0 g$ K* Z
  3.查看相应的sql trace文件。. c* @$ A- @. Q4 K1 [" l
* Q7 F* S- [9 e9 B$ |/ T  [
  可利用TKPROF工具查看跟踪文件
% O  @/ i: ^1 m1 A  P: D2 A7 \# N* o6 o  C% G" [9 l$ w% {/ l
  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。
8 s) y. ]- S+ G% _- e
+ F& u( U+ w! ]/ l1 E6 J4 R  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
) ]) l4 X# q* J* U3 C1 ]' O! P/ i' ~" M# g0 N7 S
  下面简单描述一下TKPROF工具的使用步骤:9 j# f8 B5 k' S& [
; E6 n! w- T% c% W5 {* q% O
  1、在session级别设置sql_trace=true. d% u2 |2 v: y1 F* j

; x- `: N0 J! C; _/ [; s3 r$ `: _  alter">sys@ORCL>alter session set sql_trace=true;& v/ k; r. {( V' k) n

5 B; H. A' q+ _8 x7 }" E  u9 l  Session altered.
0 d) c( J( [  ]) T& u* O
# |4 C* Y& g6 I  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:
1 r- r# n: A* X( ?2 i7 C/ w/ f9 f& w7 I. _1 ~
  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
  l. E' B' ]; j3 K* W0 @) g0 c5 c
  2、指定一下生成的trace文件的名字,便于查找:/ B/ K$ L( s; o6 I9 e) @

( X) [3 Y' a0 }7 I- z* y  alter">sys@ORCL>alter session set trace file_identifier='yourname';' m4 y. d& n  E4 G5 h( N) ]# h
  M$ Z! I6 A) B8 E
  3、执行SQL语句。
+ `1 w8 u! y9 x; q: B
+ {9 p3 x) n7 u  4、利用TKPROF工具格式化输出的trace 文件:% Q/ m5 y* a6 H5 p" J6 u
6 P+ M3 Y! F* ~1 g# W6 N. M+ x
  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
  C1 x' g  y) N4 B+ P) @( C# ~$ R7 O# a" @# }* w
  5、查看生成的文件再设置sql_trace=false:. s. {! f# [* F; g

: L* i% o& y" q) z8 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, 2025-1-7 15:54 , Processed in 0.086918 second(s), 27 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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