개요
ALTIBASE HDB 4.3.9 버전의 디스크 테이블 및 인덱스 사용량 조회 쿼리입니다.
이 쿼리는 ALTIBASE HDB 5.1.1 에서도 사용할 수 있습니다.
디스크 테이블 사용량 조회
ALTIBASE HDB 4.3.9 디스크 테이블 사용량 조회 쿼리
set linesize 1024;
set colsize 20;
SELECT U.USER_NAME 'USER_NAME' -- 데이터베이스 사용자
, TBL.TABLE_NAME 'TABLE_NAME' -- 테이블 이름
, TBS.NAME 'TBS_NAME' -- 테이블이 속한 테이블스페이스 이름
, TO_CHAR((TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE)/1024 , '999,999,999') 'TBS_MAX(KB)' -- 테이블스페이스의 최대 크기
, TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024, '999,999,999') 'ALLOC(KB)' -- 테이블에서 할당받은 전체 크기
, TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_FULL_COUNT)/1024, '999,999,999') 'USED(KB)' -- 테이블의 실 사용량(데이터 사용량)
, TO_CHAR((((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/(TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE))*100), '99.9') 'USAGE(%)' -- 테이블스페이스 최대 크기를 기준으로 한 사용률
FROM X$SEGMENT SEG
, SYSTEM_.SYS_TABLES_ TBL
, V$TABLESPACES TBS
, SYSTEM_.SYS_USERS_ U
WHERE SEG.TABLE_OID = TBL.TABLE_OID
AND SEG.SPACE_ID = TBL.TBS_ID
AND SEG.SPACE_ID = TBS.ID
AND TBL.USER_ID = U.USER_ID
AND TBL.TABLE_TYPE = 'T'
AND SEG.SEGMENT_TYPE = 6
ORDER BY USER_NAME, TABLE_NAME
;
출력 예시
디스크 인덱스 사용량 조회
ALTIBASE HDB 4.3.9 디스크 인덱스 사용량 조회 쿼리
set linesize 1024
set colsize 20
SELECT U.USER_NAME AS 'USER_NAME' -- 데이터베이스 사용자
, TBL.TABLE_NAME AS 'TABLE_NAME' -- 테이블 이름
, IDX.INDEX_NAME AS 'INDEX_NAME' -- 인덱스 이름
, TBS.NAME AS 'TBS_NAME' -- 인덱스가 속한 테이블스페이스 이름
, TO_CHAR((TBS.TOTAL_PAGE_COUNT * TBS.PAGE_SIZE)/1024 , '999,999,999') AS 'TBS_MAX(KB)' -- 테이블스페이스의 최대 크기
, TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_TOTAL_COUNT)/1024, '999,999,999') AS 'ALLOC(KB)' -- 인덱스에서 할당받은 전체 크기
, TO_CHAR((TBS.A_EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.EXTENT_FULL_COUNT )/1024, '999,999,999') AS 'USED(KB)' -- 인덱스의 실 사용량(데이터 사용량)
, TO_CHAR((((TBS.A_EXTENT_PAGE_COUNT * SEG.EXTENT_TOTAL_COUNT)/TBS.TOTAL_PAGE_COUNT)*100), '99.9') AS 'USAGE(%)' -- 테이블스페이스의 최대 크기를 기준으로 한 사용률
FROM X$SEGMENT SEG
, V$INDEX I
, SYSTEM_.SYS_INDICES_ IDX
, SYSTEM_.SYS_TABLES_ TBL
, V$TABLESPACES TBS
, SYSTEM_.SYS_USERS_ U
WHERE SEG.TABLE_OID = I.TABLE_OID
AND SEG.SEGMENT_DESC = I.INDEX_SEG_DESC
AND I.INDEX_ID = IDX.INDEX_ID
AND IDX.TABLE_ID = TBL.TABLE_ID
AND SEG.SPACE_ID = IDX.TBS_ID
AND SEG.SPACE_ID = TBS.ID
AND IDX.USER_ID = U.USER_ID
AND TBL.TABLE_TYPE = 'T'
AND SEG.SEGMENT_TYPE = 5
ORDER BY U.USER_NAME, TBL.TABLE_NAME, IDX.INDEX_NAME
;
결과 예시
참고 - 디스크 테이블 및 인덱스 수 확인 방법
디스크 테이블 수 조회 쿼리
set linesize 1024
set colsize 30
SELECT 'TABLE CNT : '||COUNT(*) TABLE_COUNT
FROM V$DISKTBL_INFO D
, SYSTEM_.SYS_TABLES_ T
WHERE D.TABLE_OID = T.TABLE_OID ;
디스크 인덱스 수 조회 쿼리
set linesize 1024;
set colsize 30;
SELECT 'INDEX CNT : '||COUNT(*) INDEX_COUNT
FROM SYSTEM_.SYS_INDICES_
WHERE TABLE_ID IN (SELECT TABLE_ID
FROM SYSTEM_.SYS_TABLES_ T
, V$DISKTBL_INFO D
WHERE T.TABLE_OID = D.TABLE_OID);