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

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

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

查看( 1614 ) / 评论( 53 )
服务器进程寻找空闲块的步骤:ITPUB个人空间plP\9]6^}8jWl
        在ASSM表空间中,执行Insert声明时,Oracle是如何为声明分配可用块的?
-Y@X-`5F"p8AVA0         以前已经有网友论证,在ASSM中,可用块的管理,由L3、L2和L1三级位图块实现。具体的步骤就是,先通过数据字典找到段头,而段头其实就是表的第一个L3块,在其中寻找L2。根据执行插入声明的服务器进程的PID,计算出一个随机HASH值,根据此HASH值,在L2中找到一个L1。再根据服务器进程的PID,在L1中查找一个可用的数据块,并在其中插入新行。具体的步骤如下:ITPUB个人空间o~7JH GR8f
步1:ITPUB个人空间gQ`wT GL
        我的实验环境如下:
S:t%c wI#A }H0 块大小:8K;区大小40K;实验表现占5个区;ITPUB个人空间&sq'|-nj2qdR
        假设现在用户端发来命令如下:ITPUB个人空间~ AU/`%iDz)[1d
        Insert into new01_jj_1 values(1,’a’);
h P'D4P-Co0         首先,对于new01_jj_1,数据库并不理解这是什么,Oracle首先要去查询数据字典表,了解这一串字母的具体意义,例如,Oracle要确定这是一个视图、同义词,或是一个表等等,这些操作,就是递归操作,我们只拣和我们今天的论题相关的说,Oracle要先查找seg$数据字典表,找出段头的文件号和块号,我们将这一步操作化为对基于seg$数据字典表的视图:Dba_segments的操作:
'@b*C4c2E/Q8[ U/f s0 SQL> select header_block,header_file,segment_type from dba_segments where segment_name='NEW01_JJ_1';
`m5C*V!hm }0 HEADER_BLOCK HEADER_FILE SEGMENT_TYPEITPUB个人空间2H/GY9g#NE
------------ ----------- ------------------
(jE#GBJb7tK{)D0 11        9 TABLEITPUB个人空间/A)`2B Rn W
步2:根据上面的显示结果可知,段头是在9号文件的第11号块,段头是第一个L3块,在L3中保存着L2块的地址,L2块保存着L1块的地址,L1块保存着数据块的地址。所以想查找数据库的第一步,就是要先找到L3块,并在其中搜索可用的L2块,下面我们转储表的第一个L3块,即段头:9号文件11号块,然后在其中搜索可用的L2块。ITPUB个人空间Lfmhu;CA
转储命令如下:
-_En5qFa"B0}Pm ?0 SQL> alter system dump datafile 9 block 11;
,H3a"ts0v'l {%pw+v0 系统已更改。
&z)Nge/\X-W0 转储结果如下:
+{ L8f-O x0B4o&|0 *** 2008-02-15 13:46:50.562
[\;N*g:q5a/Lc|m g0 *** SERVICE NAMESYS$USERS) 2008-02-15 13:46:50.515
)w4n.Jn7s;`IIB S0 *** SESSION ID206.4) 2008-02-15 13:46:50.515ITPUB个人空间3@k8o6CE!]$@$N
Start dump data blocks tsn: 11 file#: 9 minblk 11 maxblk 11
vBhe7w)F&KzG!s0 buffer tsn: 11 rdba: 0x0240000b (9/11)
px1}9K:C;V+_0 scn: 0x0000.001e0767 seq: 0x01 flg: 0x04 tail: 0x07672301
V;w-c cmnH,B5v0 frmt: 0x02 chkval: 0x604a type: 0x23=PAGETABLE SEGMENT HEADER
;sUl3~"Z,H^0   Extent Control HeaderITPUB个人空间H ` w.Q'h-xQ+Z
  -----------------------------------------------------------------
n6_0kEW-n0   Extent Header:: spare1: 0      spare2: 0      #extents: 5      #blocks: 25    ITPUB个人空间N2HvYub
                  last map  0x00000000  #maps: 0      offset: 2716  ITPUB个人空间X]r/P3F ET
      Highwater::  0x02400027  ext#: 4      blk#: 5      ext size: 5     
