– 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가 저하된다.