생계/Oracle2026. 9. 23. 18:42
반응형

오라클 서브파티션 테스트 

 - range-list 구조의 복합파티션 관리하기

 - 템플릿을 등록하고 파티션 추가시 템플릿대로 추가되는지 확인 

 


DROP TABLE TB_TEST_CMP;

CREATE TABLE TB_TEST_CMP
(
    CLS_YM VARCHAR2(6),
    COCD1  VARCHAR2(3),
    COCD2  VARCHAR2(3),
    VAL    NUMBER
)
PARTITION BY RANGE (CLS_YM)
SUBPARTITION BY LIST (COCD1, COCD2)
SUBPARTITION TEMPLATE
(
    SUBPARTITION L100_200 VALUES ('100', '200'),
    SUBPARTITION L100_400 VALUES ('100', '400'),
    SUBPARTITION L_DEF VALUES (DEFAULT)
)
(
    PARTITION PT_202601 VALUES LESS THAN ('202602'),
    PARTITION PT_202602 VALUES LESS THAN ('202603'),
    PARTITION PT_202603 VALUES LESS THAN ('202604'),
    PARTITION PT_MAX    VALUES LESS THAN (MAXVALUE)
);

-- PT_202603 파티션에 수동으로 서브파티션 추가
ALTER TABLE TB_TEST_CMP MODIFY PARTITION PT_202603 ADD SUBPARTITION L500_600 VALUES ('500', '600');
--> SQL Error [14621] [72000]: ORA-14621: DEFAULT 하위 분할 영역이 존재하는 경우 하위 분할 영역을 추가할 수 없음

 
-- 디폴트 서브파티션을 쪼개는 방식으로 추가 
ALTER TABLE TB_TEST_CMP SPLIT SUBPARTITION PT_202603_L_DEF INTO
(
    SUBPARTITION PT_202603_L500_600 VALUES ('500', '600'),
    SUBPARTITION PT_202603_L700_800 VALUES ('700', '800'),
    SUBPARTITION PT_202603_L_DEF   
);

서브파티션이 변경이 되었으니 새로 템플릿을 지정하자

-- 템플릿 재지정 
ALTER TABLE TB_TEST_CMP SET SUBPARTITION TEMPLATE();

ALTER TABLE TB_TEST_CMP SET SUBPARTITION TEMPLATE
(
    SUBPARTITION L100_200 VALUES ('100', '200'),
    SUBPARTITION L100_400 VALUES ('100', '400'),
    SUBPARTITION L500_600 VALUES ('500', '600'),  -- 새로 추가된 서브파티션 1
    SUBPARTITION L700_800 VALUES ('700', '800'),  -- 새로 추가된 서브파티션 2
    SUBPARTITION L_DEF    VALUES (DEFAULT)
);

-- 템플릿 확인 
SELECT *
  FROM DBA_SUBPARTITION_TEMPLATES
 WHERE table_name ='TB_TEST_CMP'
;



-- PT_MAX 파티션을 SPLIT 하여 PT_202604 생성
ALTER TABLE TB_TEST_CMP SPLIT PARTITION PT_MAX AT ('202605')
INTO (PARTITION PT_202604, PARTITION PT_MAX);

-- maxvalue 파티션을 분할하는 경우 maxvalue 파티션 구조를 따라와서 템플릿과 다르게 생성됨 
SELECT table_owner, table_name, partition_name, composite, subpartition_count, high_value
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = 'TB_TEST_CMP'
;



-- 서브파티션 생성 결과 확인
SELECT PARTITION_NAME, SUBPARTITION_NAME, HIGH_VALUE, subpartition_position
FROM DBA_TAB_SUBPARTITIONS
WHERE TABLE_NAME = 'TB_TEST_CMP'
ORDER BY PARTITION_NAME, SUBPARTITION_NAME;



-- maxvalue 파티션 제거하고 add partition 

SELECT * FROM TB_TEST_CMP partition(PT_MAX);

ALTER TABLE TB_TEST_CMP DROP PARTITION PT_202604;
ALTER TABLE TB_TEST_CMP DROP PARTITION PT_MAX;


ALTER TABLE TB_TEST_CMP ADD 
    PARTITION PT_202604 VALUES LESS THAN ('202605'),
    PARTITION PT_202605 VALUES LESS THAN ('202606'),
    PARTITION PT_202606 VALUES LESS THAN ('202607'),
    PARTITION PT_MAX    VALUES LESS THAN (MAXVALUE)
;

-- add partition 은 템플릿대로 생성이 됨.
SELECT table_owner, table_name, partition_name, composite, subpartition_count, high_value
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = 'TB_TEST_CMP'
;

 

 - maxvalue 파티션이 있는경우 split 방식으로 파티션이 추가됨. 템플릿이 아닌 split 대상과 구조가 동일

 - default 서브파티션이 있는경우 서브파티션추가는 default 를 분할하는 방식으로 추가됨. 

 - 템플릿으로 추가시 서브파티션 명은 "파티션명_"+"템플릿의서브파티션명" 으로 지정됨. 