lPL(J5h+GyD0   #blocks in seg. hdr's freelists: 0     
K3V {1U0ODW3~q0   #blocks below: 21   
0Y5q;Bb TtV0   mapblk  0x00000000  offset: 4     ITPUB个人空间o!s1VGn v#{G7Kg|
                   Unlocked
|"Ae*Lm4~$eF0   --------------------------------------------------------
H^'wc7N0X0   Low HighWater Mark :
1fp$]nQj"e0       Highwater::  0x02400027  ext#: 4      blk#: 5      ext size: 5     
[6_N _1g0   #blocks in seg. hdr's freelists: 0     
h1a7jZp~0   #blocks below: 21   
kHxu2?0   mapblk  0x00000000  offset: 4     
/zS-QHq}0cVU0   Level 1 BMB for High HWM block: 0x0240001d
#[gXhf;o0   Level 1 BMB for Low HWM block: 0x0240001dITPUB个人空间;gt#Q O;Ee
  --------------------------------------------------------ITPUB个人空间0i$uy$~E%P)P!y
  Segment Type: 1 nl2: 1      blksz: 8192   fbsz: 0      
~&jZ%K"` {0   L2 Array start offset:  0x00001434ITPUB个人空间3V8B#G]-XT
  First Level 3 BMB:  0x00000000
