没有必胜的秘籍,没有方程式遵循~~ 要赢~~只有全身心的投入!

晶晶实验_插入时寻找空闲块的步骤篇(ASSM表空间)

上一篇 / 下一篇  2008-02-15 21:16:15 / 个人分类:晶晶oracle实验系列

查看( 2018 ) / 评论( 53 )
服务器进程寻找空闲块的步骤:
Q e!}/v ^2PB|0         在ASSM表空间中,执行Insert声明时,Oracle是如何为声明分配可用块的?ITPUB个人空间4PC(LAI
        以前已经有网友论证,在ASSM中,可用块的管理,由L3、L2和L1三级位图块实现。具体的步骤就是,先通过数据字典找到段头,而段头其实就是表的第一个L3块,在其中寻找L2。根据执行插入声明的服务器进程的PID,计算出一个随机HASH值,根据此HASH值,在L2中找到一个L1。再根据服务器进程的PID,在L1中查找一个可用的数据块,并在其中插入新行。具体的步骤如下:
3V,|g&Z?*vI(H0 步1:
:f^_0Y_+z'G}0         我的实验环境如下:
}%[2O Emv$I C8q0 块大小:8K;区大小40K;实验表现占5个区;
'S5N5r'O$K4L/a0         假设现在用户端发来命令如下:ITPUB个人空间0MHCGS`R
        Insert into new01_jj_1 values(1,’a’);
@Sf+D8d0LKZ:K~0         首先,对于new01_jj_1,数据库并不理解这是什么,Oracle首先要去查询数据字典表,了解这一串字母的具体意义,例如,Oracle要确定这是一个视图、同义词,或是一个表等等,这些操作,就是递归操作,我们只拣和我们今天的论题相关的说,Oracle要先查找seg$数据字典表,找出段头的文件号和块号,我们将这一步操作化为对基于seg$数据字典表的视图:Dba_segments的操作:ITPUB个人空间XZT e"F,])j+D1CE h
SQL> select header_block,header_file,segment_type from dba_segments where segment_name='NEW01_JJ_1';
2O:J;KaKTlF3I-I0 HEADER_BLOCK HEADER_FILE SEGMENT_TYPE
n.Emfw&X~!uX0 ------------ ----------- ------------------
W.zG`%w*v:A~[ b9h0 11        9 TABLE
#R,g@Z1O1r0 步2:根据上面的显示结果可知,段头是在9号文件的第11号块,段头是第一个L3块,在L3中保存着L2块的地址,L2块保存着L1块的地址,L1块保存着数据块的地址。所以想查找数据库的第一步,就是要先找到L3块,并在其中搜索可用的L2块,下面我们转储表的第一个L3块,即段头:9号文件11号块,然后在其中搜索可用的L2块。
G _U6n&dOP4N0 转储命令如下:ITPUB个人空间U6I"qHFJ4j
SQL> alter system dump datafile 9 block 11;
3S(d:t%a s)x#S0 系统已更改。ITPUB个人空间#kmHl-f1]4W.}
转储结果如下:ITPUB个人空间BSR,G$H^1P
*** 2008-02-15 13:46:50.562
Ch w!Rv7VX M+y0 *** SERVICE NAMESYS$USERS) 2008-02-15 13:46:50.515ITPUB个人空间'FK$w8DK5j+?
*** SESSION ID206.4) 2008-02-15 13:46:50.515ITPUB个人空间:U4Oliy(Z9X.r;tYD0z
Start dump data blocks tsn: 11 file#: 9 minblk 11 maxblk 11
y q V G9~/y!h+k0 buffer tsn: 11 rdba: 0x0240000b (9/11)
6Vp:] S P{u0 scn: 0x0000.001e0767 seq: 0x01 flg: 0x04 tail: 0x07672301
I.\eK8a0 frmt: 0x02 chkval: 0x604a type: 0x23=PAGETABLE SEGMENT HEADER
U+g&xP.Ax u0   Extent Control Header
GD:~I-a:y7A0   -----------------------------------------------------------------ITPUB个人空间n\(dqv0qC
  Extent Header:: spare1: 0      spare2: 0      #extents: 5      #blocks: 25    ITPUB个人空间.hoV"cS%v&R/G
                  last map  0x00000000  #maps: 0      offset: 2716  
)bE ~~%Vj0       Highwater::  0x02400027  ext#: 4      blk#: 5      ext size: 5     
,cs;QPs @1c0   #blocks in seg. hdr's freelists: 0     ITPUB个人空间5nA#q*fV y)Ra^
  #blocks below: 21    ITPUB个人空间'R'CH+|#dD;w [7v8Q
  mapblk  0x00000000  offset: 4     
!Q s?u.M0                    UnlockedITPUB个人空间2qX&r$d.zZ
  --------------------------------------------------------
Y-fx#Z0L0   Low HighWater Mark : ITPUB个人空间+PV-W$K'bG"j)Q
      Highwater::  0x02400027  ext#: 4      blk#: 5      ext size: 5     ITPUB个人空间,ew!\aW4h
  #blocks in seg. hdr's freelists: 0     
As!~8d5[+}1S0   #blocks below: 21    ITPUB个人空间,cn]H(GU
  mapblk  0x00000000  offset: 4     ITPUB个人空间'Fg)P R;J9z
  Level 1 BMB for High HWM block: 0x0240001d
@S)r:^"x-z8vk} v0   Level 1 BMB for Low HWM block: 0x0240001d
5]PcgO%Mo)~0   --------------------------------------------------------
o a!}(lu8^I0   Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0      ITPUB个人空间5w v x['J9wpV/W
  L2 Array start offset:  0x00001434ITPUB个人空间^,so)M7}? E
  First Level 3 BMB:  0x00000000
