ASSM三级位图结构与高水位的探究(上)

    ASSM三级位图结构与高水位的探究
    Oracle9i在本地表空管理(LMT)的基础上,对段空间管理也引入了位图管理(Segment Space Management Auto)来取代原来的freelist管理方式(Segment Space Management Manual)。
但是默认system和undo表空间仍然是MSSM的管理方式,本文主要探究ASSM管理方式下,段的三级位图结构和高水位推进的关系 先来看
ASSM管理方式下的三级位图结构图:

注:此图来源于网络
    一个段被创建之后,段头其实是一个L3块,在我的试验中,一个1M固定区大小,block为8K的表空间,创建的第一个段第0个区,前两个块是L1(128,129号块),第三个是L2(130号块),第四个是L3(131号块),前128个块是数据文件头,本文不讨论。
    当数据被插入的时候,oracle根据连接进来的session,做hash运算,随机选择一个L3(如果有多个的话),再随机选择一个L2,接下来在该L2下随机选择一个L1,再从L1中管理的block里面随机选择一个块将数据插入,不同的session经过hash之后,最后落到block时已经是很分散的了,不会产生很多和会话同时往一个block中插数据申请独占buffer pin,而造成大量buffer busy waits的情况,这就是ASSM号称支持大并发插入的原理所在,但是事实上真的如此么?我们来一探究竟!

    实验环境:
    OS:REDHAT6.5 X64
    DB VERSION:11.2.0.4
    首先,创建一个1M区大小的表空间,并在上面创建一张表,此表创建了4个空间很大的字段,目的是要一行占满一个block,便于观察结果

    

  1. SQL> select file#,NAME,BYTES/1024/1204 from v$datafile;

  2.      FILE# NAME BYTES/1024/1204
  3. ---------- -------------------------------------------------------------------------------- ---------------
  4.          1 +DATA/min/datafile/system.256.854775095 637.873754
  5.          2 +DATA/min/datafile/sysaux.257.854775097 484.784053
  6.          3 +DATA/min/datafile/undotbs1.258.854775097 187.109635
  7.          4 +DATA/min/datafile/users.259.854775097 103.122924
  8.          
  9. SQL> create tablespace lp datafile '+DATA/min/datafile/lp.dbf' size 2048M uniform size 1m;

  10. Tablespace created.

  11. SQL> select file#,NAME,BYTES/1024/1204 from v$datafile;

  12.      FILE# NAME BYTES/1024/1204
  13. ---------- -------------------------------------------------------------------------------- ---------------
  14.          1 +DATA/min/datafile/system.256.854775095 637.873754
  15.          2 +DATA/min/datafile/sysaux.257.854775097 484.784053
  16.          3 +DATA/min/datafile/undotbs1.258.854775097 187.109635
  17.          4 +DATA/min/datafile/users.259.854775097 103.122924
  18.          5 +DATA/min/datafile/lp.dbf 1741.8206
  19.          
  20. SQL> create table lp (id number,des1 char(2000),des2 char(2000),des3 char(2000),des4 char(500)) tablespace lp;

  21. Table created.
    观察新建的表所占区

  1. SQL> col SEGMENT_NAME for a30
  2. SQL> col des1 for a1
  3. SQL> col des2 for a1
  4. SQL> col des3 for a1
  5. SQL> col des4 for a1
  6. SQL> set line 200
  7. SQL> select SEGMENT_NAME,EXTENT_ID,FILE_ID,BLOCK_ID, BLOCKS from dba_extents where segment_name='LP';

  8. SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BLOCKS
  9. ------------------------------ ---------- ---------- ---------- ----------
  10. LP 0 5 128 128
    此表是5号文件,拥有1个区,block从128号开始,接下来我们插入一条数据,并dump出段头进行观察

  1. SQL> insert into lp values(1,'a','a','a','a');

  2. 1 row created.

  3. SQL> commit;

  4. Commit complete.

  5. SQL> select segment_name ,HEADER_FILE,HEADER_BLOCK from dba_segments where segment_name='LP';

  6. SEGMENT_NAME HEADER_FILE HEADER_BLOCK
  7. ------------------------------ ----------- ------------
  8. LP 5 131


  9. SQL> alter system checkpoint;

  10. System altered.
LP的段头是5号文件,131号块,进行dump

  1. SQL> alter system dump datafile 5 block 131;

  2. SQL> col value for a65
  3. SQL> select * from v$diag_info;

  4.    INST_ID NAME VALUE
  5. ---------- -------------------------------------------------------------------------------- -----------------------------------------------------------------
  6.          1 Diag Enabled TRUE
  7.          1 ADR Base /u01/app/oracle
  8.          1 ADR Home /u01/app/oracle/diag/rdbms/min/min
  9.          1 Diag Trace /u01/app/oracle/diag/rdbms/min/min/trace
  10.          1 Diag Alert /u01/app/oracle/diag/rdbms/min/min/alert
  11.          1 Diag Incident /u01/app/oracle/diag/rdbms/min/min/incident
  12.          1 Diag Cdump /u01/app/oracle/diag/rdbms/min/min/cdump
  13.          1 Health Monitor /u01/app/oracle/diag/rdbms/min/min/hm
  14.          1 Default Trace File /u01/app/oracle/diag/rdbms/min/min/trace/min_ora_2835.trc
  15.          1 Active Problem Count 0
  16.          1 Active Incident Count 0

  17. 11 rows selected.

观察trc文件 min_ora_2835 . trc

  1. Block dump from disk:
  2. buffer tsn: 8 rdba: 0x01400083 (5/131)
  3. scn: 0x0000.00140d51 seq: 0x01 flg: 0x04 tail: 0x0d512301
  4. frmt: 0x02 chkval: 0xfd8a type: 0x23=PAGETABLE SEGMENT HEADER
  5. Hex dump of block: st=0, typ_found=1
  6. Extent Control Header
  7. -----------------------------------------------------------------
  8. Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 128
  9. last map 0x00000000 #maps: 0 offset: 2716
  10. Highwater:: 0x014000c0 ext#: 0 blk#: 64 ext size: 128
  11. #blocks in seg. hdr's freelists: 0
  12. #blocks below: 60
  13. mapblk 0x00000000 offset: 0
  14. Unlocked
  15. --------------------------------------------------------
  16. Low HighWater Mark :
  17. Highwater:: 0x01400084 ext#: 0 blk#: 4 ext size: 128
  18. #blocks in seg. hdr's freelists: 0
  19. #blocks below: 0
  20. mapblk 0x00000000 offset: 0
  21. Level 1 BMB for High HWM block: 0x01400080
  22. Level 1 BMB for Low HWM block: 0x01400080
  23. --------------------------------------------------------
  24. Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0
  25. L2 Array start offset: 0x00001434
  26. First Level 3 BMB: 0x00000000
  27. L2 Hint for inserts: 0x01400082
  28. Last Level 1 BMB: 0x01400081
  29. Last Level II BMB: 0x01400082
  30. Last Level III BMB: 0x00000000
  31. Map Header:: next 0x00000000 #extents: 1 obj#: 87596 flag: 0x10000000
  32. Inc # 0
  33. Extent Map
  34. -----------------------------------------------------------------
  35. 0x01400080 length: 128
  36. Auxillary Map
  37. --------------------------------------------------------
  38. Extent 0 : L1 dba: 0x01400080 Data dba: 0x01400084
  39. --------------------------------------------------------
  40. Second Level Bitmap block DBAs
  41. --------------------------------------------------------
  42. DBA 1: 0x01400082
  43. End dump data blocks tsn: 8 file#: 5 minblk 131 maxblk 131

很容易发现这是一个PAGETABLE SEGMENT HEADER块,Extent Map中只有一个区,另外在尾部有一个指向二级位图块的地址0x01400082,这是数据块地址的二进制用十六进制来表示,我们来将其转化成直观一点的信息

  1. SQL> select dbms_utility.data_block_address_file(to_number('01400082', 'xxxxxxxx')) file#,
  2.   2 dbms_utility.data_block_address_block(to_number('01400082', 'xxxxxxxx')) block#
  3.   3 from dual;

  4.      FILE# BLOCK#
  5. ---------- ----------
  6.          5 130