J nlo{m$nq0   L2 Hint for inserts:  0x0240000a
mH+S_EUR0   Last Level 1 BMB:  0x0240001dITPUB个人空间#Z0gd%Wk7CY"O E
  Last Level II BMB:  0x0240000a
F~ U+R9vk@0   Last Level III BMB:  0x00000000
6p] [%n3zqG3zm"@4E `$C0      Map Header:: next  0x00000000  #extents: 5    obj#: 52176  flag: 0x10000000
[[-C"q)P_0   Inc # 0
!d M?V7x&Zj6A}0   Extent Map
}"P'?)z&lyW9J4H0   -----------------------------------------------------------------ITPUB个人空间.qig Y.n
   0x02400009  length: 5     
+Z9wf:Oq&b\0    0x0240000e  length: 5     ITPUB个人空间A!^mvTQ
   0x02400018  length: 5     ITPUB个人空间 x(B/n&Su*C
   0x0240001d  length: 5     ITPUB个人空间9~#k1E,L@
   0x02400022  length: 5     ITPUB个人空间,M| \|2u["|
  
R/tCn.C p,c0   Auxillary MapITPUB个人空间s ?%~ hu-I[ K
  --------------------------------------------------------
+G'|(r)g8S$c6p)[ ^Q0    Extent 0     :  L1 dba:  0x02400009 Data dba:  0x0240000c
:[}5J1B"XB#v}Dc2E uD%A0    Extent 1     :  L1 dba:  0x02400009 Data dba:  0x0240000e
kk q"ueuLU-h$i0    Extent 2     :  L1 dba:  0x02400009 Data dba:  0x02400018ITPUB个人空间 _(OT'^nb4] x
   Extent 3     :  L1 dba:  0x0240001d Data dba:  0x0240001e
}tprYWu0    Extent 4     :  L1 dba:  0x0240001d Data dba:  0x02400022ITPUB个人空间3Bp5f(ubIMO*QF6E
  --------------------------------------------------------ITPUB个人空间Rs7b8v/`?,hsM.P
  
rg5y ZNnuK%c0    Second Level Bitmap block DBAs
@*W X] d1d7m;]l0    --------------------------------------------------------
7PW5I$\:g Yt6Fe ~0    DBA 1:   0x0240000aITPUB个人空间,E6MHup
  ITPUB个人空间Jz-S|?/?!Z^
End dump data blocks tsn: 11 file#: 9 minblk 11 maxblk 11
VgW\)GD7o/S%p0 ITPUB个人空间.b@#yk1C*w l
查看上面的信息,可知现在表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个人空间a7nT dhK)?i"_
步3:转储L2块9号文件10号块:
%vtm,J}Yz1JAL0 SQL> alter system dump datafile 9 block 10;ITPUB个人空间i,gTI2S{Ssv5J
系统已更改。
7QG/X _7e6\ WN0 *** 2008-02-15 13:52:03.359ITPUB个人空间w)i$c@9w ygn:T:e }
Start dump data blocks tsn: 11 file#: 9 minblk 10 maxblk 10
fyp}C0 buffer tsn: 11 rdba: 0x0240000a (9/10)ITPUB个人空间-O:p/JBY!n6r"J`
scn: 0x0000.001e0767 seq: 0x01 flg: 0x04 tail: 0x07672101
7v7fT"g^R ]'L0 frmt: 0x02 chkval: 0x4cfb type: 0x21=SECOND LEVEL BITMAP BLOCKITPUB个人空间q0C Jv%q7k yAiz

$]BU&pK5XD"L0 Dump of Second Level Bitmap BlockITPUB个人空间t U n |p P5_a#qh
   number: 2       nfree: 1       ffree: 1      pdba:     0x0240000b
V l)S|5Q-QyM0    Inc #: 0 Objd: 52176
s9`%y] DF2{0   opcode:0 ITPUB个人空间&p&\7fn0u.nmO8V
xid: ITPUB个人空间'\Nw2O6T$o
  L1 Ranges :
5E:JZ8dO{y0   --------------------------------------------------------
e T |X.g.P q0    0x02400009  Free: 1 Inst: 1 ITPUB个人空间1A]5[iv3z
   0x0240001d  Free: 3 Inst: 1 ITPUB个人空间&kO/Ndp1Gh
  ITPUB个人空间7Okr wQ6Q
  --------------------------------------------------------ITPUB个人空间LD!o%f6tM
End dump data blocks tsn: 11 file#: 9 minblk 10 maxblk 10
7O)w*uR.~ n0 这里我们看到 L2块中有两个L1块 分别是 9号块 和 29号块,到这一步,Oracle如何在L2中选择L1?为了提高插入的并行度,这里将根据完成插入操作服务器进程的PID,计算出一个Hash值,根据此Hash值在多个L1中选择一个。也就是在多个L1中根据进程PID随机选择一个。此处要注意的是,高高水点(不是输入错误,高水点在ASSM中有两个:低高水点和高高水点)之后的块不在选择范围内。ITPUB个人空间a&K'}+s ?@)f-f
如果从两个会话中插入,Oracle会尽量将这两个进程分配到两个L1块中。ITPUB个人空间x!mu|6~Yct
        假设,这里选择了29号,我们再来转储它。ITPUB个人空间)^7_7Y!},z;R:}4zm
步4:ITPUB个人空间}:IH4Tr)|0|
SQL> alter system dump datafile 9 block 29;
js @ x h9y0 系统已更改。ITPUB个人空间W7N$h)y%^ m
*** 2008-02-15 14:00:26.078ITPUB个人空间 r)Y8},}HT&\
Start dump data blocks tsn: 11 file#: 9 minblk 29 maxblk 29
7O!O%e~pH3J4ew0 buffer tsn: 11 rdba: 0x0240001d (9/29)
%rAHO"fi8A0 scn: 0x0000.001e0767 seq: 0x0c flg: 0x04 tail: 0x0767200c
Ri]Dv_0 frmt: 0x02 chkval: 0x4faa type: 0x20=FIRST LEVEL BITMAP BLOCK
#RmTm,u+EhI D5V `$A0 Dump of First Level Bitmap Block
pQ#Gug N%]0 --------------------------------
W"`W@8YsnU0    nbits : 4 nranges: 2         parent dba:  0x0240000a   poffset: 1     ITPUB个人空间 D1rYAbf"{
   unformatted: 0       total: 10        first useful block: 1      
g,r*d ~g"ey6`)G0    owning instance : 1ITPUB个人空间r,Ecn6s0u
   instance ownership changed at 02/15/2008 12:01:34ITPUB个人空间 hq;b? E b
   Last successful Search 02/15/2008 12:01:34
3w%EK+Y4|puS ` \0    Freeness Status:  nf1 0      nf2 1      nf3 0      nf4 0      ITPUB个人空间;y;S0sH*I1Ua Iqm

&\.G6r0D m A7{7f0    Extent Map Block Offset: 4294967295
`5e%zl`D!jNXj7j7k0   First free datablock : 5      ITPUB个人空间5Hr8b!D*c:fVnC
   Bitmap block lock opcode 0
h@ P&NU:w0    Locker xid:     :  0x0000.000.00000000
8Mk)_A*snh0    Inc #: 0 Objd: 52176 ITPUB个人空间R n:v/\vG
  HWM Flag: HWM SetITPUB个人空间0Wo5j],Fu ` nT:^z L
      Highwater::  0x02400027  ext#: 4      blk#: 5      ext size: 5     ITPUB个人空间xS9Y&Ap1[`]w
  #blocks in seg. hdr's freelists: 0     
i9q t/gJ0   #blocks below: 21   
7jB8Jmg0   mapblk  0x00000000  offset: 4     
)C-nU0WU\n^0   --------------------------------------------------------
'T9E |2T]7E-[0   DBA Ranges :
]0E-@t1IL'DU0   --------------------------------------------------------ITPUB个人空间.BLX8SL*Q.|V#H
   0x0240001d  Length: 5      Offset: 0      ITPUB个人空间'I _o(pe+Gfxa7HA
   0x02400022  Length: 5      Offset: 5      
6X9ILZ4W0   ITPUB个人空间 E^"^I rXD
   0:Metadata   1:FULL   2:FULL   3:FULLITPUB个人空间sJF$hF5c`y|
   4:FULL   5:25-50% free   6:FULL   7:FULLITPUB个人空间9}+IfC-vS:l-s pS
   8:FULL   9:FULL
h"Qw]7L0iS*j#`0   --------------------------------------------------------ITPUB个人空间4{+ep+O*\d(U
End dump data blocks tsn: 11 file#: 9 minblk 29 maxblk 29
Pk^)w(BM0         此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了。
Z%Rc T4M*koracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net记得我第一次发贴,DBCA建库没有图形界面出现。~3J _gaB        IT9A#~4vf
space.itpub.net%v        C        _N)YLO1v5i
wonderful!
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-15 22:59:10

QUOTE:

原帖由 jimhou 于 2008-2-15 22:51 发表
2BH9RB%|5~y|自己水平比较低,好像没有看出auto与manual之间的区别。
-DjuXf+?
space.itpub.netL puY)SZ,[
在手动段空间管理中,没有L3 L2 L1 块,插入时 可用块的查找过程通过Freelist链表实现.
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-15 23:00:59
多谢大家的支持!space.itpub.net{IA
j        w
F,k

嘻嘻,得到eygle大师的夸奖,实在是受宠若惊.嘴巴列到耳朵后面咯.m2I1\ G7ZWs*]
偶会继续努力滴,不辜负大家的支持.'\!w        NIC
将我这几年的学习笔记都发上来,大家一起研究^_^!
SingleLove的个人空间 SingleLove 发布于2008-02-16 10:07:09
想问问楼主哪里人,姓啥?
烟囱的个人空间 烟囱 发布于2008-02-16 12:06:58
哈哈,楼上的有想法了.......
^)L        X+EN N$?2PUspace.itpub.netoracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net]'Mx8?T        D+~~Ay)s
学习了.楼主真是厉害.等下拜读第二篇.
lsc800426的个人空间 lsc800426 发布于2008-02-16 12:13:27
厉害!!!
SingleLove的个人空间 SingleLove 发布于2008-02-16 12:23:30

