현재 테이블들이 얼마의 데이타를 사용하고 있는지는 테이블스페이스의 사용량을 보고 대략 짐작할 수 있다. 그러나 테이블의 각각의 레코드 사이즈에 데이타건수를 곱하여 세밀하고 조사하고 싶을 경우에는 아래와 같이 테이블의 레코드 사이즈를 구해볼 수 있다.
테이블의 디스크사용량이나 예측용량을 구하기 위하여 우선 아래의 sql를 사용할 수 있다. 물론 SYS 유저 이거나 system dictionary 테이블을 grant 받아서 조회가 가능해야 하겠다.
SELECT OWNER 소유자, TABLE_NAME 테이블ID,
TABLE_COMMENT 테이블명, SUM(DATA_LENGTH) 레코드사이즈
FROM (
SELECT A.OWNER OWNER,
A.TABLE_NAME TABLE_NAME,
B.COMMENTS AS TABLE_COMMENT,
A.COLUMN_NAME,
C.COMMENTS AS COLUMN_COMMENT,
A.DATA_TYPE,
A.DATA_LENGTH DATA_LENGTH,
A.NULLABLE AS NULLABLE,
A.DATA_DEFAULT,
A.DATA_PRECISION AS PRECISION,
A.DATA_SCALE AS SCALE,
B.TABLE_TYPE,
A.COLUMN_ID
FROM ALL_TAB_COLUMNS A,
ALL_TAB_COMMENTS B,
ALL_COL_COMMENTS C
WHERE A.OWNER = B.OWNER(+)
AND A.TABLE_NAME = B.TABLE_NAME(+)
AND A.OWNER = C.OWNER(+)
AND A.TABLE_NAME = C.TABLE_NAME(+)
AND A.COLUMN_NAME = C.COLUMN_NAME(+)
-- AND
A.TABLE_NAME LIKE 'TB%'
ORDER BY A.OWNER ,
A.TABLE_NAME ,
A.COLUMN_NAME
)
GROUP BY OWNER, TABLE_NAME,
TABLE_COMMENT
ORDER BY OWNER, TABLE_NAME
그러면 아래와 같이 결과가 나온다. 소유자별로 테이블 별 레코드 사이즈가 나온다. 물론 CLOB나 BLOB 필드의 경우 이것을 보정해주는 로직이 별도로 필요하겠다. 참고로 DATE 타입의 경우 사이즈로 7 BYTE 로 잡고 있다.
소유자 |
테이블ID |
테이블명 |
레코드사이즈 |
SYS |
ALL_STAT_EXTENSIONS |
Optimizer statistics extensions |
4,099 |
SYS |
ALL_STORED_SETTINGS |
Parameter settings for objects |
4,124 |
SYS |
ALL_STREAMS_COLUMNS |
Streams unsupported columns |
213 |
SYS |
ALL_STREAMS_GLOBAL_RULES |
Global rules |
4,239 |
SYS |
ALL_STREAMS_MESSAGE_RULES |
Rules for Streams |
4,191 |
SYS |
ALL_STREAMS_NEWLY_SUPPORTED |
List of objects |
103 |
SYS |
ALL_STREAMS_RULES |
Rules used by streams processes |
12,469 |
SYS |
ALL_STREAMS_SCHEMA_RULES |
Rules created by streams |
4,269 |
SYS |
ALL_STREAMS_TABLE_RULES |
Rules created by streams |
8,306 |
SYS |
ALL_STREAMS_TRANSFORM_FUNCTION |
Rules-based transform functions |
8,071 |
SYS |
ALL_STREAMS_UNSUPPORTED |
List of all the tables |
102 |
이제 이 레코드사이즈 에다가 데이타 건수만 곱하면 전체 디스크용량이 나올 것이다. 5년치 용량을 원한다면 다시 곱하기 5, 왠지 용량에 자신감이 없다면 보정치로 1.2 정도를 더 곱해 주면 되겠다~~
마지막으로 추가로 고려해야 할 것이 INDEX 테이블의 용량을 고려한다.
테이블 용량의 보통 20%를 인덱스로 사용하게 된다고 보면 아까 곱한 것에다가 0.3을 더 보태서 보정치로 1.5를 곱하면 되지 않을까?
어디까지나 이것은 주먹구구식 계산방법이고 좀더 과학적인 방법은 인터넷의 다른 글을 참고하면 될 것이다. PCTFEE 뭐 이런거 고려하고 데이타 타입별 가중치 주고 하는 그런 계산법이 있는데 난 머리 아파서 그렇게 못 해!
'컴퓨터활용 > 오라클' 카테고리의 다른 글
오라클 테이블스페이스 용량 늘리기 (0) | 2012.02.13 |
---|---|
오라클(Oracle) SID 및 DB_NAME 확인 방법 (1) | 2012.02.10 |
Oracle Locking Survival Guide (0) | 2011.11.30 |
오라클 LOCK 조회 및 KILL 방법 (2) | 2011.11.30 |
오라클 매뉴얼 (0) | 2011.04.04 |