– Cache Layer Data
Block Header

  20 Bytes (Fixed)

  _ Data Block Address

  _ INC : 소속된 Segment 가 변경될 때마다 증가 (4 bytes)

  _ SEQ : Block 에 대한 수정이 발생할 때마다 증가 (4 bytes)

  _ Data Struct Version

  _ Block Type


– Transaction Layer
Data Block Header

  24 Bytes (Fixed) + 23 Bytes (1 ITL Entry) =
47 Bytes

  _ SCN (System Change Number)

  _ Number of ITLs

  _ Flag (‘O’: on the free list, ‘-‘:not on the
free list)

  _ Type of Block (1 : Data, 2:Index)

  _ Data Block Address of the next block on the
free list


– Transaction Layer
ITL Entries

  Variable Length. 23 * (Number of ITLs – 1)

  _ Transactin ID

  _ undo block address

  _ flag

  _ Number of rows affected by this transaction

 

– ITL(Interested
Transaction List) –

  _ Block
변경하는 모든 Transaction ITL을 만들게 되며, Block 마다 기록됨.

  _ INITRANS : Initial number of ITLs when a
segment is created

  _ MAXTRNS 
: Maximum number of ITLs for a given segment block

 

– Data Layer Fixed
Header

  14 bytes (Fixed)

  _ block data area size

  _ data layer header size

  _ address pointer to the buffer holding the
block

  _ flag

  _ number of tables

  _ number of rows in the block

  _ free space size

– Data Layer
Variable Header

  Number of tables * 4 + Number of rows * 2
(Table Directory, Row Dicrectory)

  _ location of row

– Data Block
Trailer (End of Block 4 bytes)

  4 Bytes (Fixed) consists of INC + SEQ



Row
Structure in a Block




– Row Header
Information

  _ row가 속한 table

  _ row directory 상에 표현된 row index

  _ row size(header + data)

  _ flag

  _ ITL entry or 0 (if the row is not locked)

 


* Row
Chaining

– Row길이가 block size를 초과하는 경우 몇 개의 block에 걸쳐서 chaining된다.

row update되는데
필요한 free space가 부족하면 그 row는 다른 block으로 migrate된다.

– Row Chaining 이 발생해도 원래 Row ROWID값은 변하지 않음 (ROWID ROW 생성후 삭제시까지 변하지 않음)

– Chaining 이 많이 발생하면  많은 block access하여야 하므로 I/O performance가 저하된다.


By haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다