依样将5号文件130号块的内容dump出来

  1. Block dump from disk:
  2. buffer tsn: 8 rdba: 0x01400082 (5/130)
  3. scn: 0x0000.00140a45 seq: 0x02 flg: 0x04 tail: 0x0a452102
  4. frmt: 0x02 chkval: 0xd119 type: 0x21=SECOND LEVEL BITMAP BLOCK
  5. Hex dump of block: st=0, typ_found=1
  6. Dump of Second Level Bitmap Block
  7. number: 2 nfree: 2 ffree: 0 pdba: 0x01400083
  8. Inc #: 0 Objd: 87596
  9. opcode:0
  10. xid:
  11. L1 Ranges :
  12. --------------------------------------------------------
  13. 0x01400080 Free: 5 Inst: 1
  14. 0x01400081 Free: 5 Inst: 1
  15. --------------------------------------------------------
  16. End dump data blocks tsn: 8 file#: 5 minblk 130 maxblk 130

可以发现这是一个二级位图块,并从其中找到了2个L1块的地址,我们来看第一个L1

  1. Block dump from disk:
  2. buffer tsn: 8 rdba: 0x01400080 (5/128)
  3. scn: 0x0000.00140d51 seq: 0x03 flg: 0x04 tail: 0x0d512003
  4. frmt: 0x02 chkval: 0xe697 type: 0x20=FIRST LEVEL BITMAP BLOCK
  5. Hex dump of block: st=0, typ_found=1
  6. DBA Ranges :
  7. --------------------------------------------------------
  8. 0x01400080 Length: 64 Offset: 0
  9. 0:Metadata 1:Metadata 2:Metadata 3:Metadata
  10. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  11. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  12. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  13. 16:75-100% free 17:75-100% free 18:75-100% free 19:75-100% free
  14. 20:75-100% free 21:75-100% free 22:75-100% free 23:75-100% free
  15. 24:75-100% free 25:75-100% free 26:75-100% free 27:75-100% free
  16. 28:75-100% free 29:75-100% free 30:75-100% free 31:0-25% free
  17. 32:unformatted 33:unformatted 34:unformatted 35:unformatted
  18. 36:unformatted 37:unformatted 38:unformatted 39:unformatted
  19. 40:unformatted 41:unformatted 42:unformatted 43:unformatted
  20. 44:unformatted 45:unformatted 46:unformatted 47:unformatted
  21. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  22. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  23. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  24. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  25. --------------------------------------------------------
  26. End dump data blocks tsn: 8 file#: 5 minblk 128 maxblk 128

无疑这是一个L1块,里面挂了64个数据块,因为我之前插入了一行数据,oracle已经格式化了一部分,并向其中一个块插入了数据,但是没达到我们的效果,被插入的块还显示0-25%的空闲,我们要的是full的状态,说明我们构造的数据不够大,没关系,我们修改一下pctfree就可以了,另外我们可以发现这个区是1M,有2个L1,每个L1里有64个数据块,接下来修改pctfree

  1. SQL> alter table lp pctfree 24;

  2. Table altered.

  3. SQL> select TABLE_NAME,PCT_FREE from dba_tables where table_name='LP';

  4. TABLE_NAME PCT_FREE
  5. ------------------------------ ----------
  6. LP 24

  7. SQL> insert into lp values(2,'a','a','a','a');

  8. 1 row created.

  9. SQL> commit;

  10. Commit complete.
 --手动触发检查点将内存中的块刷新到磁盘,本文每次dump之前都会做这个操作,以保证磁盘和内存的内容一致
  1. SQL> alter system checkpoint;

  2. System altered.

我们再看128号块

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x01400080 Length: 64 Offset: 0
  4. 0:Metadata 1:Metadata 2:Metadata 3:Metadata
  5. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  6. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  7. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  8. 16:75-100% free 17:75-100% free 18:75-100% free 19:75-100% free
  9. 20:75-100% free 21:75-100% free 22:75-100% free 23:75-100% free
  10. 24:75-100% free 25:75-100% free 26:75-100% free 27:75-100% free
  11. 28:75-100% free 29:75-100% free 30:75-100% free 31:0-25% free
  12. 32:75-100% free 33:75-100% free 34:75-100% free 35:FULL
  13. 36:75-100% free 37:75-100% free 38:75-100% free 39:75-100% free
  14. 40:75-100% free 41:75-100% free 42:75-100% free 43:75-100% free
  15. 44:75-100% free 45:75-100% free 46:75-100% free 47:75-100% free
  16. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  17. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  18. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  19. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  20. --------------------------------------------------------
  21. End dump data blocks tsn: 8 file#: 5 minblk 128 maxblk 128
已经使我们想的结果了,到这里我们再来看一下另外一个L1吧,dump129号块

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x014000c0 Length: 64 Offset: 0
  4. 0:unformatted 1:unformatted 2:unformatted 3:unformatted
  5. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  6. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  7. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  8. 16:unformatted 17:unformatted 18:unformatted 19:unformatted
  9. 20:unformatted 21:unformatted 22:unformatted 23:unformatted
  10. 24:unformatted 25:unformatted 26:unformatted 27:unformatted
  11. 28:unformatted 29:unformatted 30:unformatted 31:unformatted
  12. 32:unformatted 33:unformatted 34:unformatted 35:unformatted
  13. 36:unformatted 37:unformatted 38:unformatted 39:unformatted
  14. 40:unformatted 41:unformatted 42:unformatted 43:unformatted
  15. 44:unformatted 45:unformatted 46:unformatted 47:unformatted
  16. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  17. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  18. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  19. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  20. --------------------------------------------------------
  21. End dump data blocks tsn: 8 file#: 5 minblk 129 maxblk 129

全是未格式化的块,试一试并发插入,这里不模拟真正的并发了,只是开不同的session来进行插入


  1. SQL> insert into lp values(3,'a','a','a','a');

  2. 1 row created.

  3. SQL> insert into lp values(4,'a','a','a','a');

  4. 1 row created.

  5. SQL> insert into lp values(5,'a','a','a','a');

  6. 1 row created.

  7. SQL> insert into lp values(6,'a','a','a','a');

  8. 1 row created.

  9. SQL> insert into lp values(7,'a','a','a','a');

  10. 1 row created.

  11. 单独session5条

  12. SQL> select dbms_rowid.ROWID_RELATIVE_FNO(rowid),dbms_rowid.ROWID_BLOCK_NUMBER(rowid) from lp;

  13. DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)
  14. ------------------------------------ ------------------------------------
  15.                                    5 158
  16.                                    5 159
  17.                                    5 163
  18.                                    5 167
  19.                                    5 171
  20.                                    5 172
  21.                                    5 174
  22.                                    5 175
  23.                                    5 179
  24.                                    5 183
  25.                                    5 187
  26.                                    5 191

  27. 12 rows selected.

一个单独的session里插入了5条,另外5个单独的session里各插一条,发现规律了么,插入的块只在132和192之间,我们分别看看两个L1

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x01400080 Length: 64 Offset: 0
  4. 0:Metadata 1:Metadata 2:Metadata 3:Metadata
  5. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  6. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  7. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  8. 16:75-100% free 17:75-100% free 18:75-100% free 19:75-100% free
  9. 20:75-100% free 21:75-100% free 22:75-100% free 23:75-100% free
  10. 24:75-100% free 25:75-100% free 26:75-100% free 27:75-100% free
  11. 28:75-100% free 29:75-100% free 30:FULL 31:0-25% free
  12. 32:75-100% free 33:75-100% free 34:75-100% free 35:FULL
  13. 36:75-100% free 37:75-100% free 38:75-100% free 39:FULL
  14. 40:75-100% free 41:75-100% free 42:75-100% free 43:FULL
  15. 44:FULL 45:75-100% free 46:FULL 47:FULL
  16. 48:75-100% free 49:75-100% free 50:75-100% free 51:FULL
  17. 52:75-100% free 53:75-100% free 54:75-100% free 55:FULL
  18. 56:75-100% free 57:75-100% free 58:75-100% free 59:FULL
  19. 60:75-100% free 61:75-100% free 62:75-100% free 63:FULL
  20. --------------------------------------------------------
  21. End dump data blocks tsn: 8 file#: 5 minblk 128 maxblk 128

  22. 看一下第二个L1
  23. DBA Ranges :
  24. --------------------------------------------------------
  25. 0x014000c0 Length: 64 Offset: 0
  26. 0:unformatted 1:unformatted 2:unformatted 3:unformatted
  27. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  28. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  29. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  30. 16:unformatted 17:unformatted 18:unformatted 19:unformatted
  31. 20:unformatted 21:unformatted 22:unformatted 23:unformatted
  32. 24:unformatted 25:unformatted 26:unformatted 27:unformatted
  33. 28:unformatted 29:unformatted 30:unformatted 31:unformatted
  34. 32:unformatted 33:unformatted 34:unformatted 35:unformatted
  35. 36:unformatted 37:unformatted 38:unformatted 39:unformatted
  36. 40:unformatted 41:unformatted 42:unformatted 43:unformatted
  37. 44:unformatted 45:unformatted 46:unformatted 47:unformatted
  38. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  39. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  40. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  41. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  42. --------------------------------------------------------
  43. End dump data blocks tsn: 8 file#: 5 minblk 129 maxblk 129


