...
- DELETE 로 테이블의 데이터를 삭제하더라도 USED 는 줄어들지 않습니다.
- DELETE 후 FREE PAGE 를 제외한 실제 USED 를 확인하려면 ALTER TABLE table_name AGING ; 을 수행해야 합니다.
ALTER TABLE ~ AGING ; 수행 중에는 테이블에 X락을 잡기 때문에 해당 테이블에 대한 다른 요청은 대기 상태가 되므로 수행 시 주의 해야 합니다.
No Format title ALTIBASE HDB 5.3.x, 5.5.1, 6.1.1, 6.3.1 디스크 테이블 사용량 조회 쿼리 language sql SELECT U.USER_NAME USER_NAME -- 데이터베이스 사용자 , TBL.TABLE_NAME TABLE_NAME -- 테이블 이름 , DECODE(TBL.IS_PARTITIONED, 'T', TBL.PARTITION_NAME, 'F', '-') PARTITIONED_TABLE -- 파티션드 테이블 이름 , TBS.NAME TABLESPACE_NAME -- 테이블스페이스 , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024, '999,999,999,999') 'MAX(KB)' -- 테이블이 속한 테이블스페이스의 최대 크기 , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.TOTAL_EXTENT_COUNT)/1024, '999,999,999,999') 'ALLOC(KB)' -- 현재까지 할당 받은 크기 , TO_CHAR(SEG.TOTAL_USED_SIZE/1024, '999,999,999,999') 'USED(KB)' -- 할당받은 공간 중 데이터가 포함된 크기 FROM (SELECT TBL.USER_ID , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , TBL.TABLE_NAME , PT.PARTITION_NAME , DECODE(TBL.IS_PARTITIONED, 'F', TBL.TBS_ID, 'T', PT.TBS_ID) TBS_ID , TBL.IS_PARTITIONED FROM SYSTEM_.SYS_TABLES_ TBL LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON TBL.TABLE_ID = PT.TABLE_ID WHERE TBL.TABLE_TYPE = 'T' ) TBL , (SELECT S.TABLE_OID, SUM(S.TOTAL_EXTENT_COUNT) TOTAL_EXTENT_COUNT, SUM(S.TOTAL_USED_SIZE) TOTAL_USED_SIZE FROM X$SEGMENT S WHERE S.SEGMENT_TYPE IN (6, 7) /* 6 : 테이블, 7 : LOB 데이터(6.1.1 이상), 5 : 인덱스 */ GROUP BY S.TABLE_OID) SEG , SYSTEM_.SYS_USERS_ U , V$TABLESPACES TBS , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = TBL.TABLE_OID AND U.USER_ID = TBL.USER_ID AND D.SPACEID = TBL.TBS_ID AND TBS.ID = TBL.TBS_ID ORDER BY USER_NAME, TABLE_NAME, PARTITIONED_TABLE ;
Code Block title 결과 예시 language sql USER_NAME TABLE_NAME PARTITIONED_TABLE TABLESPACE_NAME MAX(KB) ALLOC(KB) USED(KB) ------------------------------------------------------------------------------------------------------------------------------------------------------- SYS DISK_T - USER_DATA 2,097,152 316,160 316,032 SYS DISK_T2 - USER_DATA 2,097,152 256 8 SYS EMP - SYS_TBS_DISK_DATA 2,097,152 256 16 SYS PART_T1 P1 PART_DATA 1,048,576 768 520 SYS PART_T1 P2 PART_DATA 1,048,576 768 520 SYS PART_T1 P3 PART_DATA 1,048,576 126,464 126,384 SYS PART_T2 P201406 PART_DATA 1,048,576 11,520 11,280 SYS PART_T2 P201407 PART_DATA 1,048,576 22,784 22,544 SYS PART_T2 P201408 PART_DATA 1,048,576 5,888 5,648 SYS PART_T2 P201512 PART_DATA 1,048,576 8,704 8,464 SYS PART_T2 PMAX PART_DATA_DEF 1,048,576 9,728 9,592 SYS RANGE2 DEF SYS_TBS_DISK_DATA 2,097,152 256 8 SYS RANGE2 Q1_2014 SYS_TBS_DISK_DATA 2,097,152 112,896 112,688 SYS RANGE2 Q2_2014 SYS_TBS_DISK_DATA 2,097,152 56,576 56,352 SYS RANGE2 Q3_2014 SYS_TBS_DISK_DATA 2,097,152 1,792 1,704 SYS RANGE2 Q4_2014 SYS_TBS_DISK_DATA 2,097,152 768 576 SYS RANGE_SALES DEF SYS_TBS_DISK_DATA 2,097,152 256 8 SYS RANGE_SALES Q1_2014 SYS_TBS_DISK_DATA 2,097,152 5,888 5,648 SYS RANGE_SALES Q2_2014 SYS_TBS_DISK_DATA 2,097,152 11,520 11,280 SYS RANGE_SALES Q3_2014 SYS_TBS_DISK_DATA 2,097,152 8,704 8,464 SYS RANGE_SALES Q4_2014 SYS_TBS_DISK_DATA 2,097,152 4,096 3,952 21 rows selected.
디스크 인덱스
...
- DELETE 로 테이블의 데이터를 삭제하더라도 인덱스의 USED 는 줄어들지 않습니다.
- DELETE 후 FREE PAGE 를 제외한 실제 USED 를 확인하려면 ALTER INDEX index_name AGING ; 을 수행해야 합니다.
ALTER INDEX ~ AGING 작업이 수행 중에는 테이블에 X락을 잡기 때문에 해당 테이블에 대한 다른 요청은 대기 상태가 되므로 수행 시 주의해야 합니다.
No Format title ALTIBASE HDB 5.3.x, 5.5.1, 6.1.1, 6.3.1 디스크 인덱스 사용량 조회 쿼리 language sql -- 디스크 인덱스 사용량 컬럼 설명 -- USER_NAME : 데이터베이스 사용자 -- TABLE_NAME : 테이블 이름 -- PARTITIONED_NAME : 파티션드 테이블 이름, 논-파티션드 테이블이면 NON-PARTITIONED -- INDEX_NAME : 인덱스 이름 -- PARTITIONED_INDEX : 파티션드 인덱스 이름 -- TBS_NAME : 인덱스가 속한 테이블스페이스 -- MAX(KB) : 테이블스페이스의 최대 크기 -- ALLOC(KB) : 할당 받은 전체 크기 -- USED(KB) : 할당 받은 공간 중 데이터가 포함된 크기 -- USAGE(%) : 테이블스페이스 최대 크기 대비 사용률 set linesize 1024 set colsize 20 SELECT U.USER_NAME USER_NAME , I_LIST.TABLE_NAME , DECODE(I_LIST.PARTITION_NAME, NULL, 'NON-PARTITIONED', I_LIST.PARTITION_NAME) PARTITIONED_NAME , I_LIST.INDEX_NAME INDEX_NAME , DECODE(I_LIST.INDEX_PARTITION_NAME, NULL, 'NON-PARTITIONED', I_LIST.INDEX_PARTITION_NAME) PARTITIONED_INDEX , TBS.NAME TBS_NAME , TO_CHAR((D.MAX * TBS.PAGE_SIZE)/1024, '999,999,999') 'MAX(KB)' , TO_CHAR((TBS.EXTENT_PAGE_COUNT * TBS.PAGE_SIZE * SEG.TOTAL_EXTENT_COUNT)/1024, '999,999,999') 'ALLOC(KB)' , TO_CHAR(SEG.TOTAL_USED_SIZE/1024, '999,999,999,999') 'USED(KB)' , TO_CHAR(((SEG.TOTAL_USED_SIZE/(D.MAX*TBS.PAGE_SIZE))*100), '99.99') 'USAGE(%)' FROM (SELECT T.TABLE_NAME , PT.PARTITION_NAME , I.INDEX_NAME , PI.INDEX_PARTITION_NAME , DECODE(T.IS_PARTITIONED, 'F', I.TABLE_ID, 'T', PT.TABLE_ID) TABLE_ID , DECODE(T.IS_PARTITIONED, 'F', T.TABLE_OID, 'T', PT.PARTITION_OID) TABLE_OID , DECODE(I.IS_PARTITIONED, 'F', I.TBS_ID, 'T', PI.TBS_ID) TBS_ID , I.INDEX_ID , T.USER_ID FROM SYSTEM_.SYS_INDICES_ I LEFT OUTER JOIN SYSTEM_.SYS_INDEX_PARTITIONS_ PI ON PI.INDEX_ID = I.INDEX_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLE_PARTITIONS_ PT ON PT.PARTITION_ID = PI.TABLE_PARTITION_ID LEFT OUTER JOIN SYSTEM_.SYS_TABLES_ T ON T.TABLE_ID = I.TABLE_ID AND T.TABLE_TYPE = 'T') I_LIST , X$SEGMENT SEG , V$INDEX I , V$TABLESPACES TBS , SYSTEM_.SYS_USERS_ U , (SELECT SPACEID , SUM(DECODE(MAXSIZE, 0, CURRSIZE, MAXSIZE)) AS MAX , DECODE(MAX(AUTOEXTEND),1,'ON','OFF') 'AUTOEXTEND' FROM V$DATAFILES GROUP BY SPACEID) D WHERE 1=1 AND SEG.TABLE_OID = I.TABLE_OID AND SEG.SEGMENT_PID = I.INDEX_SEG_PID AND SEG.SPACE_ID = I_LIST.TBS_ID AND I_LIST.INDEX_ID = I.INDEX_ID AND I_LIST.TABLE_OID = I.TABLE_OID AND I_LIST.TBS_ID = TBS.ID AND D.SPACEID = I_LIST.TBS_ID AND U.USER_ID = I_LIST.USER_ID ORDER BY I_LIST.TABLE_NAME, I_LIST.INDEX_NAME, I_LIST.PARTITION_NAME, I_LIST.INDEX_PARTITION_NAME ;
Code Block title 결과 예시 language sql USER_NAME TABLE_NAME PARTITIONED_NAME INDEX_NAME PARTITIONED_INDEX TBS_NAME MAX(KB) ALLOC(KB) USED(KB) USAGE(%) ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SYS DISK_T NON-PARTITIONED DISK_T_IDX_01 NON-PARTITIONED USER_IDX 2,097,152 47,104 46,984 2.24 SYS DISK_T2 NON-PARTITIONED DISK_T2_IDX_01 NON-PARTITIONED USER_IDX 2,097,152 256 16 0.00 SYS EMP NON-PARTITIONED EMP_IDX_01 NON-PARTITIONED SYS_TBS_DISK_DATA 2,097,152 256 32 0.00 SYS PART_T1 P1 PART_T1_IDX P_IDX1 PART_IDX 3,145,728 256 216 .01 SYS PART_T1 P2 PART_T1_IDX P_IDX2 PART_IDX 3,145,728 256 216 .01 SYS PART_T1 P3 PART_T1_IDX P_IDX3 PART_IDX 3,145,728 46,848 46,608 1.48 SYS PART_T2 P201406 PART_T2_IDX_01 P201406 PART_IDX 3,145,728 3,840 3,808 .12 SYS PART_T2 P201407 PART_T2_IDX_01 P201407 PART_IDX 3,145,728 7,680 7,528 .24 SYS PART_T2 P201408 PART_T2_IDX_01 P201408 PART_IDX 3,145,728 2,048 1,936 .06 SYS PART_T2 P201512 PART_T2_IDX_01 P201512 PART_IDX 3,145,728 3,072 2,856 .09 SYS PART_T2 PMAX PART_T2_IDX_01 PMAX PART_IDX 3,145,728 3,328 3,232 .10 SYS PART_T2 P201406 PART_T2_IDX_02 P201406 PART_IDX 3,145,728 3,840 3,808 .12 SYS PART_T2 P201407 PART_T2_IDX_02 P201407 SYS_TBS_DISK_DATA 2,097,152 7,680 7,528 .36 SYS PART_T2 P201408 PART_T2_IDX_02 P201408 SYS_TBS_DISK_DATA 2,097,152 2,304 1,936 .09 SYS PART_T2 P201512 PART_T2_IDX_02 P201512 SYS_TBS_DISK_DATA 2,097,152 3,328 2,856 .14 SYS PART_T2 PMAX PART_T2_IDX_02 PMAX SYS_TBS_DISK_DATA 2,097,152 3,584 3,232 .15 16 rows selected.
참고 - 디스크 테이블 및 인덱스 수 확인 방법
...