步3:转储L2块9号文件10号块: SQL> alter system dump datafile 9 block 10; 系统已更改。 *** 2008-02-15 13:52:03.359 Start dump data blocks tsn: 11 file#: 9 minblk 10 maxblk 10 buffer tsn: 11 rdba: 0x0240000a (9/10) scn: 0x0000.001e0767 seq: 0x01 flg: 0x04 tail: 0x07672101 frmt: 0x02 chkval: 0x4cfb type: 0x21=SECOND LEVEL BITMAP BLOCK
Dump of Second Level Bitmap Block number: 2 nfree: 1 ffree: 1 pdba: 0x0240000b Inc #: 0 Objd: 52176 opcode:0 xid: L1 Ranges : -------------------------------------------------------- 0x02400009 Free: 1 Inst: 1 0x0240001d Free: 3 Inst: 1 -------------------------------------------------------- End dump data blocks tsn: 11 file#: 9 minblk 10 maxblk 10 这里我们看到 L2块中有两个L1块 分别是 9号块 和 29号块,到这一步,Oracle如何在L2中选择L1?为了提高插入的并行度,这里将根据完成插入操作服务器进程的PID,计算出一个Hash值,根据此Hash值在多个L1中选择一个。也就是在多个L1中根据进程PID随机选择一个。此处要注意的是,高高水点(不是输入错误,高水点在ASSM中有两个:低高水点和高高水点)之后的块不在选择范围内。 如果从两个会话中插入,Oracle会尽量将这两个进程分配到两个L1块中。 假设,这里选择了29号,我们再来转储它。 步4: SQL> alter system dump datafile 9 block 29; 系统已更改。 *** 2008-02-15 14:00:26.078 Start dump data blocks tsn: 11 file#: 9 minblk 29 maxblk 29 buffer tsn: 11 rdba: 0x0240001d (9/29) scn: 0x0000.001e0767 seq: 0x0c flg: 0x04 tail: 0x0767200c frmt: 0x02 chkval: 0x4faa type: 0x20=FIRST LEVEL BITMAP BLOCK Dump of First Level Bitmap Block -------------------------------- nbits : 4 nranges: 2 parent dba: 0x0240000a poffset: 1 unformatted: 0 total: 10 first useful block: 1 owning instance : 1 instance ownership changed at 02/15/2008 12:01:34 Last successful Search 02/15/2008 12:01:34 Freeness Status: nf1 0 nf2 1 nf3 0 nf4 0
Extent Map Block Offset: 4294967295 First free datablock : 5 Bitmap block lock opcode 0 Locker xid: : 0x0000.000.00000000 Inc #: 0 Objd: 52176 HWM Flag: HWM Set Highwater:: 0x02400027 ext#: 4 blk#: 5 ext size: 5 #blocks in seg. hdr's freelists: 0 #blocks below: 21 mapblk 0x00000000 offset: 4 -------------------------------------------------------- DBA Ranges : -------------------------------------------------------- 0x0240001d Length: 5 Offset: 0 0x02400022 Length: 5 Offset: 5 0:Metadata 1:FULL 2:FULL 3:FULL 4:FULL 5:25-50% free 6:FULL 7:FULL 8:FULL 9:FULL -------------------------------------------------------- End dump data blocks tsn: 11 file#: 9 minblk 29 maxblk 29 此L1块中包含10个数据块,在这10个块中的选择,Oracle也是根据进程的PID,随机挑选。同样,两个不同进程发布的插入,Oracle会尽量使其插入进不同的数据块中,以提高并发性。 |