본문 바로가기

ETL Tools

[ETL 개발]테이블 데이터 용량 산정

이 방법을 통하여 정확한 용량 산정을 할 수 없습니다. 필요시 참고만 하세요.


2년동안 발생한 데이터를 한번에 적재하는데 오류가 발생했다. 


ORA-01688 : 테이블 스페이스 확장 오류


데이터 담을 그릇 용량이 작다는 거다. 


늘려달라 요청을 하니 용량 산정을 해달란다. 


어찌하나 용량산정을...


생각을 하다.


SUM(테이블 컬럼당 사이즈) = ROW MAX 데이터 사용 용량

ROW MAX 데이터 사용 용량 * 특정 기간 발생 건수 * a(예비 공간  = 예상 데이터 사용 용량


아래는 그런식으로 뽑은 나의 SQL QUERY다.  


WITH A AS (

SELECT 

    TABLE_NAME, 

    SUM(DATA_LENGTH) BYTES,  DECODE(TABLE_NAME,테이블 당 건수) MTH_CNT,

    SUM(DATA_LENGTH) * DECODE(TABLE_NAME, 테이블 당 건수 ) MAX_BYTES

FROM ALL_TAB_COLUMNS 

WHERE OWNER = '테이블 스키마' AND TABLE_NAME 

IN (대상 테이블 리스트)

GROUP BY TABLE_NAME

SELECT 

    SUM(MAX_BYTES)||' BYTE' "1달 데이터 용량(BYTE)",

    CEIL(SUM(MAX_BYTES)/1024/1024/1024)||' GB' "1달 데이터 용량(GB)", 

    (SUM(MAX_BYTES) * 24 * 1 )    ||' BYTE' "2년 예상 데이터 용량(BYTE)",

    (SUM(MAX_BYTES) * 24 * 1.5)  ||' BYTE' "2년 예상 index 용량(BYTE)",

    CEIL((SUM(MAX_BYTES) * 24 * 1)/1024/1024/1024)||' GB' "2년 예상 데이터 용량(GB)" ,

    CEIL((SUM(MAX_BYTES) * 24 * 1.5)/1024/1024/1024)||' GB' "2년 예상 index  용량(GB)" ,

    CEIL((SUM(MAX_BYTES) * 24 * 2.5)/1024/1024/1024)||' GB' "2년 예상 전체 용량(GB)" 

FROM A;


요건 참고로. 

내가 좋아하는 DBA 님께서 주신 팁!

 - 데이터 용량 산정 방법: (컬럼 평균사이즈*로우스*(1 + 0.2(헤더값감안))) + 인덱스 사이즈 

 - 컬럼평균사이즈 = ROW 행에 대한 사이즈 평균 (LENGTHB 를 통해 구해도 된다함.)

 - 인덱스별로 + 18바이트 (rowid) + a

2012.04.24 Updated by Cheon





2012.09.12 추가 정보


DB 용량 계산

 

select segment_name, segment_type, sum(bytes)/1024/1024

from USER_SEGMENTS

group by segment_name, segment_type;