데이터베이스 테이블 파티셔닝
경고:
아래에서 답변되지 않은 질문이 있는 경우에는 이 이슈를 확인하고 추가하십시오.
@gitlab-org/database-team/triage
태그를 달고 최대한 빨리 답변드리겠습니다. Slack에서 답변을 받은 경우 해당 내용을 문서에 기록하여 이후에도 이 문서를 업데이트할 수 있도록 해 주세요.
테이블 파티셔닝은 테이블의 데이터를 단일 대형 테이블로 작용하는 작은 물리적 테이블로 분할할 수 있는 강력한 데이터베이스 기능입니다. 응용 프로그램이 파티셔닝을 고려하여 설계되었다면 여러 가지 이점이 있을 수 있습니다. 예를 들어:
-
데이터 검색 공간에서 많은 데이터를 저렴하게 제거할 수 있기 때문에 쿼리 성능을 크게 향상시킬 수 있습니다. 그래도 완전한 SQL 기능을 제공합니다.
-
전체 파티션을 삭제함으로써 데이터베이스에 미미한 영향을 미치고 대규모 삭제를 실현할 수 있습니다. 보관 기간을 벗어나는 데이터를 주기적으로 삭제해야 하는 기능에 적합합니다.
-
VACUUM
및 인덱스 다시 빌드와 같은 관리 작업은 단일 대형 테이블 대신 개별 파티션에서 작업할 수 있습니다.
안타깝게도 모든 모델이 파티셔닝 체계에 적합하지는 않으며 잘못 구현된 경우 중대한 단점이 있습니다. 게다가, 테이블은 생성 시에만 파티션될 수 있으며, 활발한 데이터베이스에 파티션을 적용하는 것은 비단순합니다. 백엔드 개발자가 기존 테이블을 파티션화하도록 하는 여러 단계로 나뉜 무거운 마이그레이션 프로세스를 수행할 수 있는 일련의 마이그레이션 도구가 있지만, 파티션화된 제한 사항 및 관련 마이그레이션으로 인해 이 기능을 활용하기 전에 파티셔닝이 사용 사례에 어떻게 맞는지 이해해야 합니다.
파티셔닝 마이그레이션 보조 도구는 원본 테이블의 파티셔닝된 복제본을 만들고 트리거와 백그라운드 마이그레이션의 조합을 사용하여 데이터를 새 테이블로 복사합니다. 원본 테이블의 스키마 변경은 파티셔닝 마이그레이션과 병렬로 이루어질 수 있지만, 마이그레이션이 작동하는 기본 매커니즘을 손상시키지 않도록 주의해야 합니다. 예를 들어, 파티션화되는 테이블에 열이 추가되는 경우 파티셔닝된 테이블과 트리거 정의 모두 업데이트되어야 합니다.
파티셔닝 사용 시기 결정
적절하게 적용된 경우 파티셔닝은 매우 유용할 수 있지만, 테이블의 데이터와 워크로드가 파티셔닝 체계와 자연스럽게 일치하는지 여부를 확인하는 것이 중요합니다. 특정 문제에 파티셔닝이 적합한지 결정하기 위해 몇 가지 세부 정보를 이해해야 합니다:
-
테이블 파티셔닝. 테이블은 데이터가 파티션 간에 어떻게 분할되는지를 결정하는 파티션 키(하나의 열 또는 여러 열)에 파티셔닝됩니다. 데이터베이스는 데이터를 읽거나 쓸 때 파티션 키를 사용하여 액세스해야 할 파티션을 결정합니다. 파티션 키는 해당 테이블에 액세스하는 거의 모든 쿼리의 WHERE 절에 포함될 수 있는 열이어야 합니다.
-
데이터가 어떻게 분할되는지. 데이터베이스는 파티션 간에 데이터를 분할하는 데 어떤 전략을 사용하나요?
적절한 파티셔닝 전략 결정
사용 가능한 파티셔닝 전략 옵션은 날짜 범위
, 정수 범위
, 해시
, 리스트
입니다.