오라클 Admin (Segment, Datablock, Undo)

1. Segment란? 익스텐트 상위의 논리적 저장단위, 하나 이상의 익스텐트가 모여 세그먼트를 이룸 2. Segment의 종류 Data Segments(Table, Table partition, Cluster), Index Segments(Index-organized table, Index partition), Undo Segments(또는 Rollback Segment라고 한다), Temporary Segments 등
참고 : Object와 Segment 가. Object : Table, Index, Sequenct 등과 같이 Oracle에서 생성가능한 모든 것들 나. Segment : Object 중에서 저장공간을 가지는 것들(Index, Table 등)
3. Extent의 할당과 반환 가. 할당 : Created, Extended 등이 이뤄질 때, 테이블에 컬럼이 추가 될 때 등 나. 반환 : Droped, Truncated 등이 이뤄질 때, 테이블에 컬럼이 삭제 될 때 등 참고 : Delete 명령으로는 Extend의 반환이 이뤄지지 않는다. 4. Database Block 가. I/O의 최소단위 나. 1개 또는 1개 이상의 OS 블록으로 구성 다. DB_BLOCK_SIZE가 기본 블록사이즈로 데이터베이스 생성시 고정 라. 9i에서의 기본 블록사이즈 : 4K 마. 10g이상에서의 기본 블록사이즈 : 8K
참고 : OS 블록의 여러개 모여 1개의 오라클 블록을 이룰 때 만일 오라클의 DB_BLOCK_SIZE가 OS 블록보다 큰 경우, 여러개의 OS 블록이 1개의 오라클 1블록을 이루게 된다. 이때 OS 블럭은 같은 곳에 연속적으로 저장되거나 분산저장될 수 있는데, 분산저장된 오라클 1블록은 연속저장된 오라클 1블록의 액세스 속도보다 느리게 되므로 저장시 주의가 필요하다.
5. Multipel Block Size 가. 1개의 표준 블록 사이즈와 최대 4개의 비표준 블록 사이즈 지원 나. System, Temporary 테이블 스페이스는 표준 블록사이즈만 지원 다. 9i 이상 버전부터 지원한다. 라. 사용하지 않기를 권장한다. 마. Multiple Block size 사용환경에서는 ASSM을 사용할 수 없다.
Create tablespace tbs_1
datafile 'tbs_1.dbf'
size 10M blocksize 4K;
6. Data Block의 구성 사용자 삽입 이미지

HEADER 대표적으로 ITL(Interested Transaction List) 정보가 들어있다. ITL은 이 블록을 변경하고자 하는 트랜잭션의 List을 의미하는데 Block의 Header에서 ITL를 관리한다.