반응형
Posted by 돌고래트레이너
생계/튜닝2026. 9. 8. 17:58
반응형

skewed 컬럼에 인덱스 생성시 

바인드 변수를 사용하면 동일분포 가정으로 실행되기에 비효율

1. 드문값은 리터럴로 변경 
- 드문것에 인덱스 생성

-- 예: 'PENDING' 상태(1%)만 조회하고 'COMPLETED' 상태(99%)는 인덱스에서 제외하고 싶을 때
CREATE INDEX idx_pending_orders ON orders 
(CASE WHEN status = 'PENDING' THEN status END);

2. 히스토그램 필수 

-- 특정 컬럼(status)에 대해 히스토그램 수집 유도 (SIZE AUTO 또는 SIZE 254/2048)
BEGIN
  DBMS_STATS.GATHER_TABLE_STATS(
    ownname          => 'MY_SCHEMA',
    tablename        => 'MY_TABLE',
    method_opt       => 'FOR ALL COLUMNS SIZE AUTO FOR COLUMNS SIZE 254 STATUS',
    estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE
  );
END;
/

 






반응형
Posted by 돌고래트레이너
정보/생활정보2026. 9. 5. 20:05
반응형

요즘 수영에 재미를 느껴 매주 주말 자유수영을 다니고 있다. 

아직 초보레인에서 어슬렁거리는 실력이지만 유튜브를 보면서 조금씩 실력이 느는 것이 재미가 있다. 

예전에도 수영을 배울까 하다가 생각보다 근처 수영장이 많지도 않고 정보 얻기도 힘들었다. 

네이버 지도에 정보에 나오면 참 편한데, 소식을 올려놓는데도 있고 아닌데도 있고

개별 홈페이지가 있는 곳도 있고 아닌곳도 있고 제 각각 이라 매번 갈때마다 알아봐야 하는 불편함이 있다.  
 
그래서 내가 사는 마포구 근처를 직접 돌아다니면서 얻은 정보를 정리해 보았다. 
 



1. 신촌 창천교육문화관

1) 자유수영 시간 : 매주 일요 휴무. 공휴일도 운영한다. 


2) 가격 : 15000
3) 장점 : 시설은 (다른데에 비하면) 깨끗하고 드라이기도 많다.  역 근처(신촌) 라 오기도 편하고 주변에 둘러볼 곳 도 많다. 
             물 탁도는 여기가 마포구에선 제일 깨끗하다고 함. 
4) 단점 : 처음 자유수영 투어로 스타트를 끊으면서 가본 곳인데, 가격 생각하면 다시 오긴 힘들 듯 하다. 



2. 용산구 문화체육센터

1) 자유수영 시간 
   홀수 일요일 휴무(1,3,5)
  한타임만 이용가능하다. 킥판 못쓰고 제약이 좀 있다 .

 

2) 가격 : 일일 3000, 월 45000
3) 장점 : 가격이 깡패다. 서울 중심에 이정도 가격은 해자
4) 단점 : 민간 사업자는 아닌것 같은데 그래서 카운터도 주민이 보는거 같은데 동선 등 이상한 점이 조금 있긴 하다. 
     위치도 역이랑 애매한 거리인 것은 다소 아쉬움. 주차는 공짜가 아니다. 
     




3. 상암 월드컵스파랜드24

1) 자유수영 시간 
2) 가격 : 11000. 월 10만. 찜질방 이용시 13000
3) 장점 : 사우나랑 같이 운영하는거라 사우나도 한다면 가격 메리트 있다. 
             홈플러스가 바로 옆이라 끝나고 장보기 개꿀. 수영장 옆에 온수풀 있어서 수영하다 힘들때 잠쉬 쉬기 좋다. 
             보통 자유수영시간 운영을 50분 수영,10분 휴식인데, 그런 제약도 없고 원하는 만큼 있다 갈수 있다.   
4) 단점 : 시설은 오래된 감이 있다. 동네 주민이 대부분일듯 한데 사람이 꽤 많아서 코너에서 쉴때 조금 불편 
            직원이 불친절하다는 일관적인 리뷰.   나도 두번 방문 만에 기분 상하는 일 겪음



4. 서대문 문화체육회관
1) 자유수영 시간 

                          평일은 정기권 이용자만 가능


2) 가격   : 4500
3) 장점  : 가격
4) 단점  :  위치 너무 안좋다. 가파른 언덕을 올라가야한다. (그래서인지 셔틀이 있긴하다.)

                 이용시간도 불편하고 너무 일찍와도 발권 안됨. 제약 너무 많아

 

# 총평 : 가격만 제외하면 창천동이 제일 낫고 가격 감안하면 용산이 제일 낫다. 근데 현실적으로 

        주말 자유수영만 가능한 입장이라 제일 많이 방문한곳은 상암이었다. 

        시립은 공휴일 쉬고, 일요일도 격주로 쉬고 시간제약 있어서 못가는날도 많은데

        민간은 상대적으로 운영시간이 제약이 적어서 유일한 선택지였던 적이 많았다. 
    

반응형
Posted by 돌고래트레이너