이 방법을 통하여 정확한 용량 산정을 할 수 없습니다. 필요시 참고만 하세요.
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;