해결된 질문
24.07.25 01:26 작성
·
421
0
"테이블 파티셔닝이 필요한 이유"중에 "자원 사용 효율 증가 및 쿼리 성능 향상"을 언급주셨습니다.
예를들어 최근에 저장된 데이터들 위주로 조회하는 경우 파티션 프루닝을 통해 최근 데이터만 접근하니까 효율적이라는 내용인데요, 효율적인 부분이 제가 생각했을 때 아래 2가지 정도인 것 같습니다.
테이블의 모든 row를 접근 안해도 되고 더 적은 데이터만 읽어도 됨
버퍼풀에 자주 사용되는 일부 데이터만 로드해도 됨
여기서 질문이 있습니다. 파티셔닝키를 대상으로 인덱스를 걸면, 마찬가지로 최근 데이터만 접근가능하고, 버퍼풀에 최근 데이터만 올라가지 않나요?
인덱스를 거는 방식이 파티셔닝을 사용하는 것에 비해 어떤 점에서 부족한가요?
답변 2
0
2024. 08. 20. 10:12
안녕하세요.
말씀하신 것처럼 파티셔닝키에 인덱스를 생성하고 해당 인덱스를 통해 특정 범위에 해당하는 데이터만 주로 접근한다면 테이블을 파티셔닝하지 않더라도 자원을 어느정도 효율적으로 사용할 수 있을 것으로 예상합니다.
예를 들어, 로그 데이터가 저장되는 테이블에 생성 일자 컬럼(e.g. created_at
)에만 인덱스를 생성하고 생성 일자 컬럼 기반으로만 데이터를 조회하는 경우가 이에 해당됩니다.
하지만 일반적으로는 이와 같이 아주 간단한 형태보다는 좀 더 복잡한 형태로 테이블을 사용하고, 테이블에서 다양한 쿼리들을 사용함에 따라 보조 인덱스들도 많이 존재하게 되는데요.
파티셔닝하지 않은 일반 테이블의 경우, 특히나 데이터가 많이 저장돼있다면 이와 같은 인덱스들에 대한 유지보수 비용이 파티셔닝하지 않은 테이블에 비해 클 수 있습니다. 일반 테이블에서는 하나로 통합된 거대한 인덱스로 존재하지만, 파티션 테이블의 경우 각 파티션 별로 인덱스가 나뉘어져 있기 때문입니다.
그래서 앞서 얘기드렸던 것과 같은 아주 간단한 형태로만 테이블을 사용하신다고 했을 때는, 데이터 삭제 등과 같은 부분을 고려해서 테이블 파티셔닝 적용 유무를 결정해주시면 좋을 것 같고, 좀 더 다양한 액세스 패턴으로 테이블을 사용하는 경우라면 주로 사용되는 패턴들을 중점적으로 고려해서 파티셔닝을 적용했을 때 얻을 수 있는 이점과 단점들을 비교해보고 최종적으로 결정해주시면 좋을 것 같습니다.
테이블에 파티셔닝을 적용하는 것이 좋을지는 쉽게 결정할 수 있는 경우도 있겠지만 그렇지 않은 경우들도 많고, 사실 실무에서는 DB를 운영/관리하고 있는 상황이나 기타 다른 요구사항 등 고려해야할 부분들이 많기 때문에 답변드린 내용이 다소 형식적이라고 느끼실 수 있을 것 같은데, 혹시 추가로 더 궁금한 부분 있으시면 언제든지 편하게 문의주세요.
감사합니다.