오라클 데이터형 별 사이즈 추정하기 DB

사이즈 추정하기

작성: 김도근

물리 모델단계에서 로우 사이즈 예측하기가 힘들때가 많다. variable 사이즈를 많이 쓴다면 그에 대한 최대값과 최소값의 편차가 심할가능성이 크다. 예전에 자료를 만든 'Oracle 9i 의 물리 설계' 를 토대로 예측을 해보자.

 

데이터 형

고정/가변

데이터 저장 시의 길이

CHAR

고정/가변

·         바이트수 지정시는 테이블이 정의한 길이의 고정 길이

·         문자 수지정시는 문자 수에 대해서 고정이지만 실점유 바이트 수는 캐릭터 셋 및 실제의 데이터에 의해 다르다. 예를 들면KO16KSC5601 DB로 「char(6 char)」의 컬럼에 「AAA」라고하는 데이터를 넣으면 3바이트 소비되지만 「하하하」라고 하는 2바이트 한글 데이터를 넣으면 6바이트를 소모한다.

VARCHAR2

가변

실제로 저장되고 있는 데이터의 길이(바이트 수 지정시  문자수지정시 )

NCHAR

고정

테이블 정의 지정 문자수의 두배(AL32UTF8 지정시)

NVARCHAR2

가변

저장 문자수의 2(AL32UTF8 지정시)

NUMBER

가변

길이 = 1 + CEIL (n / 2)

·         CEIL는 올림 값 (: ceil(1.2) = 2 )

·         n는 저장된 수치의 정수부 및 소수부를 합한 총자리수. n>38의 경우에는38 이다

·         유효 자리수 38자리수 미만의 음수의 경우는 1바이트 더한다.

DATE

고정

7 바이트

TIMESTAMP

가변

초의 소수부분에 데이터가 있는 경우:11바이트 고정

초의 소수부분에 데이터가 없는 경우:7바이트 고정

TIMESTAMP WITH TIME ZONE

고정

13바이트

TIMESTAMP WITH LOCAL TIME ZONE

고정

11바이트

INTERVAL YEAR TO MONTH

고정

5바이트

INTERVAL DAY TO SECOND

고정

11바이트

RAW

가변

실제로 저장되어 있는 데이터의 길이

LONG

가변

실제로 저장되어 있는 데이터의 길이

LONG RAW

가변

실제로 저장되어 있는 데이터의 길이

BLOB/CLOB/NCLOB

지정에 따라

  • DISABLE IN ROW 지정시:20바이트
  • ENABLE IN ROW 지정해서 저장시:실 데이터 길이+36바이트
  • ENABLE IN ROW지정해서 행 이외(LOB 테이블)에 저장시:실 데이터 길이에 따라 3686 바이트. 저장시에는 여유 있게 86 바이트로 고정해서 계산한다.
  • LOB테이블의 산출에 대해서는 뒷부분을 참조.
  • EMPTY의 경우는 데이터 길이의 부분은 0으로 계산

BFILE

고정

530 바이트

ROWID

고정

6 바이트(Oracle7), 10바이트(Oracle8)

위의 수치를 토대로 예측단계로 넘어가보자. 일반적으로 varchar 타입의 경우에는 약 70% 정도의 값이 들어간다고 가정한다.

 

SQL> desc emp

 

 컬럼명        NULL유무      데이터타입

 ----------------------------------------- -------- ------------------------

 EMPNO        NOT NULL       NUMBER(4)

 ENAME                       VARCHAR2(10)

 JOB                         VARCHAR2(9)

 MGR                         NUMBER(4)

 HIREDATE                    DATE

 SAL                         NUMBER(7,2)

 COMM                        NUMBER(7,2)

 DEPTNO                      NUMBER(2)

 

 

평균 레코드길이를 구하자

 

3:각 컬럼 길이의 예제

컬럼명

데이터 형

컬럼 데이터의 길이

컬럼 헤더의 길이

합계 길이

EMPNO

NUMBER(4)

1 + CEIL (4 / 2) = 3 바이트

1 바이트

4 바이트

ENAME

VARCHAR2(10)

CEIL (10 * 0.7) = 7 바이트

1 바이트

8 바이트

JOB

VARCHAR2(9)

CEIL (9 * 0.7) = 7 바이트

1 바이트

8 바이트

MGR

NUMBER(4)

1 + CEIL (4 / 2) = 3 바이트

1 바이트

4 바이트

HIREDATE

DATE

7 바이트

1 바이트

8 바이트

SAL

NUMBER(7,2)

1 + CEIL (7 / 2) = 5 바이트

1 바이트

6 바이트

COMM

NUMBER(7,2)

1 + CEIL (7 / 2) = 5 바이트

1 바이트

6 바이트

DEPTNO

NUMBER(2)

1 + CEIL (2 / 2) = 3 바이트

1 바이트

3 바이트

중간 합계 레코드 길이

47 바이트

레코드 길이(컬럼 헤더 3바이트를 가산)

50 바이트


                                           [출처] 로우의 사이즈를 추정해보자. |작성자 오라킬

덧글

댓글 입력 영역


메모장

접속정보

통계 위젯 (블랙)

09
22
34774

이 이글루를 링크한 사람 (블랙)

1