QUOTE:

原帖由 烟囱 于 2008-2-16 12:06 发表 oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net(yrk/R i J
哈哈,楼上的有想法了.......
iTA Glh%^
.\XBO{;@-my学习了.楼主真是厉害.等下拜读第二篇.
fr"^ Us*h不是。。看到楼主的名字我想到了我一朋友而已
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 12:44:50

QUOTE:

原帖由 SingleLove 于 2008-2-16 10:07 发表
8t4^S_Bj5h想问问楼主哪里人,姓啥?
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net#T_+R'v7g9_?
,Y1nwG6d
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netJ^#a&b|&jsM"g
俺家是河南开封滴,历史古城哟~~姓张 论坛ID 是偶的真实姓名
SingleLove的个人空间 SingleLove 发布于2008-02-16 13:05:16

QUOTE:

原帖由 晶晶小妹 于 2008-2-16 12:44 发表 Thm        |s"{

R'Qvab4nQ
Qspace.itpub.net

G},{EM__ O


.?M#Y$o~Di俺家是河南开封滴,历史古城哟~~姓张 论坛ID 是偶的真实姓名
Q)Zk!`/Kin zDC;V6A/n's1u*eL
晶晶姑娘,幸会幸会!偶一朋友也叫晶晶来着。所以看着你的ID比较亲切
DBA 足迹 jimhou 发布于2008-02-16 13:17:25
你的试验环境是什么样的。我在试验时auto和manual的结果是一样的,不知道存在什么问题。
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 13:24:00

QUOTE:

原帖由 jimhou 于 2008-2-16 13:17 发表 oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.netl$Z^iaoB:t6l
你的试验环境是什么样的。我在试验时auto和manual的结果是一样的,不知道存在什么问题。
1}g@`+yg~feITPUB个人空间

P ] sX)dR"K3T
我在9i和10G下都做过实验,结果是类似的!
b*idiw-^(N.iS

在LINUX和WIN下我也都试了,是一样的!!_N'oE2B6uvSZ,H:Zx
|)D`D
SB
~        g{J5U

你建立表空间的命令是什么?rlH+I X$jkv
我在10G中建立表空间的命令是: create tablespace new1 datafile 'e:\oracle\jjts\new01.dbf' size 10M extent management local uniform size 40K;H E-@!_N7L
lQH[%[8|

如果在9i中 还要再加上 segment space management auto;
DBA 足迹 jimhou 发布于2008-02-16 13:40:41
和你的方法一样
shiri512003的个人空间 shiri512003 发布于2008-02-16 13:41:51
强帖!!1^5E        RD3z
I

老乡呀~~~
5J y@E;pus+]voracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net楼主现在在那边呢??
DBA 足迹 jimhou 发布于2008-02-16 13:45:26
我知道错在哪里了,谢谢。
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 13:49:17
楼上的不客气...
ZCwt$H[偶现在在家呢,正在总结以前的学习笔记,想和大家讨论一下._        kdvL,L
等我整理的差不多后,准备出去找工作呢!
shiri512003的个人空间 shiri512003 发布于2008-02-16 13:55:22
上qq吗好不容易碰到个老乡a8m6D4Vu.F
搞数据库的C/v-g"XEI,t        X9ic        Ad6Z
水平还满高
9U3XFf6M;dH+W希望结识呀8iYt\%r9Z$w
my qq:281613430space.itpub.net9I
a1~?$?*a"x9D6U

欢迎加我~~~
DBA 足迹 jimhou 发布于2008-02-16 13:55:40
那你应该把简历直接给biti,估计可以免试了。
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 14:36:07

QUOTE:

原帖由 jimhou 于 2008-2-16 13:55 发表 ITPUB个人空间sl1I&t+?/^6a5p
那你应该把简历直接给biti,估计可以免试了。
oracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net!~2HL#yK
z`1HXcs4S

