oracle partition 테이블 skew 확인 방법 문의드립니다. 0 2 1,701

by 아이쪼아라 [Oracle 기초] [2019.03.19 11:23:00]


안녕하세요.

oracle 11g에서 테이블 파티셔닝 작업을 하고 있는데요.

hash partition으로 4개의 partition을 줬는데, 해당 partition별 row count를 하려고 합니다.

google 에서 검색해도 잘 찾지 못해서 문의 드립니다.

아래와 같이 테이블 생성 및 대량 insert 작업 후 해당 partition 별로 균등하게 row가 들어가 있는지 확인하고 있습니다.

create table prd_mst

( prd_no number not null,

prd_nm varchar2(100)

)

partition by hash(prd_no)

partitions 4

stored in (tbs_01, tbs_02, tbs_03, tbs_04)

 

by 이준환 [2019.03.19 14:00:13]

-- 통계정보가 이미 생성되어 있어야 함.
-- ANALYZE TABLE_OWNER.TABLE_NAME ESTIMATE STATISTICS FOR TABLE SAMPLE 1 PERCENT;
-- 2019.03.19, Jun H. Lee
SELECT
  TABLE_OWNER
, TABLE_NAME
, PARTITION_NAME
, NUM_ROWS /*행수*/
, ROUND(RATIO_TO_REPORT(NUM_ROWS)OVER(PARTITION BY TABLE_OWNER, TABLE_NAME)*1E2, 2) AS PCNT_ROWS /*비중(%)*/
FROM DBA_TAB_PARTITIONS
WHERE TABLE_OWNER = 'TABLE_OWNER'
AND TABLE_NAME = 'TABLE_NAME'
;

-- 통계정보 필요없음
-- 파티션별로 할당되어진 용량을 조회
-- 2019.03.19, Jun H. Lee
SELECT
  OWNER, SEGMENT_NAME, PARTITION_NAME
, ROUND(BYTES/POWER(1024, 3), 2) AS GBYTES
, ROUND(RATIO_TO_REPORT(BYTES)OVER(PARTITION BY OWNER, SEGMENT_NAME)*1E2, 2) AS PCNT_BYTES /*비중(%)*/
FROM DBA_SEGMENTS
WHERE OWNER = 'OWNER'
AND SEGMENT_NAME = 'SEGMENT_NAME'
;

기술하신 목적이라면 일반적으로 세그먼트 용량조회를 통해 판단할 듯 하네요.


by 아이쪼아라 [2019.03.19 14:06:32]

이준환님 정말 감사합니다~!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입