这说明只在第一个L1里面随机,那为什么L2下挂了2个L1,我插入了10条却没有一条随机到第二个L1块呢?答案是高水位,这是vage大师已经论证过的了,偶在这里仅为见证一下~~,好了,还记得L3里的高水位信息么?

  1. Extent Control Header
  2. -----------------------------------------------------------------
  3. Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 128
  4. last map 0x00000000 #maps: 0 offset: 2716
  5. Highwater:: 0x014000c0 ext#: 0 blk#: 64 ext size: 128
  6. #blocks in seg. hdr's freelists: 0
  7. #blocks below: 60
  8. mapblk 0x00000000 offset: 0
  9. Unlocked

Highwater::  0x014000c0是那个块呢?

  1. SQL> select dbms_utility.data_block_address_file(to_number('014000c0', 'xxxxxxxx')) file#,
  2.   2 dbms_utility.data_block_address_block(to_number('014000c0', 'xxxxxxxx')) block#
  3.   3 from dual;

  4.      FILE# BLOCK#
  5. ---------- ----------
  6.          5 192
这是第二个L1管理的第一个块,可见数据的插入只在高水位之下进行(直接路径插入除外),此时的状态如下:


那么L1里面只会有64个块么?高水位永远都会指向L1的最后一个块么?我们继续剖析!

首先给LP表多分配一些区

  1. SQL> alter table lp allocate extent(size 100m);

  2. Table altered.

  3. SQL> select SEGMENT_NAME,EXTENT_ID,FILE_ID,BLOCK_ID, BLOCKS from dba_extents where segment_name='LP';

  4. SEGMENT_NAME EXTENT_ID FILE_ID BLOCK_ID BLOCKS
  5. ------------------------------ ---------- ---------- ---------- ----------
  6. LP 0 5 128 128
  7. LP 1 5 256 128
  8. LP 2 5 384 128
  9. LP 3 5 512 128
  10. LP 4 5 640 128
  11. LP 5 5 768 128
  12. LP 6 5 896 128
  13. LP 7 5 1024 128
  14. LP 8 5 1152 128
  15. LP 9 5 1280 128
  16. LP 10 5 1408 128
  17. LP 11 5 1536 128
  18. LP 12 5 1664 128
  19. LP 13 5 1792 128
  20. LP 14 5 1920 128
  21. LP 15 5 2048 128
  22. LP 16 5 2176 128
  23. LP 17 5 2304 128
  24. LP 18 5 2432 128
  25. LP 19 5 2560 128
  26. LP 20 5 2688 128
  27. LP 21 5 2816 128
  28. LP 22 5 2944 128
  29. LP 23 5 3072 128
  30. LP 24 5 3200 128
  31. LP 25 5 3328 128
  32. LP 26 5 3456 128
  33. LP 27 5 3584 128
  34. LP 28 5 3712 128
  35. LP 29 5 3840 128
  36. LP 30 5 3968 128
  37. LP 31 5 4096 128
  38. LP 32 5 4224 128
  39. LP 33 5 4352 128
  40. LP 34 5 4480 128
  41. LP 35 5 4608 128
  42. LP 36 5 4736 128
  43. LP 37 5 4864 128
  44. LP 38 5 4992 128
  45. LP 39 5 5120 128
  46. LP 40 5 5248 128
  47. LP 41 5 5376 128
  48. LP 42 5 5504 128
  49. LP 43 5 5632 128
  50. LP 44 5 5760 128
  51. LP 45 5 5888 128
  52. LP 46 5 6016 128
  53. LP 47 5 6144 128
  54. LP 48 5 6272 128
  55. LP 49 5 6400 128
  56. LP 50 5 6528 128
  57. LP 51 5 6656 128
  58. LP 52 5 6784 128
  59. LP 53 5 6912 128
  60. LP 54 5 7040 128
  61. LP 55 5 7168 128
  62. LP 56 5 7296 128
  63. LP 57 5 7424 128
  64. LP 58 5 7552 128
  65. LP 59 5 7680 128
  66. LP 60 5 7808 128
  67. LP 61 5 7936 128
  68. LP 62 5 8064 128
  69. LP 63 5 8192 128
  70. LP 64 5 8320 128
  71. LP 65 5 8448 128
  72. LP 66 5 8576 128
  73. LP 67 5 8704 128
  74. LP 68 5 8832 128
  75. LP 69 5 8960 128
  76. LP 70 5 9088 128
  77. LP 71 5 9216 128
  78. LP 72 5 9344 128
  79. LP 73 5 9472 128
  80. LP 74 5 9600 128
  81. LP 75 5 9728 128
  82. LP 76 5 9856 128
  83. LP 77 5 9984 128
  84. LP 78 5 10112 128
  85. LP 79 5 10240 128
  86. LP 80 5 10368 128
  87. LP 81 5 10496 128
  88. LP 82 5 10624 128
  89. LP 83 5 10752 128
  90. LP 84 5 10880 128
  91. LP 85 5 11008 128
  92. LP 86 5 11136 128
  93. LP 87 5 11264 128
  94. LP 88 5 11392 128
  95. LP 89 5 11520 128
  96. LP 90 5 11648 128
  97. LP 91 5 11776 128
  98. LP 92 5 11904 128
  99. LP 93 5 12032 128
  100. LP 94 5 12160 128
  101. LP 95 5 12288 128
  102. LP 96 5 12416 128
  103. LP 97 5 12544 128
  104. LP 98 5 12672 128
  105. LP 99 5 12800 128
  106. LP 100 5 12928 128