ITL은 블록을 변경하는 트랜잭션의 정보를 담고 있는 List 이다. 처음 INITANS 값에 의해 몇개의 Slot (Entry)을 만들지 정하게 되는데 이 INITANS 값은 테이블 생성시 설정한다. Slot은 트랜젝션이 발생할 때 Free한 Slot이 없으면 증가하게 된다. 이때 동시에 존재할 수 있는 slot의 개수는 MAXTRNAS으로 설정된 개수 값과 block의 여유 공간 내에서 결정된다. (10g부터는 MAXTRANS이 255로 고정) 만약 block 의 여유공간이 없다면 다른 트랜젝션이 끝나서 Slot 이 해제 될 때까지 기다린다.( ITL WAIT EVENT) 참고 : http://wiki.ex-em.com/index.php/Enq:_TX_-_allocate_ITL_entry http://avdeo.com/2008/06/16/interested-transaction-list-itl/
출처 : http://tawool.tistory.com/193
참고 : PCTFREE 사용의 장단점 가. 장점 : Row Migration 감소 나. 단점 : 공간 낭비 발생
참고 : Row Chaining 및 Row Migration 가. Row Chaining : DB_BLOCK_SIZE보다 너무 큰 데이터가 들어왔을 경우, 인접한 다른 블록까지 데이터가 기록되는 현상을 말한다. 연결된 블록이 하나의 블록으로 처리되어야 하므로 I/O 가 증가하여 성능이 감소한다. 나. Row Migration : Update 시 기존 블록에 데이터를 갱신할 수 없을 경우, 새로운 블록으로 아예 Row(행) 자체를 옮기는 것을 말한다. 옮기기 전의 위치에는 옮긴 데이터의 위치를 저장한다(포인터). 원하는 데이터를 검색하기 위해 여러 블럭을 찾아야 하므로 I/O가 증가하여 성능이 감소한다.
7. Data Block의 관리 가. ASSM(Automatic Segment-Space Management) : Bitmap 방식을 이용(2비트 사용)하여 각 블록마다 블록의 상태정보 표시(00 : 25%, 01 : 25~50%, 10 : 50~75%, 11 : 75 ~ 100%), 9i 부터 사용 나. FLM(Free List Management) : Freelist를 통해 세그먼트 공간 관리(수동), 8i 이하 버전
create tablespace data02
datafile '/u01/oradata/data02.dbf' size 5M
segment space management auto;
※중요 : 9i 버전에서는 “segment space management auto” 미 입력시 FLM 방식으로 테이블스페이스가 생성되므로, ASSM 방식을 사용하기 위해서는 필히 명시해 주어야한다.
참고 : Free List / Dirty List 가. Free List : Disk 상에서 비어있는 블록의 목록 나. Dirty List : Disk 상에서 사용중인 블록의 목록
8. Data Block의 수동관리 가. PCTFREE, PCTUSED, FREELIST의 매개변수를 사용하여 수동관리가 가능하다. 나. ASSM환경 하에서는 PCTFREE 매개변수만 사용가능하며, PCTUSED, FREELIST의 매개변수는 무시한다. 9. Undo Data의 관리 가. AUM(Automatic Undo Management) : 오라클 서버가 관리, 테이블스페이스 생성 시 기본값 1) 테이블스페이스 생성 나. MUM(Manual Undo Management) : DBA가 수동 관리 1) 테이블스페이스 생성 2) Rollback Segment 생성 3) enable 10. Undo Segment의 목적 가. Transaction rollback 나. Transaction recovery(=Instance recovery) 다. Read Consistency 11. Read Consistency 여러사용자가 동시에 같은 데이터에 접근 시 쿼리 또는 트랜잭션이 시작된 시점을 기준으로 일관성 있게 데이터를 읽어들이는 것 예) A 사용자가 100번 ‘홍길동’의 데이터를 ‘임꺽정’으로 수정하고 있으며 commit를 하지 않은 상태 B 사용자가 100번 데이터를 쿼리시 ‘임꺽정’이 아닌 ‘홍길동’을 보게 되는 데 이것을 Read Consistency(읽기 일관성)이라고 한다. 만약 A사용자가 commit를 하게 된다면, 이후부터는 ‘임꺽정’이라는 데이터를 보게 된다.
참고 : Undo Retention 트랜잭션이 종료된 후에라도 지정된 시간동안은 트랜잭션과 관련되었던 Undo Segment를 재사용하지 못하도록 하는 기능 – 9i 기본값 : 10800초(3시간) – 10g 기본값 : 900초(15분)
참고 : Snapshot too old Read Consistensy에 의해 데이터를 읽어내려가다 다른 트랜잭션에 의해 읽고 있던 Undo Segment가 재사용되 필요한 Undo 정보를 얻을 수 없을 때 방생하는 오류, 이를 해결하기 위해서는 Undo Retention 파라미터 수치를 조정한다.
12. AUM의 초기 파라미터
UNDO_MANAGEMENT=AUTO
UNDO_TABLESPACE=UNDOTBS
13. Undo 테이블스페이스 생성/변경 가. 생성
create undo tablespace undo1
datafile '/u01/oradata/undo1.dbf'
size 10M;
나. 변경
alter system set undo_tablespace=undo1;

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다