HelloDBA [English]
搜索Internet 搜索 HelloDBABA
  Oracle技术站。email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com   acoug  acoug 

B*Tree 索引中的数据块分裂——分裂事务控制

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2009-10-15 06:31:44

分享到  新浪微博 腾讯微博 人人网 i贴吧 开心网 豆瓣 淘宝 推特 Facebook GMail Blogger Orkut Google Bookmarks

    索引分裂是导致分裂的用户事务中调用的递归事务控制,其对资源的请求和释放都是在该递归事务中完成的。

    在任何一块枝节点数据块上,有且只有一个ITL slot,这个ITL slot不是被用于用户事务(User Transaction)的,而是被用于发生分裂时的递归事务的。同样,在叶子节点上,第一ITL slot,也是用于此目的:

SQL代码
  1. HELLODBA.COM> truncate table idx_split;   
  2.   
  3. Table truncated.   
  4.   
  5. HELLODBA.COM> conn demo/demo   
  6. Connected.   
  7. HELLODBA.COM> alter session set events '10224 trace name context forever,level 1';   
  8.   
  9. Session altered.   
  10.   
  11. HELLODBA.COM> begin  
  12.   2     for i in 1..100   
  13.   3     loop   
  14.   4         insert into idx_split (a, b, c) values (i*3, lpad('A', 100, 'A'), sysdate);   
  15.   5     end loop;   
  16.   6  end;   
  17.   7  /   
  18.   
  19. PL/SQL procedure successfully completed.   
  20.   
  21. HELLODBA.COM> alter session set events 'immediate trace name treedump level 199127';   
  22.   
  23. Session altered.   
  24.   
  25. HELLODBA.COM> alter system dump datafile 15 block min 1035 block max 1039;   
  26.   
  27. System altered.   
  28.   
  29. HELLODBA.COM> conn demo/demo   
  30. Connected.   
  31. HELLODBA.COM> alter system dump datafile 15 block 1029;   
  32.   
  33. System altered.  

    我们将叶子节点和枝节点Dump出来,可以看到叶子节点的第一条ITL slot和枝节点的ITL slot不同于用户事务(叶子节点上第二条)的ITL slot:

SQL代码
  1. --叶子节点:   
  2. ...   
  3.  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc   
  4. 0x01   0x00ab.022.00000207  0x0082ee89.00ab.05  -BU-    1  fsc 0x0000.b1859b20   
  5. 0x02   0x00ab.001.00000205  0x00812f10.00aa.20  ----   15  fsc 0x0000.00000000   
  6. ...   
  7.  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc   
  8. 0x01   0x00ab.008.00000208  0x0082ee89.00ab.09  -BU-    1  fsc 0x0000.b1859b22   
  9. 0x02   0x00ab.001.00000205  0x0082ee8a.00ab.02  ----   15  fsc 0x0000.00000000   
  10. ...   
  11.  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc   
  12. 0x01   0x00ab.008.00000208  0x0082ee89.00ab.0a  CB--    0  scn 0x0000.b1859b22   
  13. 0x02   0x00ab.001.00000205  0x0082ee8a.00ab.16  ----   10  fsc 0x0000.00000000   
  14. --枝节点:   
  15.  Itl           Xid                  Uba         Flag  Lck        Scn/Fsc   
  16. 0x01   0x00ab.008.00000208  0x0082ee89.00ab.0b  C---    0  scn 0x0000.b1859b22  

    注意:也许你注意到了上述例子中,最后2个叶子节点的递归事务ITL与枝节点的递归事务ITL相同。实际上,这就是在分裂时被“继承”下来的,而最后一个叶子节点因为还没有发生分裂,实际上也没有产生新的递归事务。

    --- Fuyuncat TBC ---

Top

Copyright ©2005,HelloDBA.Com 保留一切权利

申明
by fuyuncat