2010. 7. 22. 16:12
Transaction - Block layer DataBase이야기2010. 7. 22. 16:12
TFT 동작 방식 분석
TFT는 트랜잭션 수행으로(일반적으로 DELETE 작업)인해 블록의 사용률이 PCTUSED 이하로 내려갈 경우, 해당 프리블록을 관리하는 리스트이다.
Extent Control Header
-----------------------------------------------------------------
Extent Header:: spare1: 0 spare2: 0 #extents: 1 #blocks: 127
last map 0x00000000 #maps: 0 offset: 4128
Highwater:: 0x0180000d ext#: 0 blk#: 3 ext size: 127
#blocks in seg. hdr's freelists: 2
#blocks below: 3
mapblk 0x00000000 offset: 0
Unlocked
Map Header:: next 0x00000000 #extents: 1 obj#: 55736 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x0180000a length: 127
nfl = 1, nfb = 1 typ = 1 nxf = 1 ccnt = 3
SEG LST:: flg: USED lhd: 0x0180000c ltl: 0x0180000c
XCT LST:: flg: USED lhd: 0x0180000a ltl: 0x0180000a xid: 0x0007.007.0000077b
FreeLists가 2개로 증가하였으며 TFL의 개수를 나타내는 nxf 값이 1로 증가하였음을 확인 할 수 있다. 그리고 XCT라는 부분이 추가 되었다.
nfl = 2, nfb = 1 typ = 1 nxf = 0 ccnt = 0
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
1개의 MFL과 2개의 PFL이 생성됨을 확인 할 수 있다. FREELISTS를 2로 설정함에 따라 2개의 PFL이 추가로 생성된 것이다. PFL은 PID값을 이용하여 사용할 프리리스트를 정하게 되므로 세션의 PID값을 확인해 보도록하자.
#blocks in seg. hdr's freelists: 1
#blocks below: 3
mapblk 0x00000000 offset: 0
Unlocked
Map Header:: next 0x00000000 #extents: 1 obj#: 55996 flag: 0x40000000
Extent Map
-----------------------------------------------------------------
0x0180008a length: 127
nfl = 2, nfb = 1 typ = 1 nxf = 0 ccnt = 0
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
SEG LST:: flg: UNUSED lhd: 0x00000000 ltl: 0x00000000
SEG LST:: flg: USED lhd: 0x0180008c ltl: 0x0180008c
End dump data blocks tsn: 7 file#: 6 minblk 137 maxblk 137
덤프를 확인해 보면 MFL을 제외한 2개의 PFL중에서 두번째 PFL이 사용되었음을 알 수 있다.
--PFL 할당 공식
select mod(12,2)+1 as PFL_Number from dual;
block header dump flg : - fsl : 0 fnx : 0x0 ver : 0x01
flg : (-)은 프리블록이 아니며, O는 프리블록이다.
fsl : TFL의 개수를 나타낸다.
fnx : 다음 프리블록에 대한 주소값을 나타낸다.
L1BMB Dump결과 분석
Start dump data blocks tsn: 8 file#: 7 minblk 9 maxblk 16
buffer tsn: 8 rdba: 0x01c00009 (7/9)
scn: 0x0000.0070ebc2 seq: 0x01 flg: 0x04 tail: 0xebc22001
frmt: 0x02 chkval: 0x4cf1 type: 0x20=FIRST LEVEL BITMAP BLOCK
nbits : 4 nranges: 1 parent dba: 0x01c0000a poffset: 0
unformatted: 5 total: 8 first useful block: 3
owning instance : 1
instance ownership changed at
Last successful Search
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 0
Extent Map Block Offset: 4294967295
First free datablock : 3
Bitmap block lock opcode 0
Locker xid: : 0x0000.000.00000000
Inc #: 0 Objd: 55997
HWM Flag: HWM Set
Highwater:: 0x01c0000c ext#: 0 blk#: 3 ext size: 8
#blocks in seg. hdr's freelists: 0
#blocks below: 0
mapblk 0x00000000 offset: 0
--------------------------------------------------------
DBA Ranges :
--------------------------------------------------------
0x01c00009 Length: 8 Offset: 0
type: 0x20=FIRST LEVEL BITMAP BLOCK : L1BMB 임을 알 수 있다.
parent dba : L1BMB를 관리하는 L2BMB의 주소 값을 나타낸다.
select to_char(to_number('01c','XXXXXXXX'))/4 as fno,
to_char(to_number('0000a','XXXXXXXX')) as bno
from dual;
7/10
L2BMB의 위치는 7번 파일의 10번째 블록이 된다. L1BMB의 위치는 7번 파일의 9번째 블록이 되므로 바로 다음 블록이 해당 L1BMB을 관리하는 L2BMB임을 알 수 있다.
unformatted: 5 total: 8 first useful block: 3
L1BMB에서 관리하는 블록의 정보를 나타낸다. total 8개의 블록을 관리하며, 포맷되지 않은 블록이 5개 이고 사용가능한 첫 번째 이터 블로그이 순번을 나타낸다.
Freeness Status: nf1 0 nf2 0 nf3 0 nf4 0
블록들의 Freeness상태를 확인 할 수 있다. 블록들이 포맷되지 않은 상태에서 모두 0을 나타낸다.
DBA Ranges :
--------------------------------------------------------
0x01c00009 Length: 8 Offset: 0
L1BMB가 관리하는 익스텐트의 정보를 나타냄. 현재 L1BMB는 0x01c0009블록부터 8 개의 블록을 관리한다.
인덱스 브렌치 블록에는 어떤 값들이 저장될까?
----- begin tree dump
branch: 0x180018a 25166218 (0: nrow: 2, level: 1)
leaf: 0x180018b 25166219 (-1: nrow: 3 rrow: 3)
leaf: 0x180018c 25166220 (0: nrow: 2 rrow: 2)
----- end tree dump
블록 타입 , 블록 주소, 포지션, nrow(해당 블록에 저장되었떤 최대 인덱스 엔트리 수 ), rrows( 현재 해당 블록에 저장된 인덱스 엔트리 수 인덱스 키 값이 삭제되면 줄어듬)
level(브랜치 블록 레벨->리프 블록은 내부적으로 0으로 인식함)
브랜치 블록의 DBA를 이용하여 블록 덤프를 수행해보자.
'DataBase이야기' 카테고리의 다른 글
Transaction - PGA Layer (0) | 2010.07.26 |
---|---|
Transaction - Block Layer - ASSM (0) | 2010.07.23 |
Transaction-BlockLayer (0) | 2010.07.19 |
Transaction - Enqueue (0) | 2010.07.16 |
Transaction-Undo (0) | 2010.07.16 |