3V[0N(`c Z;~0   L2 Hint for inserts:  0x0240000a
\%E(lujm J0   Last Level 1 BMB:  0x0240001dITPUB个人空间au&o0[E
  Last Level II BMB:  0x0240000a
cb uI.v\.@+d$?0   Last Level III BMB:  0x00000000ITPUB个人空间p0@v\8FQ w V
     Map Header:: next  0x00000000  #extents: 5    obj#: 52176  flag: 0x10000000ITPUB个人空间c&b%SA*O,u
  Inc # 0 ITPUB个人空间wZ.K!c ]
  Extent Map
9fuk0u2p ?A1Vw0e]0   -----------------------------------------------------------------ITPUB个人空间ARVRN'Kbhq3N
   0x02400009  length: 5     
:_3R`ty'u(pGN0    0x0240000e  length: 5     ITPUB个人空间gTL9FUw
   0x02400018  length: 5     
#AL8T+m.S;i.k_0    0x0240001d  length: 5     ITPUB个人空间8b8q|VI'EK
   0x02400022  length: 5     
N%X6~w,`#p,y6^0   
"M%A2T-j7h9ujT^b*D0   Auxillary Map
rR K:~;Gf N0i"LlG0   --------------------------------------------------------ITPUB个人空间N8qV g:J$ys;Xj
   Extent 0     :  L1 dba:  0x02400009 Data dba:  0x0240000cITPUB个人空间 ^+Y2h#J3C4O]{
   Extent 1     :  L1 dba:  0x02400009 Data dba:  0x0240000eITPUB个人空间,G"`M/o5|w$xXr
   Extent 2     :  L1 dba:  0x02400009 Data dba:  0x02400018ITPUB个人空间2kJy s%~fu
   Extent 3     :  L1 dba:  0x0240001d Data dba:  0x0240001e
+o5i S:fo't3SJ s/G0    Extent 4     :  L1 dba:  0x0240001d Data dba:  0x02400022
SSS |d8]0   --------------------------------------------------------
l;r n P |6F){+J\;C0   
#c{6pE\tc;J(b0    Second Level Bitmap block DBAs ITPUB个人空间Kz N&{4o|9[ Oe
   --------------------------------------------------------
5{X0s/czt0    DBA 1:   0x0240000a
a)[P&jx4ul ]?H0   ITPUB个人空间h*C#lET~
End dump data blocks tsn: 11 file#: 9 minblk 11 maxblk 11ITPUB个人空间3MHV1zX4ZPp*X
ITPUB个人空间!R.Y'p*h t5GE3fO
查看上面的信息,可知现在表New01_jj_1表中只有一个L2块,即9号文件第10号块。将来随着表的增大,L1块的增多,L2块也会逐步增多。那么,在L3中记录的L2也会随之增多,如何在众多L2块中快速找到一个可用的L2块呢?Oracle专门增设了一个L2 Hint for inserts,此处的值为0x0240000a,即第9号文件10号块。我们可以直接根据L2 Hint for inserts中的指示,找出可用的L2块,此处为第9号文件10号块,这就是在L3中查找L2的步骤,下面,我们转储L2,并在其中查找L1块。ITPUB个人空间r2oG8c2S'lDcH
步3:转储L2块9号文件10号块:ITPUB个人空间a$p5C {"i'Db1p%B`/N
SQL> alter system dump datafile 9 block 10;
? eE(J gL m0 系统已更改。ITPUB个人空间#~$F3m*S~z`F
*** 2008-02-15 13:52:03.359ITPUB个人空间RIXhl%G Q2\8J]$@(c-N
Start dump data blocks tsn: 11 file#: 9 minblk 10 maxblk 10ITPUB个人空间uE1bB G _ XsiJZ
buffer tsn: 11 rdba: 0x0240000a (9/10)
pz8x&D_E,G0 scn: 0x0000.001e0767 seq: 0x01 flg: 0x04 tail: 0x07672101ITPUB个人空间 z;vjH.\V"}*r8|
frmt: 0x02 chkval: 0x4cfb type: 0x21=SECOND LEVEL BITMAP BLOCKITPUB个人空间/]PV+}|

'q G4tw"n{ vIi)J0 Dump of Second Level Bitmap Block
W)`{8?.m7pB3R0    number: 2       nfree: 1       ffree: 1      pdba:     0x0240000b ITPUB个人空间*{.s_lp
   Inc #: 0 Objd: 52176
KV,s1B/ue0   opcode:0
+wzn-N5z%T:d*K(B0 xid:
2^Rhqk }?$R0   L1 Ranges :
;B!nl*CQRd0   --------------------------------------------------------
hH+S P_A0    0x02400009  Free: 1 Inst: 1 ITPUB个人空间}H`n:D'?
   0x0240001d  Free: 3 Inst: 1 ITPUB个人空间m_3c tq.r@O1d
  ITPUB个人空间IsSz v/X`
  --------------------------------------------------------ITPUB个人空间&g6hV'_}Q8W
End dump data blocks tsn: 11 file#: 9 minblk 10 maxblk 10
6x{!vih'|0cW0 这里我们看到 L2块中有两个L1块 分别是 9号块 和 29号块,到这一步,Oracle如何在L2中选择L1?为了提高插入的并行度,这里将根据完成插入操作服务器进程的PID,计算出一个Hash值,根据此Hash值在多个L1中选择一个。也就是在多个L1中根据进程PID随机选择一个。此处要注意的是,高高水点(不是输入错误,高水点在ASSM中有两个:低高水点和高高水点)之后的块不在选择范围内。
d*f)RxOVcn0 如果从两个会话中插入,Oracle会尽量将这两个进程分配到两个L1块中。ITPUB个人空间:M/JZFY.T F J^t
        假设,这里选择了29号,我们再来转储它。
(Q8fVzy0 步4:
4AC n6h oO8Bu0 SQL> alter system dump datafile 9 block 29;ITPUB个人空间3a?{v#`0|Hm
系统已更改。
H4MW C:Q0 *** 2008-02-15 14:00:26.078ITPUB个人空间?k/Ga9n'v
Start dump data blocks tsn: 11 file#: 9 minblk 29 maxblk 29
cN6D*Mv0 buffer tsn: 11 rdba: 0x0240001d (9/29)ITPUB个人空间F{'fB([.H[n/M
scn: 0x0000.001e0767 seq: 0x0c flg: 0x04 tail: 0x0767200c
` ?.fU6N P(w+w1t0 frmt: 0x02 chkval: 0x4faa type: 0x20=FIRST LEVEL BITMAP BLOCK
"\k3`,L0p-k8A!]:r B0 Dump of First Level Bitmap BlockITPUB个人空间 zv4d,T|(XGk7j3S
--------------------------------
7~:DY le?%VQH+q%l0    nbits : 4 nranges: 2         parent dba:  0x0240000a   poffset: 1     ITPUB个人空间4Q;j;f:@/f4Ps$R
   unformatted: 0       total: 10        first useful block: 1      ITPUB个人空间$B+j-}/E AD N
   owning instance : 1ITPUB个人空间 M? w.n(lN
   instance ownership changed at 02/15/2008 12:01:34ITPUB个人空间d$U;w6wT8e \5V;z
   Last successful Search 02/15/2008 12:01:34ITPUB个人空间m~ ~ Vs!Q%P
   Freeness Status:  nf1 0      nf2 1      nf3 0      nf4 0      
:E*B+T"U I~4q$qADxy0
-Y,M1e N h0    Extent Map Block Offset: 4294967295 ITPUB个人空间3f{2pVm F
  First free datablock : 5      ITPUB个人空间\;g5i%D'h0]e@g
   Bitmap block lock opcode 0
[Qh Dibh0    Locker xid:     :  0x0000.000.00000000ITPUB个人空间B@fW^5?n-h:X2R
   Inc #: 0 Objd: 52176
['EHV H0   HWM Flag: HWM SetITPUB个人空间d+@?,ag ZQ9c,B4x'W
      Highwater::  0x02400027  ext#: 4      blk#: 5      ext size: 5     ITPUB个人空间:C uZ Hm]mX{9v
  #blocks in seg. hdr's freelists: 0     
9sN ~s#U0O5r0   #blocks below: 21    ITPUB个人空间v,\f2h0B&]_`^
  mapblk  0x00000000  offset: 4     ITPUB个人空间|/X,r$Ts%b!n q%F
  --------------------------------------------------------ITPUB个人空间bk{M8CfG4\O
  DBA Ranges :
4va l*n R0   --------------------------------------------------------
I1N\,}3HZ/R,Mv0    0x0240001d  Length: 5      Offset: 0      ITPUB个人空间;U5Z%c1f_~o
   0x02400022  Length: 5      Offset: 5      
'}}4M)l,S/fS0   ITPUB个人空间D a%r4d.t+dq
   0:Metadata   1:FULL   2:FULL   3:FULLITPUB个人空间3L4cknO2e
   4:FULL   5:25-50% free   6:FULL   7:FULL
X e0bD4?7`@#R0    8:FULL   9:FULLITPUB个人空间,PUvJM'Z
  --------------------------------------------------------ITPUB个人空间)a&c)R$A'V#{u*_
End dump data blocks tsn: 11 file#: 9 minblk 29 maxblk 29ITPUB个人空间'{1GrvgC TT.|'rH
        此L1块中包含10个数据块,在这10个块中的选择,Oracle也是根据进程的PID,随机挑选。同样,两个不同进程发布的插入,Oracle会尽量使其插入进不同的数据块中,以提高并发性。

TAG:

晶晶小妹的个人空间 晶晶小妹 发布于2008-02-15 21:19:45
小妹第一次发贴,希望各位前辈多多指教!提出错误,让我进步^_^!
Oracle Life eygle 发布于2008-02-15 21:34:36
支持,初次发贴起点高啊!
zhaolinjnu发布于2008-02-15 21:40:59
Good
magic007的Oracle空间 magic007 发布于2008-02-15 21:45:52
支持
DBA 足迹 jimhou 发布于2008-02-15 22:03:38
Good
catchwo的个人空间 catchwo 发布于2008-02-15 22:16:49

idoi发布于2008-02-15 22:26:00
支持,不过自身水平有限,看的稀里糊涂,向你学习
kingsun631的个人空间 kingsun631 发布于2008-02-15 22:31:17
支持!第一次发的帖子啊
NinGoo@Itpub NinGoo 发布于2008-02-15 22:32:36
楼上的都在PMP,鉴定完毕
DBA 足迹 jimhou 发布于2008-02-15 22:51:07
自己水平比较低,好像没有看出auto与manual之间的区别。
stronghearted的个人空间 stronghearted 发布于2008-02-15 22:57:45
第一次发贴,就dump了。oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net!y}(zM-W5ZW3R0W
记得我第一次发贴,DBCA建库没有图形界面出现。
BlgYn@E^9LITPUB个人空间
)^[-h0Kl-xwonderful!
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-15 22:59:10

QUOTE:

原帖由 jimhou 于 2008-2-15 22:51 发表 oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netXUf
u~Z0~v

自己水平比较低,好像没有看出auto与manual之间的区别。
%fiE$i-]eT(Uoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
N+c}-d`|6e hITPUB个人空间在手动段空间管理中,没有L3 L2 L1 块,插入时 可用块的查找过程通过Freelist链表实现.
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-15 23:00:59
多谢大家的支持!ITPUB个人空间2sALTh9wq
嘻嘻,得到eygle大师的夸奖,实在是受宠若惊.嘴巴列到耳朵后面咯.
cp5EE.IX'S9pspace.itpub.net偶会继续努力滴,不辜负大家的支持.
yM?6Ag~
GITPUB个人空间
将我这几年的学习笔记都发上来,大家一起研究^_^!
SingleLove的个人空间 SingleLove 发布于2008-02-16 10:07:09
想问问楼主哪里人,姓啥?
烟囱的个人空间 烟囱 发布于2008-02-16 12:06:58
哈哈,楼上的有想法了.......3q1G4_-FQx
ITPUB个人空间;^-N~b/KZV
学习了.楼主真是厉害.等下拜读第二篇.
lsc800426的个人空间 lsc800426 发布于2008-02-16 12:13:27
厉害!!!
SingleLove的个人空间 SingleLove 发布于2008-02-16 12:23:30

QUOTE:

原帖由 烟囱 于 2008-2-16 12:06 发表
)F{4@P4f哈哈,楼上的有想法了.......KG RHwBy3D
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net9`s vC#ksPg}
学习了.楼主真是厉害.等下拜读第二篇.
9@&pId#Yj
不是。。看到楼主的名字我想到了我一朋友而已
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 12:44:50

QUOTE:

原帖由 SingleLove 于 2008-2-16 10:07 发表
,S,I4Y\i Iz想问问楼主哪里人,姓啥?
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net9B?l&q
k'H


,d_"vi$UvDw)|z
;o0t(Z'Up?
m+lIP Gn
俺家是河南开封滴,历史古城哟~~姓张 论坛ID 是偶的真实姓名
SingleLove的个人空间 SingleLove 发布于2008-02-16 13:05:16

QUOTE:

原帖由 晶晶小妹 于 2008-2-16 12:44 发表 space.itpub.net.xM m r/A-M
space.itpub.net,S
C@)|t9j^4cO

space.itpub.netgR8jT_r

)PF|/uw+{@俺家是河南开封滴,历史古城哟~~姓张 论坛ID 是偶的真实姓名
sGY!A/Tz1CnX%cITPUB个人空间ITPUB个人空间4V'XC S9A8m | R|#P,k
晶晶姑娘,幸会幸会!偶一朋友也叫晶晶来着。所以看着你的ID比较亲切
DBA 足迹 jimhou 发布于2008-02-16 13:17:25
你的试验环境是什么样的。我在试验时auto和manual的结果是一样的,不知道存在什么问题。
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 13:24:00

QUOTE:

原帖由 jimhou 于 2008-2-16 13:17 发表
;K{D%N2r)G?space.itpub.net你的试验环境是什么样的。我在试验时auto和manual的结果是一样的,不知道存在什么问题。
G9k#}?;R7IL4T
:vZ J(JDa/HQ8O-}$rITPUB个人空间我在9i和10G下都做过实验,结果是类似的!ITPUB个人空间 rS;e'Y
~X7A9n1D8NNiW

在LINUX和WIN下我也都试了,是一样的! ZC5b:ok
Vs


c3Wvht
M

你建立表空间的命令是什么? sW2YU9GQ}Re3K
我在10G中建立表空间的命令是: create tablespace new1 datafile 'e:\oracle\jjts\new01.dbf' size 10M extent management local uniform size 40K;oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netH|Xgc Pf
如果在9i中 还要再加上 segment space management auto;
DBA 足迹 jimhou 发布于2008-02-16 13:40:41
和你的方法一样
shiri512003的个人空间 shiri512003 发布于2008-02-16 13:41:51
强帖!!
4Qqa(B}4}oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net老乡呀~~~
Cr}Ye1O@楼主现在在那边呢??
DBA 足迹 jimhou 发布于2008-02-16 13:45:26
我知道错在哪里了,谢谢。
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 13:49:17
楼上的不客气...
l`9o4m0Lvs偶现在在家呢,正在总结以前的学习笔记,想和大家讨论一下.
9@,DO!b0En等我整理的差不多后,准备出去找工作呢!
shiri512003的个人空间 shiri512003 发布于2008-02-16 13:55:22
上qq吗好不容易碰到个老乡
)l        X2s        C3]Z        X5y7G#n;\S'moracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net搞数据库的ITPUB个人空间}6R3@npu
水平还满高oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net Kh6ye6s,BfaHQ%}
希望结识呀
%r)o'Ag!{*XhITPUB个人空间my qq:281613430$e"v        \g5g#~t?
欢迎加我~~~
DBA 足迹 jimhou 发布于2008-02-16 13:55:40
那你应该把简历直接给biti,估计可以免试了。
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 14:36:07

