Postgresql 9.1.8을 쓰고 있습니다.
데이터량이 너무 많아 추출하는데 시간이 걸려서, 이를 해결하고자, 테이블을 일별로 파티셔닝했습니다.(1일 서브테이블, .... , 31일 서브테이블)
그 결과, 두 가지 문제가 발생했습니다.
1. 첫 번째 데이터 추출이 파티셔닝하기 전보다 훨씬 느려졌습니다.(파티셔닝 하기 전에는 1초 안에 들어왔던 추출시간이 1분으로 늘어났습니다.)
2. 3일 정도의 데이터가 쌓였을 때, 파티셔닝하기 전의 문제점은 추출하고자 하는 데이터의 저장시각에 관계없이 평균 추출시간이 0.6초 정도였습니다.(목표: 0.1초 이내)
파티셔닝을 한 후의 결과는 다음과 같습니다.
세 번째 날의 평균 추출시간: 0.15초
두 번째 날의 평균 추출시간: 0.3초
첫 번째 날이 평균 추출시간: 0.5초
파티셔닝을 하면, 각 서브테이블의 데이터량은 같으며, 인덱스 구조도 같을텐데 이와 같은 차이가 나는 이유를 찾지 못하고 있습니다.
위의 두 가지 해결 방안이 무엇인지 알 수 있을까 해서 글을 올리게 되었습니다.
부가적으로, 데이터 추출 시, 파티셔닝 테이블 체크조건을 where절에 써주어야 하는 것인가요?
써야한다면, where절에서 순서가 (마더테이블 인덱스, 파티셔닝 테이블 체크조건)인지, 아니면 (파티셔닝 테이블 체크조건, 마더테이블 인덱스)인가요?
마지막으로, 파티셔닝 테이블 체크조건이 상수하고만 매칭되는 것인지, 아니면 변수하고도 매칭될 수 있나요?
읽어주셔서 감사합니다. 즐거운 하루되시길 바랍니다.
|