테이블 파티셔닝에 대해 공부하면서 오라클을 이용한 파티셔닝 생성 구문에서 이해가 안되는 create 구문이 존재하여 검색을 해보게 되었다.
그리고 그에 대한 내용을 정리해보았다.
테이블 생성
CREATE TABLE NEW_EMP (ENO NUMBER(10), ENAME VARCHAR2(10)
)
TABLESPACE USERS
PCTFREE 10
PCTUSED 40
INITRANS 1
MAXTRANS 255
STORAGE
(
INITIAL 65536
NEXT 1048576
MINEXTENTS 1
MAXEXTENTS UNLIMITED
BUFFER_POOL DEFAULT
PCTINCREASE 50
)
LOGGING
DISABLE ROW MOVEMENT ;
TABLESPACE
- 테이블이 생성될 TABLESPACE를 지정해주는 옵션
- 테이블이나 인덱스 등을 넣기 위한 공간
- 테이블스페이스는 한 개 이상의 세그먼트를 보관할 수 있다.
❓ 세그먼트(Segment)
- 테이블이나 인덱스 등 데이터를 보관하는 것을 의미
- 세그먼트는 한 개 이상의 Extent로 구성
❓ 익스텐트(Extent)
- 주로 관리를 쉽게 하기 위한 데이터의 집합
- Extent는 연속된 블록으로 구성
❓ 블럭(Block)
- 주로 관리를 쉽게 하기 위한 데이터의 집합
- 오라클 블록은 OS 블록으로 구성된다.
- 일반적으로 오라클 블록을 최소단위라 여긴다.
PCTFREE
- 블럭 내에 이미 존재하고 있는 Row에 Update가 가능하도록 예약시켜 놓는 블럭의 퍼센트 값을 지정한다.
- ex) 'PCTFREE 20'으로 설정하면, 데이터 블록의 20%를 사용 가능한 빈 영역으로 유지하여 각 블록에 있는 행을 갱신하는 데 사용한다는 의미이다.
- 기본값은 10%이다.
- INDEX 값은 수정이 자주 발생하지 않기 때문에 PCTFREE는 5%가 적당하다.
- PCTFREE가 적을 경우
- 기존 테이블 행 갱신에 의한 확장을 위해 적은 공간을 확보한다.
- 많은 Row가 한 불럭 안에 INSERT 될 수 있다.
- 수정이 적은 세그먼트에 적합하다.
- PCTFREE가 클 경우
- 블럭 당 적응 Row가 INSERT 된다.
- 즉, 같은 Row를 입력하기 위해 많은 블럭이 필요하다.
- Row의 조각을 자주 Caching할 필요가 없으므로 수행속도가 증가한다.
- 자주 수정되는 세그먼트에 적합히다.
PCTUSED
- 오라클 서버가 테이블의 각 데이터 블록에 대해 유지하려는 사용 공간의 최소 백분율
- 데이터 세그먼트에 대해 지정한다.
- ex) 'PCTUSED 40'으로 설정하면, 데이터 블록의 사용영역이 39%보다 적어지지 않으면 새로운 행을 삽입할 수 없음을 의미한다.
- 기본값은 40%이다.
✨ PCTFREE와 PCTUSED의 합이 100을 초과하지 않는 범위 내에서 0에서 99까지의 값을 PCTFREE 값으로 사용할 수 있다.
INITRANS
- 세그먼트의 속성 중 동시 트랜잭션 수를 제어하는 옵션
- 기본값은 2이며, 최소값도 2이다.
MAXTRANS
- 세그먼트의 속성 중 동시 트랜잭션 수를 제어하는 옵션
- 10g 버전 이후로 무시되는 파라미터 이다.
- 기본값은 255이며 최소값도 255로, 고정값이다.
STORAGE
데이터베이스 객체를 저장하는 방법을 지정할 수 있다.
INITIAL
- 세그먼트가 생성되면서 할당될 때 첫 번째 확장 영역의 크기
- 세그먼트가 생성될 때 INITIAL의 크기로 처음 Extent가 생성되고, 현재 Extent가 꽉 차면 다음과 같은 방식으로 새로운 Extent를 할당한다.
- Next Extent = Next * (1+Pctincrease/100)
NEXT
- 다음 Extent의 크기
- 두 번째 확장영역의 NEXT의 원래 크기와 동일하며, 다음부터의 NEXT는 (1+Pctincrease/100)과 Next의 이전 크기를 곱한 크기로 설정된다.
MINEXTENTS
생성할 Extent의 최소값
MAXEXTENTS
생성할 Extent의 최대값
PCTINCREASE
- Extent의 증가율
- 기본값은 50이다.
LOGGING
- 로깅 옵션(기본값으로 설정되어있다.)
- 테이블 작업시 REDO를 생성한다.
- NOLOGGING으로 옵션을 변경할 수 있지만, 이 경우 복구가 잘 되지 않는다.
- NOLOGGING 옵션은 REDO를 생성하지 않는다.
- NOLOGGING을 사용하는 경우
- 객체의 초기 생성
- Direct Path 모드에서의 SQL *Loader 사용
- 재구성(Rebuild)
DISABLE ROW MOVEMENT
- 행 이동의 비활성화
- 행 이동을 활성화 할 경우 flashback table, shrink 할 때 enable로 바꾸고 작업을 한다.
참고
https://positivemh.tistory.com/329
http://www.gurubee.net/lecture/1103
'공부 기록 > Database' 카테고리의 다른 글
[PostgreSQL] Upsert 구문(INSERT … ON CONFLICT) (0) | 2023.06.22 |
---|---|
[PostgreSQL] Table Scan 종류 (0) | 2023.04.27 |
[PostgreSQL] 쿼리 실행 계획 분석(explain, analyze) (0) | 2023.04.27 |
[DB] DB 파티셔닝(Partitioning)의 개념과 종류 (0) | 2023.04.25 |
H2 설치 및 데이터 베이스 생성 (0) | 2023.04.12 |