본 포스트는 파티션 테이블을 사용할 때 글로벌 인덱스와 로컬 인덱스 구성에 따른 차이를 정리한 글입니다.

 

프로젝트 요건 중 고객별 개인화 마케팅을 위해 전체 고객의 구매나 성향 패턴에 대한 데이터를 Weekly 배치 작업으로 반영해 달라는 요건이 있었습니다. 배치 작업이 수행되는 중에도 온라인 거래에서는 개인화 마케팅을 위한 데이터를 참조한 결과를 화면에 표시해 달라는 요건이었습니다.

 

전체 고객의 데이터를 다루기 때문에 데이터가 수천만 건에 달하는 양이었습니다. 해당 부분에 대해 수행사에서 설계, 개발한 내용을 보니 아래와 같았습니다.

1. 테이블을 List Partition으로 구성한다.
2. 첫 번째 주는 0번째 Partition에 데이터를 적재한다.
3. 두 번째 주는 1번째 Partition에 데이터를 적재하고, 0번째 Partition은 truncate 한다.
4. 2-3번 과정을 매주 반복한다.

수행사에서 오픈 후 해당 내용을 적용하고 첫 번째 주 작업은 무사히 진행되었습니다. 하지만 두 번째 주 작업 때는 작업이 수행되는 시간에 해당 테이블을 사용하는 온라인 거래가 지연이 되는 문제가 발생하였고 결국 그 주 배치 작업은 중단 처리했습니다.

 

Global Partitioned Index

해당 테이블은 List Partition으로 구성한 테이블이었는데 Index를 Global Index로 생성하여 사용하고 있던 부분이 문제였습니다. Partition 테이블에서 Global Index를 사용하면 truncate가 발생할 때 Index 영역이 unusable 상태가 되기 때문에 반드시 Rebuild 가 필요하고, Rebuild를 하는 동안 해당 테이블을 사용하는 온라인 거래가 모두 지연된 것이었습니다.

 

Global Index vs Local Index

설명을 작성해볼까 하고 참고할만한 자료를 찾던 중 굳이 설명을 다시하는 것보다 아래 링크에 아주 설명이 잘되어 있어서 링크를 첨부하겠습니다.

http://dbcafe.co.kr/wiki/index.php/%ED%8C%8C%ED%8B%B0%EC%85%94%EB%8B%9D_%EC%9D%B8%EB%8D%B1%EC%8A%A4

 

파티셔닝 인덱스 - DB CAFE

1 PARTITIONED INDEX의 종류 1.1 partitioned index의 종류 1.1.1 LOCAL INDEX local index란 index를 생성한 table과 partitioned index가 equi-partition된 경우를 나타낸다. 즉, index와 table은 같은 컬럼에 의해 partition 되며, 하

dbcafe.co.kr

일반적으로 위와 같은 Rebuild 이슈나 성능 등을 고려하여, 기본적으로 Local Index 사용을 고려합니다. 어떤 사유로 Local Index를 사용할 수 없을 경우 Global Index 사용을 고려하는 순서로 진행합니다.

 

 

300x250

+ Recent posts