QUOTE:

原帖由 jimhou 于 2008-2-16 13:55 发表
.Dyp
ju-SG([        C"oITPUB个人空间
那你应该把简历直接给biti,估计可以免试了。
space.itpub.net(G;yaBQ0F

P%xz5eRP

.HB b|.G
o
]c+Fs

哈哈,您太抬举我咯! 以前就是工作太忙了,现在想把自己的学习,工作经验好好总结总结.再出去工作!^_^!
lsc800426的个人空间 lsc800426 发布于2008-02-16 15:07:26
[quote]原帖由 晶晶小妹 于 2008-2-16 14:36 发表 ITPUB个人空间G0o)dT)h

Q*q;t,Jx1B;Toracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
"ZJY-\v!t\ U{5`ITPUB个人空间C M^        {E0[G.B5y4h
哈哈,您太抬举我咯! 以前就是工作太忙了,现在想把自己的学习,工作经验好好总结总结.再出去工作!^_^! [/quoteQ`O H|H,mD

y|$c,_|4espace.itpub.net
^6u
ix4u,Dspace.itpub.net
LZ不用自己找应该都有很多人找上门来的。呵呵
;yb3F`Gd7hITPUB个人空间
3P(gM+c_9U对了想问你一个问题:
Al"U;BA'@-fklob$表中主要存放sys和system用户下的一些表。

N(v}P!U"WS/|space.itpub.net
存放这些表主要的用途是什么呀?
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 15:34:57
回答楼上的:catalog.sql 创建数据库时自动运行的脚本,他创建了很多数据字典视图.
7AE        _}g/Y
lspace.itpub.net
查询这个脚本可知,lob$和dba_lobs,dba_varrays相关联,是这两个视图的基本数据字典表之一,可知lob$表中的内容和lob对象,varray对象 相关.
我来说两句

(可选)

日历

« 2010-03-21  
 123456
78910111213
14151617181920
21222324252627
28293031   

数据统计

  • 访问量: 78340
  • 日志数: 32
  • 图片数: 4
  • 建立时间: 2008-02-15
  • 更新时间: 2008-05-29

RSS订阅

Open Toolbar