오라클 테이블 크기와 인덱스 크기 구하는 방법입니다. 많은 자료 입력하려고 보니 에러가 발생해서 차지하고 있는 데이타의 양을 알아보고 싶어졌습니다. 오라클의 구조를 모르기 때문에 각 테이블에서 쓰이는 명칭은 모르지만, 오라클 구조에 대해서도 관심을 가져 알아보면 좋다고 생각합니다. 그럼 테이블 크기 구하는 방법에 대해서 알아보겠습니다.
10g에서 테스트했습니다.
-- 과거 통계자료를 지운다.
ANALYZE TABLE comczipnm DELETE STATISTICS;
-- 현재 시점으로 통계자료를 구성한다.
ANALYZE TABLE comczipnm COMPUTE STATISTICS;
-- 한 개의 BLOCK에 Available 한 Bytes : 1958
-- INI_TRANS :
-- PCT_FREE : Table 의 pct_free 값(default 10)
-- ADJ_ROW_SIZE : 각 row 의 평균 SIZE 추정치
-- ROW_COUNT : table 의 row 의 갯수
-- BLOCK_SIZE : 1 block의 크기 (단위: K)
SELECT GREATEST(4, CEIL(NUM_ROWS/ ((ROUND(((1958-(INI_TRANS*23))*((100 - PCT_FREE)/100))/AVG_ROW_LEN)))) * 2048)/1024/1024 "테이블 크기(MB)"
FROM USER_TABLES
WHERE TABLE_NAME = '테이블명(대문자)';
-- NUM_ROWS : table의 행 갯수(SELECT COUNT(*) FROM 테이블;)
-- 한 개의 block에 available 한 bytes : ( 1935 or 2048 - 113 )
-- INI_TRANS :
-- PCT_FREE : Index 의 PCT_FREE 값(default 10)
-- number_col_index : Index column 의 수(1, 2, 3, 4, ...)
-- total_col_length : Index 의 길이 추정치(인덱스 컬럼의 총합?)
-- UNIQUENESS : 만일 unique index 이면 1, non-unique index 이면 0
-- BLOCK_SIZE : 1 block의 크기 (단위: K)
SELECT GREATEST(4, (1.01) * ((NUM_ROWS / ((floor(((2048 - 113 - (INI_TRANS * 23)) * (1 - (PCT_FREE/100))) / ( (10 + uniqueness) + number_col_index + (total_col_length) ) ) ) ) ) * 2048))/1024/1024 "인덱스 크기(MB)"
FROM USER_TABLES
WHERE TABLE_NAME = '테이블명(대문자)';
'개발 > 오라클' 카테고리의 다른 글
Oracle system에 분 더하기 (0) | 2019.12.13 |
---|---|
오라클 INSERT 문, UPDATE 문, DELETE 문 : 오라클 DML (5) | 2014.01.03 |
오라클 대량 업데이트 : UPDATE (4) | 2013.12.30 |
오라클 쿼리 연습 문제 : 조인 연습 (0) | 2013.12.28 |
오라클 쿼리 연습 : GROUP BY와 함수 연습 (0) | 2013.12.28 |
오라클 쿼리 연습 : 서브쿼리 연습 (0) | 2013.12.28 |
Oracle HR 계정 테이블 구조 : ERD (0) | 2013.12.28 |
오라클 사용자 계정 풀기 언락/락 (0) | 2013.12.28 |
SQL Developer java 경로 : 오라클 11g (0) | 2013.12.23 |
오라클 11g 삭제 : Windows 7 32bit (0) | 2013.12.23 |