我分配了100个区,加上原来的一共101个,现在我们看看L3段头里面的内容

  1. Extent Control Header
  2. -----------------------------------------------------------------
  3. Extent Header:: spare1: 0 spare2: 0 #extents: 101 #blocks: 12928
  4. last map 0x00000000 #maps: 0 offset: 2716
  5. Highwater:: 0x014000c0 ext#: 0 blk#: 64 ext size: 128
  6. #blocks in seg. hdr's freelists: 0
  7. #blocks below: 60
  8. mapblk 0x00000000 offset: 0
  9. Extent Map
  10. -----------------------------------------------------------------
  11. 0x01400080 length: 128
  12. 0x01400100 length: 128
  13. 0x01400180 length: 128
  14. 0x01400200 length: 128
  15. 0x01400280 length: 128
  16. 0x01400300 length: 128
  17. 0x01400380 length: 128
  18. 0x01400400 length: 128
  19. 0x01400480 length: 128
  20. 0x01400500 length: 128
  21. 0x01400580 length: 128
  22. 0x01400600 length: 128
  23. 0x01400680 length: 128
  24. 0x01400700 length: 128
  25. 0x01400780 length: 128
  26. 0x01400800 length: 128
  27. 0x01400880 length: 128
  28. 0x01400900 length: 128
  29. 0x01400980 length: 128
  30. 0x01400a00 length: 128
  31. 0x01400a80 length: 128
  32. 0x01400b00 length: 128
  33. 0x01400b80 length: 128
  34. 0x01400c00 length: 128
  35. 0x01400c80 length: 128
  36. 0x01400d00 length: 128
  37. 0x01400d80 length: 128
  38. 0x01400e00 length: 128
  39. 0x01400e80 length: 128
  40. 0x01400f00 length: 128
  41. 0x01400f80 length: 128
  42. 0x01401000 length: 128
  43. 0x01401080 length: 128
  44. 0x01401100 length: 128
  45. 0x01401180 length: 128
  46. 0x01401200 length: 128
  47. 0x01401280 length: 128
  48. 0x01401300 length: 128
  49. 0x01401380 length: 128
  50. 0x01401400 length: 128
  51. 0x01401480 length: 128
  52. 0x01401500 length: 128
  53. 0x01401580 length: 128
  54. 0x01401600 length: 128
  55. 0x01401680 length: 128
  56. 0x01401700 length: 128
  57. 0x01401780 length: 128
  58. 0x01401800 length: 128
  59. 0x01401880 length: 128
  60. 0x01401900 length: 128
  61. 0x01401980 length: 128
  62. 0x01401a00 length: 128
  63. 0x01401a80 length: 128
  64. 0x01401b00 length: 128
  65. 0x01401b80 length: 128
  66. 0x01401c00 length: 128
  67. 0x01401c80 length: 128
  68. 0x01401d00 length: 128
  69. 0x01401d80 length: 128
  70. 0x01401e00 length: 128
  71. 0x01401e80 length: 128
  72. 0x01401f00 length: 128
  73. 0x01401f80 length: 128
  74. 0x01402000 length: 128
  75. 0x01402080 length: 128
  76. 0x01402100 length: 128
  77. 0x01402180 length: 128
  78. 0x01402200 length: 128
  79. 0x01402280 length: 128
  80. 0x01402300 length: 128
  81. 0x01402380 length: 128
  82. 0x01402400 length: 128
  83. 0x01402480 length: 128
  84. 0x01402500 length: 128
  85. 0x01402580 length: 128
  86. 0x01402600 length: 128
  87. 0x01402680 length: 128
  88. 0x01402700 length: 128
  89. 0x01402780 length: 128
  90. 0x01402800 length: 128
  91. 0x01402880 length: 128
  92. 0x01402900 length: 128
  93. 0x01402980 length: 128
  94. 0x01402a00 length: 128
  95. 0x01402a80 length: 128
  96. 0x01402b00 length: 128
  97. 0x01402b80 length: 128
  98. 0x01402c00 length: 128
  99. 0x01402c80 length: 128
  100. 0x01402d00 length: 128
  101. 0x01402d80 length: 128
  102. 0x01402e00 length: 128
  103. 0x01402e80 length: 128
  104. 0x01402f00 length: 128
  105. 0x01402f80 length: 128
  106. 0x01403000 length: 128
  107. 0x01403080 length: 128
  108. 0x01403100 length: 128
  109. 0x01403180 length: 128
  110. 0x01403200 length: 128
  111. 0x01403280 length: 128
  112. Auxillary Map
  113. --------------------------------------------------------
  114. Extent 0 : L1 dba: 0x01400080 Data dba: 0x01400084
  115. Extent 1 : L1 dba: 0x01400100 Data dba: 0x01400102
  116. Extent 2 : L1 dba: 0x01400180 Data dba: 0x01400182
  117. Extent 3 : L1 dba: 0x01400200 Data dba: 0x01400202
  118. Extent 4 : L1 dba: 0x01400280 Data dba: 0x01400282
  119. Extent 5 : L1 dba: 0x01400300 Data dba: 0x01400302
  120. Extent 6 : L1 dba: 0x01400380 Data dba: 0x01400382
  121. Extent 7 : L1 dba: 0x01400400 Data dba: 0x01400402
  122. Extent 8 : L1 dba: 0x01400480 Data dba: 0x01400482
  123. Extent 9 : L1 dba: 0x01400500 Data dba: 0x01400502
  124. Extent 10 : L1 dba: 0x01400580 Data dba: 0x01400582
  125. Extent 11 : L1 dba: 0x01400600 Data dba: 0x01400602
  126. Extent 12 : L1 dba: 0x01400680 Data dba: 0x01400682
  127. Extent 13 : L1 dba: 0x01400700 Data dba: 0x01400702
  128. Extent 14 : L1 dba: 0x01400780 Data dba: 0x01400782
  129. Extent 15 : L1 dba: 0x01400800 Data dba: 0x01400802
  130. Extent 16 : L1 dba: 0x01400880 Data dba: 0x01400882
  131. Extent 17 : L1 dba: 0x01400900 Data dba: 0x01400902
  132. Extent 18 : L1 dba: 0x01400980 Data dba: 0x01400982
  133. Extent 19 : L1 dba: 0x01400a00 Data dba: 0x01400a02
  134. Extent 20 : L1 dba: 0x01400a80 Data dba: 0x01400a82
  135. Extent 21 : L1 dba: 0x01400b00 Data dba: 0x01400b02
  136. Extent 22 : L1 dba: 0x01400b80 Data dba: 0x01400b82
  137. Extent 23 : L1 dba: 0x01400c00 Data dba: 0x01400c02
  138. Extent 24 : L1 dba: 0x01400c80 Data dba: 0x01400c82
  139. Extent 25 : L1 dba: 0x01400d00 Data dba: 0x01400d02
  140. Extent 26 : L1 dba: 0x01400d80 Data dba: 0x01400d82
  141. Extent 27 : L1 dba: 0x01400e00 Data dba: 0x01400e02
  142. Extent 28 : L1 dba: 0x01400e80 Data dba: 0x01400e82
  143. Extent 29 : L1 dba: 0x01400f00 Data dba: 0x01400f02
  144. Extent 30 : L1 dba: 0x01400f80 Data dba: 0x01400f82
  145. Extent 31 : L1 dba: 0x01401000 Data dba: 0x01401002
  146. Extent 32 : L1 dba: 0x01401080 Data dba: 0x01401082
  147. Extent 33 : L1 dba: 0x01401100 Data dba: 0x01401102
  148. Extent 34 : L1 dba: 0x01401180 Data dba: 0x01401182
  149. Extent 35 : L1 dba: 0x01401200 Data dba: 0x01401202
  150. Extent 36 : L1 dba: 0x01401280 Data dba: 0x01401282
  151. Extent 37 : L1 dba: 0x01401300 Data dba: 0x01401302
  152. Extent 38 : L1 dba: 0x01401380 Data dba: 0x01401382
  153. Extent 39 : L1 dba: 0x01401400 Data dba: 0x01401402
  154. Extent 40 : L1 dba: 0x01401480 Data dba: 0x01401482
  155. Extent 41 : L1 dba: 0x01401500 Data dba: 0x01401502
  156. Extent 42 : L1 dba: 0x01401580 Data dba: 0x01401582
  157. Extent 43 : L1 dba: 0x01401600 Data dba: 0x01401602
  158. Extent 44 : L1 dba: 0x01401680 Data dba: 0x01401682
  159. Extent 45 : L1 dba: 0x01401700 Data dba: 0x01401702
  160. Extent 46 : L1 dba: 0x01401780 Data dba: 0x01401782
  161. Extent 47 : L1 dba: 0x01401800 Data dba: 0x01401802
  162. Extent 48 : L1 dba: 0x01401880 Data dba: 0x01401882
  163. Extent 49 : L1 dba: 0x01401900 Data dba: 0x01401902
  164. Extent 50 : L1 dba: 0x01401980 Data dba: 0x01401982
  165. Extent 51 : L1 dba: 0x01401a00 Data dba: 0x01401a02
  166. Extent 52 : L1 dba: 0x01401a80 Data dba: 0x01401a82
  167. Extent 53 : L1 dba: 0x01401b00 Data dba: 0x01401b02
  168. Extent 54 : L1 dba: 0x01401b80 Data dba: 0x01401b82
  169. Extent 55 : L1 dba: 0x01401c00 Data dba: 0x01401c02
  170. Extent 56 : L1 dba: 0x01401c80 Data dba: 0x01401c82
  171. Extent 57 : L1 dba: 0x01401d00 Data dba: 0x01401d02
  172. Extent 58 : L1 dba: 0x01401d80 Data dba: 0x01401d82
  173. Extent 59 : L1 dba: 0x01401e00 Data dba: 0x01401e02
  174. Extent 60 : L1 dba: 0x01401e80 Data dba: 0x01401e82
  175. Extent 61 : L1 dba: 0x01401f00 Data dba: 0x01401f02
  176. Extent 62 : L1 dba: 0x01401f80 Data dba: 0x01401f82
  177. Extent 63 : L1 dba: 0x01402000 Data dba: 0x01402001
  178. Extent 64 : L1 dba: 0x01402000 Data dba: 0x01402080
  179. Extent 65 : L1 dba: 0x01402100 Data dba: 0x01402101
  180. Extent 66 : L1 dba: 0x01402100 Data dba: 0x01402180
  181. Extent 67 : L1 dba: 0x01402200 Data dba: 0x01402201
  182. Extent 68 : L1 dba: 0x01402200 Data dba: 0x01402280
  183. Extent 69 : L1 dba: 0x01402300 Data dba: 0x01402301
  184. Extent 70 : L1 dba: 0x01402300 Data dba: 0x01402380
  185. Extent 71 : L1 dba: 0x01402400 Data dba: 0x01402401
  186. Extent 72 : L1 dba: 0x01402400 Data dba: 0x01402480
  187. Extent 73 : L1 dba: 0x01402500 Data dba: 0x01402501
  188. Extent 74 : L1 dba: 0x01402500 Data dba: 0x01402580
  189. Extent 75 : L1 dba: 0x01402600 Data dba: 0x01402601
  190. Extent 76 : L1 dba: 0x01402600 Data dba: 0x01402680
  191. Extent 77 : L1 dba: 0x01402700 Data dba: 0x01402701
  192. Extent 78 : L1 dba: 0x01402700 Data dba: 0x01402780
  193. Extent 79 : L1 dba: 0x01402800 Data dba: 0x01402801
  194. Extent 80 : L1 dba: 0x01402800 Data dba: 0x01402880
  195. Extent 81 : L1 dba: 0x01402900 Data dba: 0x01402901
  196. Extent 82 : L1 dba: 0x01402900 Data dba: 0x01402980
  197. Extent 83 : L1 dba: 0x01402a00 Data dba: 0x01402a01
  198. Extent 84 : L1 dba: 0x01402a00 Data dba: 0x01402a80
  199. Extent 85 : L1 dba: 0x01402b00 Data dba: 0x01402b01
  200. Extent 86 : L1 dba: 0x01402b00 Data dba: 0x01402b80
  201. Extent 87 : L1 dba: 0x01402c00 Data dba: 0x01402c01
  202. Extent 88 : L1 dba: 0x01402c00 Data dba: 0x01402c80
  203. Extent 89 : L1 dba: 0x01402d00 Data dba: 0x01402d01
  204. Extent 90 : L1 dba: 0x01402d00 Data dba: 0x01402d80
  205. Extent 91 : L1 dba: 0x01402e00 Data dba: 0x01402e01
  206. Extent 92 : L1 dba: 0x01402e00 Data dba: 0x01402e80
  207. Extent 93 : L1 dba: 0x01402f00 Data dba: 0x01402f01
  208. Extent 94 : L1 dba: 0x01402f00 Data dba: 0x01402f80
  209. Extent 95 : L1 dba: 0x01403000 Data dba: 0x01403001
  210. Extent 96 : L1 dba: 0x01403000 Data dba: 0x01403080
  211. Extent 97 : L1 dba: 0x01403100 Data dba: 0x01403101
  212. Extent 98 : L1 dba: 0x01403100 Data dba: 0x01403180
  213. Extent 99 : L1 dba: 0x01403200 Data dba: 0x01403201
  214. Extent 100 : L1 dba: 0x01403200 Data dba: 0x01403280
  215. --------------------------------------------------------
  216. Second Level Bitmap block DBAs
  217. --------------------------------------------------------
  218. DBA 1: 0x01400082
  219. End dump data blocks tsn: 8 file#: 5 minblk 131 maxblk 131

    这里我们主要看Auxillary Map,里面记录了每个区所属的L1,不难发现从第64个区开始,64、65两个区的L1相同,这说明什么,说明L1下面挂了整整两个区的数据块,验证一下,将0x01402000块dump出来之后的内容:

  1. SQL> select dbms_utility.data_block_address_file(20979712) Rfile#,dbms_utility.data_block_address_block(20979712) "Block#" from dual;
  2. RFILE# Block#
  3. ---------- ----------
  4. 5 8192
  5. DBA Ranges :
  6. --------------------------------------------------------
  7. 0x01402000 Length: 128 Offset: 0
  8. 0x01402080 Length: 128 Offset: 128
  9. 0:Metadata 1:unformatted 2:unformatted 3:unformatted
  10. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  11. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  12. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  13. 16:unformatted 17:unformatted 18:unformatted 19:unformatted
  14. 20:unformatted 21:unformatted 22:unformatted 23:unformatted
  15. 24:unformatted 25:unformatted 26:unformatted 27:unformatted
  16. 28:unformatted 29:unformatted 30:unformatted 31:unformatted
  17. 32:unformatted 33:unformatted 34:unformatted 35:unformatted
  18. 36:unformatted 37:unformatted 38:unformatted 39:unformatted
  19. 40:unformatted 41:unformatted 42:unformatted 43:unformatted
  20. 44:unformatted 45:unformatted 46:unformatted 47:unformatted
  21. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  22. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  23. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  24. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  25. 64:unformatted 65:unformatted 66:unformatted 67:unformatted
  26. 68:unformatted 69:unformatted 70:unformatted 71:unformatted
  27. 72:unformatted 73:unformatted 74:unformatted 75:unformatted
  28. 76:unformatted 77:unformatted 78:unformatted 79:unformatted
  29. 80:unformatted 81:unformatted 82:unformatted 83:unformatted
  30. 84:unformatted 85:unformatted 86:unformatted 87:unformatted
  31. 88:unformatted 89:unformatted 90:unformatted 91:unformatted
  32. 92:unformatted 93:unformatted 94:unformatted 95:unformatted
  33. 96:unformatted 97:unformatted 98:unformatted 99:unformatted
  34. 100:unformatted 101:unformatted 102:unformatted 103:unformatted
  35. 104:unformatted 105:unformatted 106:unformatted 107:unformatted
  36. 108:unformatted 109:unformatted 110:unformatted 111:unformatted
  37. 112:unformatted 113:unformatted 114:unformatted 115:unformatted
  38. 116:unformatted 117:unformatted 118:unformatted 119:unformatted
  39. 120:unformatted 121:unformatted 122:unformatted 123:unformatted
  40. 124:unformatted 125:unformatted 126:unformatted 127:unformatted
  41. 128:unformatted 129:unformatted 130:unformatted 131:unformatted
  42. 132:unformatted 133:unformatted 134:unformatted 135:unformatted
  43. 136:unformatted 137:unformatted 138:unformatted 139:unformatted
  44. 140:unformatted 141:unformatted 142:unformatted 143:unformatted
  45. 144:unformatted 145:unformatted 146:unformatted 147:unformatted
  46. 148:unformatted 149:unformatted 150:unformatted 151:unformatted
  47. 152:unformatted 153:unformatted 154:unformatted 155:unformatted
  48. 156:unformatted 157:unformatted 158:unformatted 159:unformatted
  49. 160:unformatted 161:unformatted 162:unformatted 163:unformatted
  50. 164:unformatted 165:unformatted 166:unformatted 167:unformatted
  51. 168:unformatted 169:unformatted 170:unformatted 171:unformatted
  52. 172:unformatted 173:unformatted 174:unformatted 175:unformatted
  53. 176:unformatted 177:unformatted 178:unformatted 179:unformatted
  54. 180:unformatted 181:unformatted 182:unformatted 183:unformatted
  55. 184:unformatted 185:unformatted 186:unformatted 187:unformatted
  56. 188:unformatted 189:unformatted 190:unformatted 191:unformatted
  57. 192:unformatted 193:unformatted 194:unformatted 195:unformatted
  58. 196:unformatted 197:unformatted 198:unformatted 199:unformatted
  59. 200:unformatted 201:unformatted 202:unformatted 203:unformatted
  60. 204:unformatted 205:unformatted 206:unformatted 207:unformatted
  61. 208:unformatted 209:unformatted 210:unformatted 211:unformatted
  62. 212:unformatted 213:unformatted 214:unformatted 215:unformatted
  63. 216:unformatted 217:unformatted 218:unformatted 219:unformatted
  64. 220:unformatted 221:unformatted 222:unformatted 223:unformatted
  65. 224:unformatted 225:unformatted 226:unformatted 227:unformatted
  66. 228:unformatted 229:unformatted 230:unformatted 231:unformatted
  67. 232:unformatted 233:unformatted 234:unformatted 235:unformatted
  68. 236:unformatted 237:unformatted 238:unformatted 239:unformatted
  69. 240:unformatted 241:unformatted 242:unformatted 243:unformatted
  70. 244:unformatted 245:unformatted 246:unformatted 247:unformatted
  71. 248:unformatted 249:unformatted 250:unformatted 251:unformatted
  72. 252:unformatted 253:unformatted 254:unformatted 255:unformatted
  73. --------------------------------------------------------
  74. End dump data blocks tsn: 8 file#: 5 minblk 8192 maxblk 8192

    256个块,2M 2个区,可见L1中块的数量会随着段大小的改变而做调整的,可以增大到1024个甚至更多,我在这里不去再做验证,将重点放在高水位上,根据我们之前观察到的现象,高水位在第二个L1的地一个块,也可说第一个L1的末端,那么现在的L1里有256个块,高水位是不是也会推进到这个L1的末端呢?很容易进行验证,将数据插满到这个L1的前几个块再去观察段头高水位的变化就行了,那么插多少条呢?再来计算一下,当前的L1是8192号块,前面一共63个区,每个区里面两个L1,加上第一个区里面的一个L2和L3,我们需要插满8192-63*2-2=8064

  1. declare
  2. i number;
  3. begin
  4. for i in 1..8064 loop
  5. insert into lp values(i,'a','a','a','a');
  6. end loop;
  7. end;
  8. /

    观察62号区的第二个L1,第一个L1的地址是0x01401f80,那么第二个就是01401f81,5号文件8065号块,dump出来的结果

  1. DBA Ranges :
  2.   --------------------------------------------------------
  3.    0x01401fc0 Length: 64 Offset: 0
  4.   
  5.    0:FULL 1:FULL 2:FULL 3:FULL
  6.    4:FULL 5:FULL 6:FULL 7:FULL
  7.    8:FULL 9:FULL 10:FULL 11:FULL
  8.    12:FULL 13:FULL 14:FULL 15:FULL
  9.    16:FULL 17:FULL 18:FULL 19:FULL
  10.    20:FULL 21:FULL 22:FULL 23:FULL
  11.    24:FULL 25:FULL 26:FULL 27:FULL
  12.    28:FULL 29:FULL 30:FULL 31:FULL
  13.    32:FULL 33:FULL 34:FULL 35:FULL
  14.    36:FULL 37:FULL 38:FULL 39:FULL
  15.    40:FULL 41:FULL 42:FULL 43:FULL
  16.    44:FULL 45:FULL 46:FULL 47:FULL
  17.    48:FULL 49:FULL 50:FULL 51:FULL
  18.    52:FULL 53:FULL 54:FULL 55:FULL
  19.    56:FULL 57:FULL 58:FULL 59:FULL
  20.    60:FULL 61:FULL 62:FULL 63:FULL
  21.   --------------------------------------------------------
  22. End dump data blocks tsn: 8 file#: 5 minblk 8065 maxblk 8065

    居然全满了?再看8192号L1呢

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x01402000 Length: 128 Offset: 0
  4. 0x01402080 Length: 128 Offset: 128
  5. 0:Metadata 1:FULL 2:FULL 3:FULL
  6. 4:FULL 5:FULL 6:FULL 7:FULL
  7. 8:FULL 9:FULL 10:FULL 11:FULL
  8. 12:FULL 13:FULL 14:FULL 15:FULL
  9. 16:FULL 17:FULL 18:FULL 19:FULL
  10. 20:FULL 21:FULL 22:FULL 23:FULL
  11. 24:FULL 25:FULL 26:FULL 27:FULL
  12. 28:FULL 29:FULL 30:FULL 31:FULL
  13. 32:FULL 33:FULL 34:FULL 35:FULL
  14. 36:FULL 37:FULL 38:FULL 39:FULL
  15. 40:FULL 41:FULL 42:FULL 43:FULL
  16. 44:FULL 45:FULL 46:FULL 47:FULL
  17. 48:FULL 49:FULL 50:FULL 51:FULL
  18. 52:FULL 53:FULL 54:FULL 55:FULL
  19. 56:FULL 57:FULL 58:FULL 59:FULL
  20. 60:FULL 61:FULL 62:FULL 63:FULL
  21. 64:FULL 65:FULL 66:FULL 67:FULL
  22. 68:FULL 69:FULL 70:FULL 71:FULL
  23. 72:FULL 73:FULL 74:FULL 75:FULL
  24. 76:FULL 77:FULL 78:FULL 79:FULL
  25. 80:FULL 81:FULL 82:FULL 83:FULL
  26. 84:FULL 85:FULL 86:FULL 87:FULL
  27. 88:FULL 89:FULL 90:FULL 91:FULL
  28. 92:FULL 93:FULL 94:FULL 95:FULL
  29. 96:FULL 97:FULL 98:FULL 99:FULL
  30. 100:FULL 101:FULL 102:FULL 103:FULL
  31. 104:FULL 105:FULL 106:FULL 107:FULL
  32. 108:FULL 109:FULL 110:FULL 111:FULL
  33. 112:FULL 113:FULL 114:FULL 115:FULL
  34. 116:FULL 117:FULL 118:FULL 119:FULL
  35. 120:FULL 121:FULL 122:FULL 123:FULL
  36. 124:FULL 125:FULL 126:FULL 127:FULL
  37. 128:unformatted 129:unformatted 130:unformatted 131:unformatted
  38. 132:unformatted 133:unformatted 134:unformatted 135:unformatted
  39. 136:unformatted 137:unformatted 138:unformatted 139:unformatted
  40. 140:unformatted 141:unformatted 142:unformatted 143:unformatted
  41. 144:75-100% free 145:75-100% free 146:75-100% free 147:75-100% free
  42. 148:75-100% free 149:75-100% free 150:75-100% free 151:75-100% free
  43. 152:75-100% free 153:75-100% free 154:75-100% free 155:FULL
  44. 156:75-100% free 157:75-100% free 158:75-100% free 159:75-100% free
  45. 160:75-100% free 161:75-100% free 162:75-100% free 163:FULL
  46. 164:75-100% free 165:75-100% free 166:75-100% free 167:75-100% free
  47. 168:75-100% free 169:75-100% free 170:75-100% free 171:75-100% free
  48. 172:75-100% free 173:75-100% free 174:75-100% free 175:75-100% free
  49. 176:unformatted 177:unformatted 178:unformatted 179:unformatted
  50. 180:unformatted 181:unformatted 182:unformatted 183:unformatted
  51. 184:unformatted 185:unformatted 186:unformatted 187:unformatted
  52. 188:unformatted 189:unformatted 190:unformatted 191:unformatted
  53. 192:unformatted 193:unformatted 194:unformatted 195:unformatted
  54. 196:unformatted 197:unformatted 198:unformatted 199:unformatted
  55. 200:unformatted 201:unformatted 202:unformatted 203:unformatted
  56. 204:unformatted 205:unformatted 206:unformatted 207:unformatted
  57. 208:unformatted 209:unformatted 210:unformatted 211:unformatted
  58. 212:unformatted 213:unformatted 214:unformatted 215:unformatted
  59. 216:unformatted 217:unformatted 218:unformatted 219:unformatted
  60. 220:unformatted 221:unformatted 222:unformatted 223:unformatted
  61. 224:unformatted 225:unformatted 226:unformatted 227:unformatted
  62. 228:unformatted 229:unformatted 230:unformatted 231:unformatted
  63. 232:unformatted 233:unformatted 234:unformatted 235:unformatted
  64. 236:unformatted 237:unformatted 238:unformatted 239:unformatted
  65. 240:unformatted 241:unformatted 242:unformatted 243:unformatted
  66. 244:unformatted 245:unformatted 246:unformatted 247:unformatted
  67. 248:unformatted 249:unformatted 250:unformatted 251:unformatted
  68. 252:unformatted 253:unformatted 254:unformatted 255:unformatted
  69. --------------------------------------------------------
  70. End dump data blocks tsn: 8 file#: 5 minblk 8192 maxblk 8192

    完蛋了,计算错误,L1下面的第二个区也已经被格式化了,看段头信息

  1. Extent Control Header
  2. -----------------------------------------------------------------
  3. Extent Header:: spare1: 0 spare2: 0 #extents: 101 #blocks: 12928
  4. last map 0x00000000 #maps: 0 offset: 2716
  5. Highwater:: 0x01402100 ext#: 64 blk#: 128 ext size: 128
  6. #blocks in seg. hdr's freelists: 0
  7. #blocks below: 8191
  8. mapblk 0x00000000 offset: 64

    果然高水位指到了第66个区的L1块地址,这会影响我们的判断,到底哪里出问题了呢?观察8192号块内容是后128个块里被插入了2条,前128个块全满,也就是说我多插了130个块,后来猛然醒悟,我使用DBA来计算的,忘记减去128个块的文件头了,这么一算结果相查差还是不大的,太马虎了,要不是因为马虎哥也能上清华北大了;然后该怎么办呢?重新来过?不用!既然这个L1推过头了,索性把它堆满,然后我们去观察下一个L1,这下就好计算了;

  1. declare
  2. i number;
  3. begin
  4. for i in 1..126 loop
  5. insert into lp values(i,'a','a','a','a');
  6. end loop;
  7. end;
  8. /

    观察8192号块

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x01402000 Length: 128 Offset: 0
  4. 0x01402080 Length: 128 Offset: 128
  5. 0:Metadata 1:FULL 2:FULL 3:FULL
  6. 4:FULL 5:FULL 6:FULL 7:FULL
  7. 8:FULL 9:FULL 10:FULL 11:FULL
  8. 12:FULL 13:FULL 14:FULL 15:FULL
  9. 16:FULL 17:FULL 18:FULL 19:FULL
  10. 20:FULL 21:FULL 22:FULL 23:FULL
  11. 24:FULL 25:FULL 26:FULL 27:FULL
  12. 28:FULL 29:FULL 30:FULL 31:FULL
  13. 32:FULL 33:FULL 34:FULL 35:FULL
  14. 36:FULL 37:FULL 38:FULL 39:FULL
  15. 40:FULL 41:FULL 42:FULL 43:FULL
  16. 44:FULL 45:FULL 46:FULL 47:FULL
  17. 48:FULL 49:FULL 50:FULL 51:FULL
  18. 52:FULL 53:FULL 54:FULL 55:FULL
  19. 56:FULL 57:FULL 58:FULL 59:FULL
  20. 60:FULL 61:FULL 62:FULL 63:FULL
  21. 64:FULL 65:FULL 66:FULL 67:FULL
  22. 68:FULL 69:FULL 70:FULL 71:FULL
  23. 72:FULL 73:FULL 74:FULL 75:FULL
  24. 76:FULL 77:FULL 78:FULL 79:FULL
  25. 80:FULL 81:FULL 82:FULL 83:FULL
  26. 84:FULL 85:FULL 86:FULL 87:FULL
  27. 88:FULL 89:FULL 90:FULL 91:FULL
  28. 92:FULL 93:FULL 94:FULL 95:FULL
  29. 96:FULL 97:FULL 98:FULL 99:FULL
  30. 100:FULL 101:FULL 102:FULL 103:FULL
  31. 104:FULL 105:FULL 106:FULL 107:FULL
  32. 108:FULL 109:FULL 110:FULL 111:FULL
  33. 112:FULL 113:FULL 114:FULL 115:FULL
  34. 116:FULL 117:FULL 118:FULL 119:FULL
  35. 120:FULL 121:FULL 122:FULL 123:FULL
  36. 124:FULL 125:FULL 126:FULL 127:FULL
  37. 128:FULL 129:FULL 130:FULL 131:FULL
  38. 132:FULL 133:FULL 134:FULL 135:FULL
  39. 136:FULL 137:FULL 138:FULL 139:FULL
  40. 140:FULL 141:FULL 142:FULL 143:FULL
  41. 144:FULL 145:FULL 146:FULL 147:FULL
  42. 148:FULL 149:FULL 150:FULL 151:FULL
  43. 152:FULL 153:FULL 154:FULL 155:FULL
  44. 156:FULL 157:FULL 158:FULL 159:FULL
  45. 160:FULL 161:FULL 162:FULL 163:FULL
  46. 164:FULL 165:FULL 166:FULL 167:FULL
  47. 168:FULL 169:FULL 170:FULL 171:FULL
  48. 172:FULL 173:FULL 174:FULL 175:FULL
  49. 176:FULL 177:FULL 178:FULL 179:FULL
  50. 180:FULL 181:FULL 182:FULL 183:FULL
  51. 184:FULL 185:FULL 186:FULL 187:FULL
  52. 188:FULL 189:FULL 190:FULL 191:FULL
  53. 192:FULL 193:FULL 194:FULL 195:FULL
  54. 196:FULL 197:FULL 198:FULL 199:FULL
  55. 200:FULL 201:FULL 202:FULL 203:FULL
  56. 204:FULL 205:FULL 206:FULL 207:FULL
  57. 208:FULL 209:FULL 210:FULL 211:FULL
  58. 212:FULL 213:FULL 214:FULL 215:FULL
  59. 216:FULL 217:FULL 218:FULL 219:FULL
  60. 220:FULL 221:FULL 222:FULL 223:FULL
  61. 224:FULL 225:FULL 226:FULL 227:FULL
  62. 228:FULL 229:FULL 230:FULL 231:FULL
  63. 232:FULL 233:FULL 234:FULL 235:FULL
  64. 236:FULL 237:FULL 238:FULL 239:FULL
  65. 240:FULL 241:FULL 242:FULL 243:FULL
  66. 244:FULL 245:FULL 246:FULL 247:FULL
  67. 248:FULL 249:FULL 250:FULL 251:FULL
  68. 252:FULL 253:FULL 254:FULL 255:FULL
  69. --------------------------------------------------------
  70. End dump data blocks tsn: 8 file#: 5 minblk 8192 maxblk 8192

    已经全满了,这个时候我们再去看一下段头的高水位

  1. Extent Control Header
  2. -----------------------------------------------------------------
  3. Extent Header:: spare1: 0 spare2: 0 #extents: 101 #blocks: 12928
  4. last map 0x00000000 #maps: 0 offset: 2716
  5. Highwater:: 0x01402100 ext#: 64 blk#: 128 ext size: 128
  6. #blocks in seg. hdr's freelists: 0
  7. #blocks below: 8191
  8. mapblk 0x00000000 offset: 64

    没有动,看来oracle也是事不到眼前不知道着急啊,来看一看下一个L1

  1. SQL> select dbms_utility.data_block_address_file(to_number('01402100', 'xxxxxxxx')) file#,
  2.   2 dbms_utility.data_block_address_block(to_number('01402100', 'xxxxxxxx')) block#
  3.   3 from dual;

  4.      FILE# BLOCK#
  5. ---------- ----------
  6.          5 8448

    这个L1是5号文件8448号块,dump出来

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x01402100 Length: 128 Offset: 0
  4. 0x01402180 Length: 128 Offset: 128
  5. 0:Metadata 1:unformatted 2:unformatted 3:unformatted
  6. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  7. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  8. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  9. 16:unformatted 17:unformatted 18:unformatted 19:unformatted
  10. 20:unformatted 21:unformatted 22:unformatted 23:unformatted
  11. 24:unformatted 25:unformatted 26:unformatted 27:unformatted
  12. 28:unformatted 29:unformatted 30:unformatted 31:unformatted
  13. 32:unformatted 33:unformatted 34:unformatted 35:unformatted
  14. 36:unformatted 37:unformatted 38:unformatted 39:unformatted
  15. 40:unformatted 41:unformatted 42:unformatted 43:unformatted
  16. 44:unformatted 45:unformatted 46:unformatted 47:unformatted
  17. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  18. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  19. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  20. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  21. 64:unformatted 65:unformatted 66:unformatted 67:unformatted
  22. 68:unformatted 69:unformatted 70:unformatted 71:unformatted
  23. 72:unformatted 73:unformatted 74:unformatted 75:unformatted
  24. 76:unformatted 77:unformatted 78:unformatted 79:unformatted
  25. 80:unformatted 81:unformatted 82:unformatted 83:unformatted
  26. 84:unformatted 85:unformatted 86:unformatted 87:unformatted
  27. 88:unformatted 89:unformatted 90:unformatted 91:unformatted
  28. 92:unformatted 93:unformatted 94:unformatted 95:unformatted
  29. 96:unformatted 97:unformatted 98:unformatted 99:unformatted
  30. 100:unformatted 101:unformatted 102:unformatted 103:unformatted
  31. 104:unformatted 105:unformatted 106:unformatted 107:unformatted
  32. 108:unformatted 109:unformatted 110:unformatted 111:unformatted
  33. 112:unformatted 113:unformatted 114:unformatted 115:unformatted
  34. 116:unformatted 117:unformatted 118:unformatted 119:unformatted
  35. 120:unformatted 121:unformatted 122:unformatted 123:unformatted
  36. 124:unformatted 125:unformatted 126:unformatted 127:unformatted
  37. 128:unformatted 129:unformatted 130:unformatted 131:unformatted
  38. 132:unformatted 133:unformatted 134:unformatted 135:unformatted
  39. 136:unformatted 137:unformatted 138:unformatted 139:unformatted
  40. 140:unformatted 141:unformatted 142:unformatted 143:unformatted
  41. 144:unformatted 145:unformatted 146:unformatted 147:unformatted
  42. 148:unformatted 149:unformatted 150:unformatted 151:unformatted
  43. 152:unformatted 153:unformatted 154:unformatted 155:unformatted
  44. 156:unformatted 157:unformatted 158:unformatted 159:unformatted
  45. 160:unformatted 161:unformatted 162:unformatted 163:unformatted
  46. 164:unformatted 165:unformatted 166:unformatted 167:unformatted
  47. 168:unformatted 169:unformatted 170:unformatted 171:unformatted
  48. 172:unformatted 173:unformatted 174:unformatted 175:unformatted
  49. 176:unformatted 177:unformatted 178:unformatted 179:unformatted
  50. 180:unformatted 181:unformatted 182:unformatted 183:unformatted
  51. 184:unformatted 185:unformatted 186:unformatted 187:unformatted
  52. 188:unformatted 189:unformatted 190:unformatted 191:unformatted
  53. 192:unformatted 193:unformatted 194:unformatted 195:unformatted
  54. 196:unformatted 197:unformatted 198:unformatted 199:unformatted
  55. 200:unformatted 201:unformatted 202:unformatted 203:unformatted
  56. 204:unformatted 205:unformatted 206:unformatted 207:unformatted
  57. 208:unformatted 209:unformatted 210:unformatted 211:unformatted
  58. 212:unformatted 213:unformatted 214:unformatted 215:unformatted
  59. 216:unformatted 217:unformatted 218:unformatted 219:unformatted
  60. 220:unformatted 221:unformatted 222:unformatted 223:unformatted
  61. 224:unformatted 225:unformatted 226:unformatted 227:unformatted
  62. 228:unformatted 229:unformatted 230:unformatted 231:unformatted
  63. 232:unformatted 233:unformatted 234:unformatted 235:unformatted
  64. 236:unformatted 237:unformatted 238:unformatted 239:unformatted
  65. 240:unformatted 241:unformatted 242:unformatted 243:unformatted
  66. 244:unformatted 245:unformatted 246:unformatted 247:unformatted
  67. 248:unformatted 249:unformatted 250:unformatted 251:unformatted
  68. 252:unformatted 253:unformatted 254:unformatted 255:unformatted
  69. --------------------------------------------------------
  70. End dump data blocks tsn: 8 file#: 5 minblk 8448 maxblk 8448

    256个块,除了第一个是L1元数据之外,没有一个格式化的,这就达到了我们的目的,我现在要插入一条数据,迫使高水位推动,猜一下高水位会在哪?在L1管理的最后一个块后面么?
