LOUPOS님 | 튜닝/관리 | 2013-10-18 15:30:34
안녕하세요
최근 많은 도움을 받고 있습니다.
오늘 또 질문이 생겨서 작성해 봅니다.
관리 이슈가 생겨서 스키마 내의 전체 테이블에 대한 정보를 조사하는 중입니다.
레코드수, 사용용량 등등...
때문에 해당 데이터를 조회하고 있는데요
SELECT B.TABSCHEMA, B.TABNAME, ROWS, COLCOUNT, DATA_MB, IDX_MB
FROM (
SELECT TABNAME, CARD ROWS, COLCOUNT
FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'SPAMUSER'
) A,
(
SELECT TABSCHEMA, TABNAME,
SUM(DATA_OBJECT_P_SIZE)/1024 DATA_MB,
SUM(INDEX_OBJECT_P_SIZE)/1024 IDX_MB
FROM SYSIBMADM.ADMINTABINFO
GROUP BY TABSCHEMA, TABNAME
) B
WHERE A.TABNAME = B.TABNAME
--and A.TABNAME = 'DM_FURNISH_USE_COMP'
ORDER BY A.ROWS desc, B.DATA_MB desc
간단히 위와 같이 작성을 하였는데요
우선 질문드려 볼게요
1. CARD 가 레코드(Rows) 가 맞나요? 일단.. 테이블당 레코드가 수천만 레코드 라서 count 를 쓸수가 없어서.. 저걸 쓰고있는데 아무래도 이상합니다...
2. CARD 부분이 RUNSTAT를 수행해야 최신값으로 올라오는 것을 알고 있습니다. 그런데... 너무 이상한게요...
지금 테이블 올드 데이터 정리하면서 대량 삭제를 수행하고 있습니다... 그런데... CARD가... 삭제 전보다 증가했습니다.... 이럴수가 있나요?;;;
의심되는 부분은.. 사실.. 삭제 전에 뽑은 데이터는 RUNSTAT를 수행하지 않고 뽑았던지라.. 최신데이터 가 아니라서.. 이럴수 있다고 생각은 들지만....
통계를 영 잘못 뽑고 있다는 생각이 가시질 않네요 ㅠ
3. 데이터 부분은 저렇게 뽑는게 맞지요? 다른 방법도 사용해봤는데 수치는 동일한걸로 보아 맞는 듯한데... 역시나 2번같은 문제가 발생하고 있습니다 ㅠ
몇가지 다른 예문
SELECT row_number() over(partition by tabschema order by tabschema ,TABNAME ), tabschema,
TABNAME ,to_char(create_time,'yyyymmdd') create_date, CARD ROWS, REMARKS
FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'SPAMUSER'
order by rows desc
SELECT TABSCHEMA, TABNAME, SUM(DATA_OBJECT_P_SIZE),
SUM(INDEX_OBJECT_P_SIZE), SUM(LONG_OBJECT_P_SIZE),
SUM(LOB_OBJECT_P_SIZE), SUM(XML_OBJECT_P_SIZE)
FROM SYSIBMADM.ADMINTABINFO GROUP BY TABSCHEMA, TABNAME
SELECT TABSCHEMA
,TABNAME
,(SUM(DATA_OBJECT_P_SIZE)+SUM(LONG_OBJECT_P_SIZE)
+SUM(LOB_OBJECT_P_SIZE)+SUM(XML_OBJECT_P_SIZE))/1024 AS TABLE_MB_SIZE
FROM TABLE(SYSPROC.ADMIN_GET_TAB_INFO_V97('SPAMUSER', 'DM_SEND_COMP'))
GROUP BY TABSCHEMA, TABNAME
WITH UR;
공부가 많이 되기는 하는데... 참... 노력이 필요하네요...ㅋㅋㅋ