设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

该用户从未签到

1

主题

4

帖子

4

积分

偶而路过

Rank: 1

积分
4
QQ
跳转到指定楼层
1#
发表于 2012-5-17 17:19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一.在线查看执行计划表1 u4 [& {/ e/ s; A
* {9 m- u  m6 y6 D2 p
  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。
: Q# V* j- h5 S1 R) S
+ C: F1 H5 j/ j  1.explain plan" z8 f) v0 v" a7 [
9 u, x0 h2 ?; }2 b3 i
  for! t; l, I" y) ^+ v( P: ~" J
5 _& u$ \" _2 |: I3 `7 V0 p
  select * from ......7 C# _/ k0 `; q$ Z) _8 g1 K( _: ]5 e/ h
6 i+ ?" M8 u  U$ y  t. l
  2.select * from table(DBMS_XPLAN.Display);
; l% N8 x0 f3 k+ {+ F7 R$ p: D( n
  二.使用oracle第三方工具:) b. a' Q- M' _# V4 ~

8 t& ]6 ?6 Q9 m2 f  plsql developer(F5)( X) p3 G" a8 x# o

" m7 z1 o# b. l( a6 _; X  Toad (Ctrl+E)
0 S7 x0 I+ f- E: U3 z  t4 z5 R
4 q" z: X" c. W. V5 e" i1 K4 ]( ]  三.使用SQL*PLUS:/ Z4 e3 @7 {, q$ i9 ~6 g9 v

9 _; _/ A4 U$ o9 B1 i+ X  如果PLAN_TABLE表不存在,执行$ORACLE_HOME/rdbms/admin/utlxplan.sql创建plan_table表。" y" x0 X* A4 i/ E1 n' k6 B! H
  n- n( d: }9 q4 \
  如果PLUSTRACE角色不存在,执行: L+ x6 [/ ^2 A2 X
; P( `4 m4 n/ b" r/ y, ?, `% U& Q
  $ORACLE_HOME/sqlplus/admin/plustrce.sql: C) Q5 @. [* F: |5 W6 C1 q" i8 G
9 g3 h) z2 x$ m9 i
  1.sqlplus / as sysdba- ^! H( S, {  N# ^. F
! ]+ r) I7 O% o0 E( I9 ^( x
  set autotrace on;+ a. \0 F/ K' y  ~; A+ Q. {, d5 K

4 H9 s9 G* ?/ N1 E( x: O  关于Autotrace几个常用选项的说明:
, Y8 t" W* T0 m8 g* X5 ]& [/ o& r" z
* X9 w! c' [0 o3 B" g1 Z- s" k: q  SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式; G  P; B$ j! I) S  v/ T
4 f, m* K6 Q; _0 q1 ?- ^1 K+ P
  SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告5 v5 z; s* |; F, O! Z

+ w  l5 U6 J4 H4 l% \  SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
6 \" L, D" ^0 ~
& J- v! V% U$ W5 }  SET AUTOTRACE ON ----------------- 包含执行计划和统计信息+ g' C; x8 {+ D* O0 m

* E- H2 m( R/ U7 b  SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询
6 s% T8 Z1 s1 @* V: h. m( n
# d  s! b# X( R# c9 f3 `; x2 l: y  2.执行sql
* o9 L3 K* A+ ?2 F, ^  ], Y; L; C0 ^7 \- ?2 `! R5 v0 O
  四.sql trace
% n: z& ]* [' T, _6 Z; [# f6 w2 V9 z  E( a9 |5 _1 S
  1.alter session set sql_trace=true;2 C. M4 m, R" o
$ X& U/ l* q  Y/ B3 q2 M
  2.执行sql* ^4 {8 s0 N& Q8 S

: |1 w4 E% {, d+ j8 E4 V  3.alter session set sql_trace=false;" o( D$ p- @1 X

! |% b8 m- ]+ ]" r  4.查看相应的sql trace文件。# A3 T# Q8 p3 U  q

# h$ M$ ]: Y' L. f% j' V  五.诊断事件(10046)* b" Z+ g/ @5 `4 _# M
5 I" X$ c( M8 a% J. h; M; p5 B
  1.alter session set events '10046 trace name context forever,level 12';
+ v1 I1 c: I4 j2 P8 b5 _$ _
1 s: Z$ _( K, G' W  2.执行sql
. P$ l4 f  B! Z$ J: G
" c) L, i( ~( k  3.alter session set events '10046 trace name context off';+ q& [) g( L# N2 k
. Y) o6 |2 o  ~5 d; T
  3.查看相应的sql trace文件。
3 ?( F) K' u5 A" E% h( z) r6 K
: \1 Y  q: k# D4 N) p  可利用TKPROF工具查看跟踪文件
; S3 E# b5 `8 X; o: n6 F0 V& R6 w$ R
8 |% t# S  w! k, ?8 O, N  r; p/ Y  TKPROF是一个用于分析oracle跟踪文件并且产生一个更加清晰合理的输出结果的可执行工具。如果一个系统的执行效率比较低,一个比较好的方法是跟踪用户的会话并且使用TKPROF工具的排序功能格式化输出,从而找出有问题的SQL语句。' W6 j  \* P" c( L% l

( C$ U' X0 Q* C  L5 B, C6 J) {  TKPROF命令后面的选项及输出文件各个列的含义在这里不做详细的介绍。google一下就会有很多资料。
  V0 F  E0 \' Y9 Y0 `2 T! `
. [- g2 }! u) Y, J9 d1 v* I  下面简单描述一下TKPROF工具的使用步骤:
! L9 [5 ]9 l0 C: W
' R' \! c: p$ K  1、在session级别设置sql_trace=true
7 p' c8 |% L: ^
/ p0 B) N( l0 D, @/ @  alter">sys@ORCL>alter session set sql_trace=true;
* ], V. a7 Z6 l4 P7 j, h. m' o$ d0 E2 ~- e" u  [
  Session altered.
9 c* G# @5 n5 @8 Z7 C6 S7 O/ x6 d; ]) `1 I. Q: r: ?7 k
  如果要在pl/sql中对session级别设置true,可以使用dbms_system这个包:
: g" f1 A3 Q) s# S9 X
( @! H" b0 c7 s+ w- L  O; J4 i: ^" h  sys@ORCL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
) R2 r3 @; \! F& m; ]: y' G
) }$ o& C2 i% B: f  2、指定一下生成的trace文件的名字,便于查找:2 Y1 T& T# i- V3 K
! R+ ?- `7 c+ N- }
  alter">sys@ORCL>alter session set trace file_identifier='yourname';4 Z! x4 l& E9 N$ i+ w- S
/ }+ A4 X5 \  O" f9 `0 {6 _- I. @
  3、执行SQL语句。
5 R* `6 n3 I$ Z; w5 C& u6 o, _" g+ ~+ |& t% B# [3 s4 h1 m
  4、利用TKPROF工具格式化输出的trace 文件:
! X3 z3 `1 }" c; C8 a/ a) c
5 \" S/ M: f( h$ U6 a8 V. p  [oracle@q1test01~] $tkprof/oracle/admin/orcl/udump/orcl_ora_10266_yourname.trc/oracle/yourname.txtexplain=user/pwdaggregate=yessys=nowaits=yessort=fchela
1 t! }4 X6 ]- U; U6 P
! N; N& j1 A- Y1 {( q  5、查看生成的文件再设置sql_trace=false:
# ]+ K4 `) r* R  B- C7 l- I/ Y3 D- k9 n1 U
  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-6 01:13 , Processed in 0.078136 second(s), 26 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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