a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 61|回复: 0

[综合] Oracle综合辅导ITL等待

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
ITL等待
& @: |& }' O& W0 j) i    # Z6 a  Y( y3 a$ h
    发生等待的场景:+ D" J) b1 @, \8 ~
   
+ u5 t3 O: L9 ^' y% \& o5 f    1.超过maxtrans配置的最大ITL数
. B1 B, b# T$ P) P4 p4 u    9 c# G4 ^. G  ?) s! m
    2.initrans不足,没有足够的free space来扩展ITL& N3 {2 F) _2 t' D
   
8 C. j9 b6 v' @6 Z1 ~) {5 n/ F    解决方法:) R5 R& i( G+ W  V' g0 u
    : G; b7 @0 _7 y3 r& Y/ r6 D0 c
    1.maxtrans不足:这一情况是由高并发引起的:同一数据块上的事务量: z: Z0 @1 z( S/ p, B& ?8 K
   
% y- L$ `* r8 ^1 V3 W    已经超出了其实际允许的ITL数。因此,要解决这类问题就需要从应用着手,% Q" D* s( d3 o, v  j8 A
   
2 M% f% C! j& D% n    减少事务的并发量;长事务,在保证数据完整性的前提下,增加commit的频率,; M; B1 A; c! Y3 W0 |$ K1 V. M/ J
   
3 K9 K6 U' q0 u: b& l! R    修改为短事务,减少资源占用事件。而对于OLAP系统来说(例如,其存在高并发量3 @# Z" M8 ~+ E% @3 T" ]3 D9 Q
    & Q8 a- y/ p% a% O, k
    的数据录入模块),可以考虑增大数据块大小。5 o! L7 s! g# Y" S
    # ?! P! C  C2 D1 o  L
    2.initrans不足:数据块上的ITL数量并没有达到MAX TRANS的限制,( c% m# U( q- X) w7 g8 w* u
   
  T% |4 @3 o  i" A+ O( B    发生这种情况的表通常会被经常UPDATE,从而造成预留空间(PCTFREE)被填满。+ p8 N1 g2 @4 b" r9 j4 X
   
2 n! f0 r6 X) ^( L  c    如果我们发现这类ITL等待对系统已经造成影响,可以通过增加表的INITRANS或者0 J# h! f0 l; H! B
      o/ u7 T7 K5 h+ o. l( v2 s
    PCTFREE来解决(视该表上的并发事务量而定,通常,如果并发量高,建议优先增加
6 M/ G' [! B8 Q3 A" w! H9 {    7 ^6 x% y$ E4 ?' ]
    INITRANS,反之,则优先考虑增加PCTFREE)。3 s1 j. f% G; F# {1 g
   
( L( M$ k2 o; [& R" H    要注意的一点是,如果是使用ALTER TABLE的方式修改这2个参数的话,
& w7 X- R% Q* F% ~    6 J4 O5 Y! R0 m5 i7 ^: ]: `
    只会影响新的数据块,而不会改变已有数据的数据块--要做的这一点,需要将数据. u; ~8 R0 B" O1 ~* {
   
" Q9 U% [9 {) J+ i    导出/导入、重建表。, Y- B3 \5 f: P: f& U! {: L* a( O# z
    - f- l8 n2 E7 J  I8 E% D
    ITL重用后如何实现前ITL读一致性:
2 a1 ~* [; h5 _1 i7 w/ i   
% @; d+ Y7 n% L1 A& q+ F3 m( B    ORACLE通过ITL条目中记录的回滚段地址找到回滚段,实现读一致性,如果事务已提交,
4 f" C! |% O  i    6 m2 x- ~) }- Z# {0 K! c1 {
    ITL就可以被重用,但是若前一个ITL被重用,前一个ITL的读一致性是如何实现的呢?
( C+ ?) b6 X5 [- a    ' T3 o4 ~* ]$ d3 E4 `+ D. N% j7 o- X
    假定block只有一个itl,假定第一个事务的时候产生了 ITL-0) e, g2 v# E1 ^% y' M
    2 Z' H: j8 y3 _7 J' D7 u6 q: r! y  Y) D
    第二个事务来了,产生了 ITL-1 ,ITL-1 里面的UBA 可以找到回滚段地址,0 g3 e* d1 V: e1 r0 G
   
8 R1 e8 t/ X* q) I% A    回滚段中除了记录了 block用户数据的 before image 外还记录了 ITL-0 的信息。
! X% s! o! l! g   
( I& C( t( P& E- S1 E' J* D    第三个事务来了,产生了 ITL-2 , ITL-2 中 UBA 指向回滚段,# l# ?; E" ?% r' m1 V5 R: u, v
   
' n1 J/ J  m* ?    回滚段中也记录了 ITL-1 的信息。# T, N% L" H$ J7 o; T- K1 Q' Z
    % |, f  q+ i! Y/ M% w
    这样当一个查询若需要ITL-0时候的信息,则找到当前block,发现是 ITL-2 ,
( b0 Q3 O5 x% x  p9 i8 u  Y   
7 o, m7 e) `# u1 w+ `6 _    根据UBA找到回滚段进行 roll 得到 变化前 block ,这个时候发现block中是 ITL-1 .% ~9 ]7 ?. r0 K! @+ R
    1 a* i' m5 {1 P& y# N; ~
    还不能满足需求。 于是再根据 ITL-1 中的 UBA 又去回滚段中找到数据来进行roll,
4 h% K, K/ Y' t5 M3 q' ?# {   
* }8 a8 B" m) Q& ^6 p    得到一个block 数据,这个时候block中就有了 ITL-0.
; v! v6 o0 _' K- p/ S" b   
6 e, J' ?' j* ?, K# E    通过根据当前ITL进行递归的方式找到数据,实现之前ITL的独一致性。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 03:21 , Processed in 0.250881 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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