a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 208|回复: 2

[其他] Oracle认证:UNDO机制详解

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
Oracle绝对禁止也述用户查看另一个用户未提交的事务数据。     启动一个DML事务时,已改削数据的象前版本被缓存在database buffer cache,再有一个缓冲副本被写入一个回退段(undo segment)上。
4 p% y8 O" i7 Y# m) h; t1 h% Z    Undo segment三个主要目的:( N6 p- R- W  v8 D( }' f8 h
    1用户发布rollback呼吁,则可用来恢复数据原状况。
1 L, p6 e# Z" n( }    2其他用户访谒DML用户发布commit前的原数据,则供给一个已改削数据的读一致性视图。+ C) U; Y& ^$ F' g5 ?% h
    3在实例恢复时代,用来rollback一个在实例故障刚发生前进行的未提交的事务。
2 h* o# D7 P) ^: E* `. |    回滚段由规模组成,这个规模由5个或5个以上的Oracle块组成。
8 s& F. d+ F% R6 Z9 Q7 B; y8 o4 a    回滚段工作体例:/ B' [2 a* l' T: E! {
    1在一个回滚段内,以环形体例轮回使用规模,直到段装满。由用户的commit或rollback呼吁发布后释放回滚段内典型围。
/ r; s+ X9 ], G! \    2统一个undo segment可以存储良多个像前版本,同时,一个像前版本只会存储在一个undo segment而不会因空间等任何问题毗连到其他undo segment。
) {; O( ~, Y, s4 o& `' h    3如不美观一个undo segment中的一个规模启动了一个事务的像前版本,且逐渐增添装满了该规模,此时会环抱到下矣闽临近典型围继续使用空间,此时如不美观下矣闽临近规模已经被其他事务占领,则绝对不会跳过该临近规模查找其他可用规模,而是会在这个规模之间建树一个新典型围来使用。
/ A- z6 y( [! _" L# b2 ^    4一个undo segment能措置的事务个数,取决于Oracle块巨细。
9 X" ^- A# \. }7 s5 c    5每个数据库都至少有一个回滚段(系统回滚段),一旦建树了其他回滚段,则该回滚段将只用于措置数据目录读一致性和事务节制。
; [2 a; P4 O% Q) c4 W    6set transaction use rollback segment呼吁可以申请一个指定的回滚段。  w' X# L- @6 D& w% X$ Z
    7LOB列不使用undo segment,而使用建树时分配给表的空间来存储像前版本。
% Q: ~; ^- V; [2 z3 H- T$ y, |0 l    5.5.1  测量UNDO I/O机能
* L: U2 k0 s" z4 O0 x2 t! M# D% t1 T. x/ x/ s8 }) X3 {$ J
    5.5.1.1undo segment头部的争用
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:07 | 显示全部楼层

Oracle认证:UNDO机制详解

</p>    Oracle 使用undo segment头部块一一个事务表来跟踪使用他的那些事务,其内容凡是被缓存在database buffer cache中以便被搜索。OLTP上很有可能会因为访谒这个头部发生期待。
! i0 T) t. q2 |# P    SQL> select event,total_waits,time_waited,average_wait0 ^# r/ C2 Q3 r) `0 q
    from v$system_event where event like '%undo%' and event like '%slot%';7 k. N( q% v# n5 ?
    average_wait:平均每毫秒期待的次数,等于0或接近于0最好。
5 [5 ]" v- u) b) p; y    SQL>select class,count from v$waitstat
, C  ?! [$ n1 L$ v2 H+ D" ]- S    where class in ('undo header','system undo header');
) x" X9 ?  ~0 s) h    count:期待访谒undo segment头部的次数。理想情形下,该值等于0或接近于0最好。7 U# j# A' P/ T8 W3 q. r
    SQL>select n.name,s.usn,
' G9 t' v# @2 W" E3 ~8 O    decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio"6 Z6 r! A4 z4 D* h  u0 {$ m$ d
    from v$rollstat s,v$rollname n2 A) T: @  M# C( g
    where s.usn = n.usn( Q5 Z: z$ `( @. u
    order by usn;
' w! _2 O5 G9 V/ I, l* `    RBS Header Get Ratio:等于1或接近1最好,至少为95%。
( Q+ Q/ l' z7 T" j( j    5.5.1.2        undo segment规模的争用
4 _- _' ?# j- ~  U9 D' X$ C    SQL>select class,count from v$waitstat) g4 v9 ~% V6 ^  V: }( b
    where class ='system undo block' ;1 J+ I' D/ |9 {- r3 T2 p4 W
    count:系统回滚段典型围的块争用次数9 N/ x- q* I+ L8 {$ s* [, E
    SQL>select w.count,w.count/s.value as wait_ratio from v$waitstat w,v$sysstat s% G9 p" O6 |  s) Q* n  P
    where w.class = 'undo block'
0 J2 A/ e" v" h3 X    and s.name = 'consistent gets';% q! m3 ?. m/ U5 t
    count:非系统回滚段典型围的块争用次数
% s" u" T! }, |# O9 ~. M& I+ H, F    wait_ratio:回滚期待率,如不美观跨越1%,则需要调整了。* b: u! i' G. z, y6 B
    5.5.1.3        undo segment的环抱
9 m) a4 E7 v0 v% c+ W( {1 d    SQL> select n.name,s.usn," P# i* u) c! y+ l7 N
    decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps
% ~0 n' p; Y; W8 J. P! d  V; h    from v$rollstat s,v$rollname n
: j- n1 V. O2 O' ~    where s.usn = n.usn
& i, {( j) t0 U" z: }    order by usn;
( n' l! a* _) p' R. V    s.wraps:该回滚段被环抱到下矣闽规模的次数。次数太多暗示段规模可能太小。
2 \9 y$ z9 u& _2 r. q& K    5.5.1.4        undo segment的动态规模分配3 {# c" q; O0 q) j
    事务的像前版本在undo segment中发生环抱,而下矣闽规模已经分配给其他事务的像前版本,此时会在他们之间动态建树一个规模来给该事务的像前版本环抱。应避免以削减I/O。
$ K. D, w/ w# ^1 ?. u4 i8 v    SQL> select event,total_waits,time_waited,average_wait
; f) y) w" o0 y5 p' {    from v$system_event where event = 'undo segment extension';
) l/ G$ V. B% p) x3 R    time_waited:暗示动态分配的期待次数。若值很高或不竭增添,声名undo segment太少或太小。( `' h) G2 _& P, Q
    SQL>select n.name,s.usn,s.extends,$ W& e( S- {3 s6 X, ~7 E8 \
    decode(s.waits,0,1,1-(s.waits/s.gets)) "RBS Header Get Ratio",s.wraps
! T1 @8 |+ \, l0 @    from v$rollstat s,v$rollname n
( @$ G' b) m3 y' M7 u' w    where s.usn = n.usn: U/ L. R' {/ {  N1 Y
    order by usn;8 }% r+ c- F" s1 E# R0 ?8 J* q

% M+ x% B8 _6 l+ R    s.extends:被冻┈添加典型围数。若经常发活跃态添加,则声名undo segment可能太小。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:08 | 显示全部楼层

Oracle认证:UNDO机制详解

</p>    5.5.2        优化undo segment
; e9 n0 D% N# ^) w    优化方针:
8 l; }' w/ M2 y  |4 |1 W% j" \    1)        用户不用期待,就始终可找到undo segment来使用。& f  o1 [7 P8 ]8 W! [
    2)        用户始终能获得完成事务所需要的读一致性视图。7 ?" V$ ?: P0 u8 _$ J3 y
    3)        回滚段不会引起过多的I/O。4 o6 s. L3 f, m3 U
    一般就是:9 X1 c+ E4 r; g( ^; f! Q
    1)        消弭对undo segment header或block的争用。
+ }5 U$ Z' f3 Y6 n! O" P* d4 X    2)        尽量最小化undo segment的扩充和环抱。) p. A9 z; H' |# \5 X
    3)        避免undo segment用尽。
6 c# `0 T5 \7 @6 f    4)        始终拥有为用户供给一致性视图的undo segment。
% ]8 C0 I8 T! ^6 R0 {. v6 y' H    做法:, o/ e$ C0 c" u- K
    1)        添加更多的undo segment 。3 o. G2 m* U. M* H# k
    2)        增大现有undo segment。
8 `4 k7 }) r3 t- u    3)        明晰打点大事务的undo segment。+ D0 u- ^; {+ p7 ~0 _$ b; ]+ T* H
    4)        undo segment需求最小化。. |, \0 J6 q9 Q+ X2 |: j
    5)        使用自动打点功能。
( }2 _0 L% x+ I: D! J    5.5.2.1        增添更多的undo segment
5 {% B3 v: \0 O! |6 ]/ F1 e3 t    最好把新添加的undo segment放在此外的磁盘的表空间内。对undo要求最多的是delete,其次是update,最后是insert。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-2 04:34 , Processed in 0.245986 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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