看插入一行数据之后的8448号块

  1. DBA Ranges :
  2. --------------------------------------------------------
  3. 0x01402100 Length: 128 Offset: 0
  4. 0x01402180 Length: 128 Offset: 128
  5. 0:Metadata 1:unformatted 2:unformatted 3:unformatted
  6. 4:unformatted 5:unformatted 6:unformatted 7:unformatted
  7. 8:unformatted 9:unformatted 10:unformatted 11:unformatted
  8. 12:unformatted 13:unformatted 14:unformatted 15:unformatted
  9. 16:75-100% free 17:75-100% free 18:75-100% free 19:75-100% free
  10. 20:75-100% free 21:75-100% free 22:75-100% free 23:75-100% free
  11. 24:75-100% free 25:75-100% free 26:75-100% free 27:75-100% free
  12. 28:FULL 29:75-100% free 30:75-100% free 31:75-100% free
  13. 32:unformatted 33:unformatted 34:unformatted 35:unformatted
  14. 36:unformatted 37:unformatted 38:unformatted 39:unformatted
  15. 40:unformatted 41:unformatted 42:unformatted 43:unformatted
  16. 44:unformatted 45:unformatted 46:unformatted 47:unformatted
  17. 48:unformatted 49:unformatted 50:unformatted 51:unformatted
  18. 52:unformatted 53:unformatted 54:unformatted 55:unformatted
  19. 56:unformatted 57:unformatted 58:unformatted 59:unformatted
  20. 60:unformatted 61:unformatted 62:unformatted 63:unformatted
  21. 64:unformatted 65:unformatted 66:unformatted 67:unformatted
  22. 68:unformatted 69:unformatted 70:unformatted 71:unformatted
  23. 72:unformatted 73:unformatted 74:unformatted 75:unformatted
  24. 76:unformatted 77:unformatted 78:unformatted 79:unformatted
  25. 80:unformatted 81:unformatted 82:unformatted 83:unformatted
  26. 84:unformatted 85:unformatted 86:unformatted 87:unformatted
  27. 88:unformatted 89:unformatted 90:unformatted 91:unformatted
  28. 92:unformatted 93:unformatted 94:unformatted 95:unformatted
  29. 96:unformatted 97:unformatted 98:unformatted 99:unformatted
  30. 100:unformatted 101:unformatted 102:unformatted 103:unformatted
  31. 104:unformatted 105:unformatted 106:unformatted 107:unformatted
  32. 108:unformatted 109:unformatted 110:unformatted 111:unformatted
  33. 112:unformatted 113:unformatted 114:unformatted 115:unformatted
  34. 116:unformatted 117:unformatted 118:unformatted 119:unformatted
  35. 120:unformatted 121:unformatted 122:unformatted 123:unformatted
  36. 124:unformatted 125:unformatted 126:unformatted 127:unformatted
  37. 128:unformatted 129:unformatted 130:unformatted 131:unformatted
  38. 132:unformatted 133:unformatted 134:unformatted 135:unformatted
  39. 136:unformatted 137:unformatted 138:unformatted 139:unformatted
  40. 140:unformatted 141:unformatted 142:unformatted 143:unformatted
  41. 144:unformatted 145:unformatted 146:unformatted 147:unformatted
  42. 148:unformatted 149:unformatted 150:unformatted 151:unformatted
  43. 152:unformatted 153:unformatted 154:unformatted 155:unformatted
  44. 156:unformatted 157:unformatted 158:unformatted 159:unformatted
  45. 160:unformatted 161:unformatted 162:unformatted 163:unformatted
  46. 164:unformatted 165:unformatted 166:unformatted 167:unformatted
  47. 168:unformatted 169:unformatted 170:unformatted 171:unformatted
  48. 172:unformatted 173:unformatted 174:unformatted 175:unformatted
  49. 176:unformatted 177:unformatted 178:unformatted 179:unformatted
  50. 180:unformatted 181:unformatted 182:unformatted 183:unformatted
  51. 184:unformatted 185:unformatted 186:unformatted 187:unformatted
  52. 188:unformatted 189:unformatted 190:unformatted 191:unformatted
  53. 192:unformatted 193:unformatted 194:unformatted 195:unformatted
  54. 196:unformatted 197:unformatted 198:unformatted 199:unformatted
  55. 200:unformatted 201:unformatted 202:unformatted 203:unformatted
  56. 204:unformatted 205:unformatted 206:unformatted 207:unformatted
  57. 208:unformatted 209:unformatted 210:unformatted 211:unformatted
  58. 212:unformatted 213:unformatted 214:unformatted 215:unformatted
  59. 216:unformatted 217:unformatted 218:unformatted 219:unformatted
  60. 220:unformatted 221:unformatted 222:unformatted 223:unformatted
  61. 224:unformatted 225:unformatted 226:unformatted 227:unformatted
  62. 228:unformatted 229:unformatted 230:unformatted 231:unformatted
  63. 232:unformatted 233:unformatted 234:unformatted 235:unformatted
  64. 236:unformatted 237:unformatted 238:unformatted 239:unformatted
  65. 240:unformatted 241:unformatted 242:unformatted 243:unformatted
  66. 244:unformatted 245:unformatted 246:unformatted 247:unformatted
  67. 248:unformatted 249:unformatted 250:unformatted 251:unformatted
  68. 252:unformatted 253:unformatted 254:unformatted 255:unformatted
  69. --------------------------------------------------------
  70. End dump data blocks tsn: 8 file#: 5 minblk 8448 maxblk 8448

    有一个块已经满了,揭晓答案的时候来了,dump出段头


  1. Extent Control Header
  2. -----------------------------------------------------------------
  3. Extent Header:: spare1: 0 spare2: 0 #extents: 101 #blocks: 12928
  4. last map 0x00000000 #maps: 0 offset: 2716
  5. Highwater:: 0x01402180 ext#: 65 blk#: 128 ext size: 128
  6. #blocks in seg. hdr's freelists: 0
  7. #blocks below: 8318
  8. mapblk 0x00000000 offset: 65
    高水位是0x01402180,这个地址在哪呢? 0x01402180比0x01402100多了十六进制80个块,就是十进制的128个块,仅仅是推动了一个区的大小,并不是一个L1的大小,这说明常规路径下插入高水位的推动是以L1和区中小的那个单位来推动的,就是L1小就推动L1里面所有块的大小,区小就推动一个区的大小,可见所谓的高并发并非像宣传的那样,还是受高水位的限制的,这个时候的区块大概像下面这个样子:

    开几个session做下插入试试
 
SQL> select dbms_rowid.ROWID_RELATIVE_FNO(rowid),dbms_rowid.ROWID_BLOCK_NUMBER(rowid) from lp where trim(des1)='b'; 5 8474 5 8482 5 8484 5 8488 5 8489 5 8490 5 8491 5 8492 5 8493 5 8494 5 8495 5 8496 5 8498 5 8500 5 8504 5 8506 5 8512 5 8514 5 8520 5 8522 20 rows selected.
   全部是在高水位之下


     这个实验有一点值得思考,就是PCTFREE如何设置,在插入删除频繁的段,PCTFREE的值应该要远离三个百分比线,就是25%/50%/75%,避免频繁插入删除的时候块状态频繁改变,由full变为非full,如此就会修改L1块的内容,有可能造成buffer busy waits。

   而大家熟知的直接路径下的插入是直接在高水位之上插入并且绕过cache buffer的,这种情况下的高水位是如何推动的呢?我们再慢慢分析.




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26838672/viewspace-1809264/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26838672/viewspace-1809264/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值