"데이터 블럭"의 두 판 사이의 차이
DB CAFE
(새 문서: == 데이터 블럭 == https://misogain.wordpress.com/wp-content/uploads/2024/05/data_block_layer.png # Data Block Header #:* Cache Layer와 Transaction Layer 로 구성됨 ## Cache...) |
|||
(같은 사용자의 중간 판 6개는 보이지 않습니다) | |||
1번째 줄: | 1번째 줄: | ||
== 데이터 블럭 == | == 데이터 블럭 == | ||
+ | |||
+ | === 데이터 블럭 전체 레이아웃 === | ||
+ | |||
+ | [[파일:Oracle_data_block_layout.gif|600픽셀|오라클 데이터 블럭 레이아웃]] | ||
+ | |||
+ | ---- | ||
+ | |||
https://misogain.wordpress.com/wp-content/uploads/2024/05/data_block_layer.png | https://misogain.wordpress.com/wp-content/uploads/2024/05/data_block_layer.png | ||
− | + | * 블럭 세부 항목별 사이즈 조회 | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<source lang=sql> | <source lang=sql> | ||
select component, type, description, type_size | select component, type, description, type_size | ||
30번째 줄: | 23번째 줄: | ||
KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8 | KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8 | ||
</source> | </source> | ||
+ | |||
+ | === Data Block Header === | ||
+ | https://misogain.wordpress.com/wp-content/uploads/2024/05/block_header.png | ||
+ | |||
+ | * Cache Layer와 Transaction Layer 로 구성됨 | ||
+ | |||
+ | ==== Cache Layer ==== | ||
+ | * Cache Layer 저장 정보 | ||
+ | # Data Block Address(DBA) | ||
+ | # Block Type(ex. Table, Index, Undo, ...) | ||
+ | # Block Format(ex. v6, v7, v8, ...) | ||
+ | # System Change Number(SCN: 복구작업 등에 사용됨) | ||
+ | |||
+ | * 블럭 덤프로 확인 | ||
+ | <source lang=sql> | ||
+ | SQL> alter session set tracefile_identifier='DBCAFE'; | ||
+ | |||
+ | Session altered. | ||
+ | |||
+ | SQL> alter system dump | ||
+ | 2 datafile '/ORA19/app/oracle/oradata/ORACLE19/system01.dbf' block 2; | ||
+ | |||
+ | System altered. | ||
+ | |||
+ | SQL> ! | ||
+ | $ cd /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace | ||
+ | $ ls *DBCAFE* | ||
+ | oracle19_ora_14320_DBCAFE.trc oracle19_ora_14320_DBCAFE.trm | ||
+ | $ vi oracle19_ora_14320_DBCAFE.trc | ||
+ | </source> | ||
+ | |||
+ | |||
+ | ==== Transaction Layer ==== | ||
+ | https://misogain.wordpress.com/wp-content/uploads/2024/05/block_header_transaction_layer.png | ||
+ | |||
+ | |||
+ | * Transaction Layer 는 Fixed(고정) 와 Variable(가변) 영역으로 구성됨 | ||
+ | |||
+ | # Fixed(고정) 영역 | ||
+ | #:* v$type_size에서 KTBBH | ||
+ | ## Block Type | ||
+ | ## 마지막 수행된 Block Cleanout 시간 | ||
+ | ## ITL Entry 정보 | ||
+ | ## Free List Link 정보 | ||
+ | ## Free Space Lock 정보 | ||
+ | # Variable(가변) 영역 | ||
+ | #:* v$type_size에서 KTBIT | ||
+ | ## 해당 Block에 있는 Row를 변경하길 원하는 ITL 관련 정보 | ||
+ | |||
+ | {{틀:고지상자2 | ||
+ | |제목= ITL(Interested Transaction List): | ||
+ | |내용 = # 간단히 말하면, 변경 대기자 명단 임. | ||
+ | # 특정 Block에 데이터를 변경해야 할 경우 해당 Block의 사용자 명단에 자신의 정보를 적고 변경을 해야 함. | ||
+ | # 만약 다른 사용자가 그 Block을 수정하고 있어서 진입하지 못하는 상황이라면 대기자 명단(ITL)에 자신의 정보를 적고 자신의 순서가 될 때까지 기다림. | ||
+ | }} | ||
+ | |||
+ | === Data Header === | ||
+ | # Table Directory | ||
+ | # Row Directory | ||
+ | ## 첫 번째 빈 공간의 포인터 주소 | ||
+ | ## 빈 공간의 시작과 끝의 offset 주소 | ||
+ | ## 사용 가능한 빈 공간의 양 | ||
+ | # Free Space | ||
+ | # Row Data | ||
+ | |||
+ | * Block 에 데이터가 insert 될 경우, 데이터가 우선 가운데(Free space)로 입력된 후 실제 데이터는 Row data로, 데이터의 정보는 Row Directory로 기록됨. | ||
+ | * Block 에 데이터가 update될 경우, 일단 먼저 기존 공간을 재활용하려고 시도함. | ||
+ | *: 만약 데이터의 용량이 기존 공간을 초과하고, 비어있는 공간이 연속적이지 않다면 kdbcps() 함수를 호출해서 공간을 압축함. |
2024년 6월 26일 (수) 19:41 기준 최신판
thumb_up 추천메뉴 바로가기
- DBA { Oracle DBA 명령어 > DBA 초급 과정 > DBA 고급 과정 }
- 튜닝 { 오라클 튜닝 목록 }
- 모델링 { 데이터 모델링 가이드 }
목차
1 데이터 블럭[편집]
1.1 데이터 블럭 전체 레이아웃[편집]
- 블럭 세부 항목별 사이즈 조회
select component, type, description, type_size
from v$type_size
where component in ('KCB', 'KTB');
COMPONEN TYPE DESCRIPTION TYPE_SIZE
-------- -------- -------------------------------- ----------
KCB KCBH BLOCK COMMON HEADER 20
KTB KTBIT TRANSACTION VARIABLE HEADER 24
KTB KTBBH TRANSACTION FIXED HEADER 48
KTB KTBBH_BS TRANSACTION BLOCK BITMAP SEGMENT 8
1.2 Data Block Header[편집]
- Cache Layer와 Transaction Layer 로 구성됨
1.2.1 Cache Layer[편집]
- Cache Layer 저장 정보
- Data Block Address(DBA)
- Block Type(ex. Table, Index, Undo, ...)
- Block Format(ex. v6, v7, v8, ...)
- System Change Number(SCN: 복구작업 등에 사용됨)
- 블럭 덤프로 확인
SQL> alter session set tracefile_identifier='DBCAFE';
Session altered.
SQL> alter system dump
2 datafile '/ORA19/app/oracle/oradata/ORACLE19/system01.dbf' block 2;
System altered.
SQL> !
$ cd /ORA19/app/oracle/diag/rdbms/oracle19/oracle19/trace
$ ls *DBCAFE*
oracle19_ora_14320_DBCAFE.trc oracle19_ora_14320_DBCAFE.trm
$ vi oracle19_ora_14320_DBCAFE.trc
1.2.2 Transaction Layer[편집]
- Transaction Layer 는 Fixed(고정) 와 Variable(가변) 영역으로 구성됨
- Fixed(고정) 영역
- v$type_size에서 KTBBH
- Block Type
- 마지막 수행된 Block Cleanout 시간
- ITL Entry 정보
- Free List Link 정보
- Free Space Lock 정보
- Variable(가변) 영역
- v$type_size에서 KTBIT
- 해당 Block에 있는 Row를 변경하길 원하는 ITL 관련 정보
notifications_active ITL(Interested Transaction List):
- 간단히 말하면, 변경 대기자 명단 임.
- 특정 Block에 데이터를 변경해야 할 경우 해당 Block의 사용자 명단에 자신의 정보를 적고 변경을 해야 함.
- 만약 다른 사용자가 그 Block을 수정하고 있어서 진입하지 못하는 상황이라면 대기자 명단(ITL)에 자신의 정보를 적고 자신의 순서가 될 때까지 기다림.
1.3 Data Header[편집]
- Table Directory
- Row Directory
- 첫 번째 빈 공간의 포인터 주소
- 빈 공간의 시작과 끝의 offset 주소
- 사용 가능한 빈 공간의 양
- Free Space
- Row Data
- Block 에 데이터가 insert 될 경우, 데이터가 우선 가운데(Free space)로 입력된 후 실제 데이터는 Row data로, 데이터의 정보는 Row Directory로 기록됨.
- Block 에 데이터가 update될 경우, 일단 먼저 기존 공간을 재활용하려고 시도함.
- 만약 데이터의 용량이 기존 공간을 초과하고, 비어있는 공간이 연속적이지 않다면 kdbcps() 함수를 호출해서 공간을 압축함.