j2zpJ4]
ITPUB个人空间/N0v
`*q @P,mJ2hwM

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


]:u*~({.d'r@KG2z
?;a;t
w
s)@$~noracle,db2,sqlserver,sybase,mysql,erp,scm,sap,java,.net
Sl$]oL#@'^Fq
哈哈,您太抬举我咯! 以前就是工作太忙了,现在想把自己的学习,工作经验好好总结总结.再出去工作!^_^! [/quote
rt
d!o2Y~w

3i _B|^.t
ZYB-_$IV4O cITPUB个人空间LZ不用自己找应该都有很多人找上门来的。呵呵 2o3Ydh"G/m
f

:dOf O L7i%s:@
对了想问你一个问题:-L/B&Eu r~e~
lob$表中主要存放sys和system用户下的一些表。
0e}$H3Nm^ITPUB个人空间存放这些表主要的用途是什么呀?
晶晶小妹的个人空间 晶晶小妹 发布于2008-02-16 15:34:57
回答楼上的:catalog.sql 创建数据库时自动运行的脚本,他创建了很多数据字典视图.ITPUB个人空间
S)T6^,{C2z5jl%h
kq;f

查询这个脚本可知,lob$和dba_lobs,dba_varrays相关联,是这两个视图的基本数据字典表之一,可知lob$表中的内容和lob对象,varray对象 相关.
我来说两句

(可选)

日历

« 2009-07-04  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

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

RSS订阅

Open Toolbar