oracle的ASSM小結
ASSM採用3級點陣圖,第一個extent至少有3個後設資料塊,L1 – L2 – header(包含L3)
段頭 & L3
Extent control: 儲存HHWM資訊
Header control: 記錄三級點陣圖的基本資訊,其中L2 hint for insert為搜尋可用空間的起始位置
Extent table/Auxillary extent map: 維護extent map資訊
buffer tsn: 115 rdba: 0x11227ca3 (68/2260131)
scn: 0x0860.07f11dac seq: 0x01 flg: 0x04 tail: 0x1dac2301
frmt: 0x02 chkval: 0x7157 type: 0x23=PAGETABLE SEGMENT HEADER
Hex dump of block: st=0, typ_found=1
Extent Control Header
--------------------描述HHWM---------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 23 #blocks: 1024
last map 0x00000000 #maps: 0 offset: 2716
Highwater:: 0x113a3e09 ext#: 22 blk#: 128 ext size: 128 --高水位線塊號/所在extent/該extent塊數
#blocks in seg. hdr's freelists: 0
#blocks below: 1000
mapblk 0x00000000 offset: 22
Unlocked
-------------------描述LHWM-------------------------------------
Low HighWater Mark :
Highwater:: 0x113a3e09 ext#: 22 blk#: 128 ext size: 128
#blocks in seg. hdr's freelists: 0
#blocks below: 1024
mapblk 0x00000000 offset: 22
Level 1 BMB for High HWM block: 0x113a3d8a
Level 1 BMB for Low HWM block: 0x113a3d8a
--------------------------------------------------------
Segment Type: 1 nl2: 1 blksz: 8192 fbsz: 0
L2 Array start offset: 0x00001434
First Level 3 BMB: 0x00000000
L2 Hint for inserts: 0x11227ca2 – 搜尋L2 BMB的起始位置,insert需要使用
Last Level 1 BMB: 0x113a3d8a
Last Level II BMB: 0x11227ca2
Last Level III BMB: 0x00000000
Map Header:: next 0x00000000 #extents: 23 obj#: 345420 flag: 0x20000000
Inc # 0
Extent Map--以(dba, len)形式儲存extent基本資訊,start DBA + length
-----------------------------------------------------------------
0x11227ca1 length: 8
0x11227ca9 length: 8
0x11227cb1 length: 8
.............
0x11400109 length: 128
0x113a3d09 length: 128
0x11400189 length: 128
0x113a3d89 length: 128
Auxillary Map:extent no + L1 BMB of first DBA + first DBA in extent(extent 0前3個塊儲存metadata)
--------------------------------------------------------
Extent 0 : L1 dba: 0x11227ca1 Data dba: 0x11227ca4
Extent 1 : L1 dba: 0x11227ca1 Data dba: 0x11227ca9
Extent 2 : L1 dba: 0x11227cb1 Data dba: 0x11227cb2
Extent 3 : L1 dba: 0x11227cb1 Data dba: 0x11227cb9
.............
Extent 19 : L1 dba: 0x11400109 Data dba: 0x1140010b
Extent 20 : L1 dba: 0x113a3d09 Data dba: 0x113a3d0b
Extent 21 : L1 dba: 0x11400189 Data dba: 0x1140018b
Extent 22 : L1 dba: 0x113a3d89 Data dba: 0x113a3d8b
--------------------------------------------------------
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x11227ca2
注:Extent元資訊存於段頭塊,包括start DBA + length + L1 BMB ,若頭塊空間不足則新分配extent map block專門儲存extent map;
所有L3 BMB以單向連結串列組織在一起,由header control + L2 BMB array組成
Second Level Bitmap block DBAs
--------------------------------------------------------
DBA 1: 0x11227ca2
L2 BMB
L1 BMB陣列構成: L1 BMB DBA + max freeness + instance id
buffer tsn: 115 rdba: 0x11227ca2 (68/2260130)
scn: 0x0860.07f11d99 seq: 0x02 flg: 0x04 tail: 0x1d992102
frmt: 0x02 chkval: 0x4536 type: 0x21=SECOND LEVEL BITMAP BLOCK
Dump of Second Level Bitmap Block
number: 22 nfree: 1 ffree: 20 pdba: 0x11227ca3
Inc #: 0 Objd: 0
opcode:0
xid:
L1 Ranges :
--------------------------------------------------------
0x11227ca1 Free: 1 Inst: 1
0x11227cb1 Free: 1 Inst: 1
0x11227cc1 Free: 1 Inst: 1
.....
0x113a3d89 Free: 3 Inst: 1
0x113a3d8a Free: 1 Inst: 1
Free:從1-5依次為full和75%-100% free
--------------------------------------------------------
L1
由一系列DBA range組成,描述若干連續塊(不可跨extent)的空間利用率,一個extent可由若干BMB描述;
buffer tsn: 115 rdba: 0x11227ca1 (68/2260129)
scn: 0x0860.07f11dac seq: 0x01 flg: 0x04 tail: 0x1dac2001
frmt: 0x02 chkval: 0x69fb type: 0x20=FIRST LEVEL BITMAP BLOCK
Hex dump of block: st=0, typ_found=1
Dump of First Level Bitmap Block
--------------------------------
nbits : 4 nranges: 2 parent dba: 0x11227ca2 poffset: 0
unformatted: 0 total: 16 first useful block: 3
owning instance : 1
instance ownership changed at 02/26/2014 09:35:44
Last successful Search 02/26/2014 09:35:44
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 0
Extent Map Block Offset: 4294967295
First free datablock : 16
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 0
--------------------------------------------------------
DBA Ranges : --因為1個extent有8個塊,而該L1描述了16個塊,故包含2個range
--------------------------------------------------------
0x11227ca1 Length: 8 Offset: 0
0x11227ca9 Length: 8 Offset: 8
0:Metadata 1:Metadata 2:Metadata 3:FULL
4:FULL 5:FULL 6:FULL 7:FULL
8:FULL 9:FULL 10:FULL 11:FULL
12:FULL 13:FULL 14:FULL 15:FULL
--------------------------------------------------------
由L1 BMB描述每個資料塊的空間利用率;
如何搜尋可用空間?
依次查詢L3 – L2 – L1,最終定位到合適的DBA,處理L2/L1時需要PID雜湊值;
1 L2-L1
根據段頭L2 Hint for inserts定位L2,程式依據其PID雜湊值定位L1 並根據L1.free判斷是否有足夠空間;
若滿足條件跳轉到該L1 BMB,否則嘗試下一個L2 BMB;
2 L1-DBA
搜尋L1 BMB,以程式pid雜湊值作為start dba;
發現候選DBA時 程式以nowait模式嘗試獲取塊,若此時塊上有active程式則嘗試下一個,5次嘗試均失敗後則釋放L1 BMB進行buffer busy wait等待;
碰到unformatted塊則一次性格式化N個塊並更新HWM;
結論:
L3包含多個L2,L2包含多個L1,L1包含多個資料塊。
在L3中選擇L2,依賴L2 Hint for inserts。
在L2中選擇L1,根據程式PID號的HASH值
在L1中選擇資料塊,也是根據程式PID號的HASH值。
若L2 BMB包含N個L1 ,L1 BMB又包含M個DBA,則理論上可支援N*M個併發插入程式;
但並未考慮到高水位線,程式只能訪問HHWM之下的塊,假如當前高水位線位於第M個塊,則最大支援M個併發插入程式;
高水位線一次提升的塊數= min(L1 BMB ranges, extent);
Vage有一個很經典的調優案例;
症狀:
某ASSM表每天1分割槽,採用uniform extent每個1M;上午9:00開始併發插入,大約100多個程式;
每天9點左右開始出現buffer busy wait等待,十幾分鐘左右等待消失,然後壓力高的時候,偶而出現競爭,但不如早高峰嚴重
分析:
通過試驗發現新建立的表即便有兩個L1 BMB, 可併發程式只選擇其中1個,每個L1 BMB描述64個塊;
這是由於高水位線的緣故,首次插入時 HHWM提升64個塊,另1個L1 BMB描述的塊均在HHWM之上故無法使用,此時併發度為64;
而當段大於64時,1個L1 BMB描述256個資料塊,而高水位線以128塊(extent)為單位增長,此時最高支援128個併發程式;
故過一段時間後症狀消失,但偶爾會出現競爭;
解決方案:
作者採用兩種措施
1 小於64M時,高水位線一次抬升64個塊(受限於L1 BMB),人為提升高水位線到64M,理論上此時併發程式可插入到<64M的任何1個塊中,併發度非常高;
2 大於64M時,高水位線一次抬升128個塊(受限於extent size),故將其從1M改為4M(2M應該就可以了);
目的都是為了提升插入併發度,其實還有1種解決方案,假定能估算每天資料量,可直接將高水位線提升至此;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15480802/viewspace-1095086/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle assm三級點陣圖結構解析OracleSSM
- 2_深入解析Oracle ASSM結構之Level 2 Bitmap BlockOracleSSMBloC
- 1_深入解析Oracle ASSM 段頭塊(PAGETABLE SEGMENT HEADER)結構OracleSSMHeader
- ORACLE編譯失效物件小結Oracle編譯物件
- oracle DG 日誌傳輸小結Oracle
- oracle資料庫--Oracle雙引號和單引號的區別小結Oracle資料庫
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- relink oracle的結果Oracle
- oracle事務transaction鎖lock一點兒小思考或總結Oracle
- ssh的小總結
- Oracle特性總結Oracle
- Oracle之結構Oracle
- [20220223]bbed讀取資料塊mssm與assm 2.txtSSM
- oracle的interval時間格式的總結Oracle
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)Oracle
- 連結串列中的跳錶小結
- oracle保留兩位小數Oracle
- js中的super小結JS
- jQuery的一點小結jQuery
- 【ORACLE】Oracle繫結變數知識梳理Oracle變數
- Oracle Tuning (Oracle 效能調整)的一些總結(轉)2Oracle
- oracle 左錶連結Oracle
- oracle 邏輯結構Oracle
- Oracle學習總結Oracle
- oracle外來鍵約束的總結Oracle
- Oracle臨時表的用法總結FLOracle
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle
- Django——小結Django
- Runtime小結
- MiniUI小結UI
- mysql小結MySql
- RPA小結
- BootStrap小結boot
- Jquery小結jQuery
- canvas小結Canvas
- js 陣列的方法小結JS陣列
- 小結自己對BFC的理解
- Java 各種鎖的小結Java
- YUIDoc的使用方法小結UI