[DB] 파티션 테이블(Partition Table)이란?

2025. 1. 4. 19:29·Database/My SQL
반응형

파티션 테이블이란?

파티션 테이블은 대용량 데이터를 효과적으로 관리하기 위해 하나의 테이블을 여러 물리적 단위(파티션)로 나누어 저장하는 방식입니다. 논리적으로는 하나의 테이블로 동작하지만, 물리적으로는 데이터가 각 파티션에 분산 저장됩니다. 이를 통해 데이터를 조회하거나 관리할 때 성능과 효율성을 크게 향상시킬 수 있습니다.

파티션 테이블은 특히 Pruning이라는 최적화 기법을 지원합니다. 특정 데이터를 조회할 때 필요한 데이터가 위치한 파티션만 읽어들이는 방식으로, 쿼리 속도를 대폭 개선합니다. 또한, 파티션 테이블은 개발자 입장에서 기존 쿼리를 특별히 수정할 필요가 없으면서도 데이터 관리와 유지보수를 간소화할 수 있는 장점이 있습니다.


1. 파티션 테이블의 장단점

장점

  • 쿼리 성능 향상: 특정 조건에 맞는 데이터만 저장된 파티션을 조회하므로, 전체 테이블을 스캔하지 않아도 됩니다.
  • 가용성 강화: 디스크 장애가 발생해도 문제가 발생한 파티션만 복구하면 되므로 데이터 손실 위험이 줄어듭니다.
  • 효율적 데이터 관리: 파티션 단위로 데이터 삭제, 백업, 아카이빙 등을 수행할 수 있어 관리가 편리합니다.
  • 기존 쿼리와 호환성 유지: 논리적으로 하나의 테이블로 동작하므로, 기존 쿼리를 수정할 필요가 없습니다.
  • 병렬 처리 지원: 조인 작업이나 데이터 처리를 파티션 단위로 병렬 처리하여 성능을 향상시킬 수 있습니다.
  • I/O 부하 분산: 데이터를 물리적으로 분산 저장하므로 디스크 I/O 부하가 감소합니다.

단점

  • 복잡한 관리: 파티션 키 값 변경 시 별도의 관리가 필요하며, 설계와 유지보수가 복잡해질 수 있습니다.
  • 오버헤드 발생: 데이터 입력 시 어느 파티션에 저장할지 결정하는 연산이 추가되며, 인서트 속도가 느려질 수 있습니다.
  • JOIN 비용 증가: 파티션 간 데이터를 조인할 때 성능 저하가 발생할 가능성이 있습니다.
  • 설계 제약: 파티션 기준이 되는 컬럼과 데이터 분포를 잘못 설계하면 성능 저하 및 데이터 불균형 문제가 생길 수 있습니다.

2. 어떤 테이블을 파티션 테이블로 만들어야 할까?

파티션 테이블은 모든 테이블에 적합한 방법은 아니며, 아래 조건을 충족하는 경우 활용 가치가 높습니다.

  • 대규모 데이터: 데이터 양이 방대하고 지속적으로 증가하는 테이블(예: 로그 테이블).
  • 지속적인 데이터 입력: 대량의 데이터가 주기적으로 인서트되는 테이블.
  • 오래된 데이터 관리: 특정 기간이 지나면 삭제하거나 아카이빙해야 하는 데이터가 포함된 경우.
  • 범위 기반 쿼리: 날짜, 시간, 지역 등 특정 조건으로 데이터를 조회하는 경우가 많은 테이블.
  • 장애 복구가 중요한 테이블: 일부 데이터 손상에도 나머지 데이터를 정상적으로 사용해야 하는 경우.

3. 파티션 키 컬럼 (파티셔닝 키)

파티션 키는 데이터를 각 파티션에 분산 저장하는 기준이 되는 컬럼입니다. 적절한 파티션 키를 선택하면 데이터의 균등 분산과 쿼리 성능을 극대화할 수 있습니다.

파티션 키 선정 기준

  • 직관적인 데이터 분리: 날짜, 월, 연도 등 사용자가 데이터를 쉽게 이해하고 구분할 수 있는 컬럼.
  • 균등한 데이터 분포: 특정 파티션에 데이터가 집중되지 않도록 고른 분포가 가능한 컬럼.
  • I/O 효율성: 쿼리 조건에서 자주 사용되며, 데이터 접근 패턴과 부합하는 컬럼.
  • 데이터 관리 용이성: 데이터 삭제, 백업, 이동 시 유리한 컬럼.
  • 피해야 할 컬럼: Primary Key처럼 중복되지 않는 고유값은 분산 효과가 적어 적합하지 않음.

4. 파티션 테이블의 종류

1) Range Partitioning

특정 범위를 기준으로 데이터를 분할하는 방식입니다. 주로 날짜, 숫자 등 연속적인 값을 가진 컬럼에 적합합니다.

  • 장점: 관리가 간단하며, 시간 기반 데이터(로그, 이력 등)에 적합.
  • 단점: 데이터가 특정 범위에 몰릴 경우 부하가 증가.

2) Hash Partitioning

해시 함수를 사용하여 데이터를 고르게 분산하는 방식으로, 값의 분포가 불규칙하거나 예측하기 어려운 경우 유용합니다.

  • 장점: 데이터가 균등하게 분산되어 부하가 고르게 분산.
  • 단점: 파티션 간 데이터 분포를 사용자가 직접 제어할 수 없음.

3) List Partitioning

명시적으로 정의된 특정 값의 목록에 따라 데이터를 분할합니다. 카테고리, 지역 등 그룹화가 필요한 데이터에 적합합니다.

  • 장점: 사용자가 원하는 값에 따라 데이터를 명확히 구분 가능.
  • 단점: 모든 값에 대한 리스트를 정의해야 하므로 설정이 번거로울 수 있음.

4) Composite Partitioning

두 가지 이상의 파티셔닝 방식을 조합하여 사용하는 고급 방식입니다(예: Range + Hash).

  • 장점: 다양한 데이터 요구를 동시에 충족할 수 있음.
  • 단점: 관리 복잡도가 높아지고, 파티션 수가 너무 많아질 위험이 있음.

파티션 테이블은 대규모 데이터 환경에서 성능과 관리 효율성을 높이는 데 매우 유용한 기법입니다. 하지만 데이터의 특성과 사용 패턴을 면밀히 분석해 설계하지 않으면 오히려 성능 저하와 관리 복잡성을 초래할 수 있습니다. 따라서 적절한 파티션 키 선정과 파티션 종류의 활용이 핵심입니다.

※ MySQL 에서 파티션 테이블의 생성 방법을 알고 싶다면 아래 글을 참고해주세요

[MySQL] MySQL 파티션 테이블 가이드

 

[DB] MySQL 파티션 테이블 가이드

MySQL 파티션 테이블 가이드들어가며: 파티션의 필요성대규모 데이터베이스를 운영하다 보면 마치 거대한 도서관을 관리하는 것과 같은 어려움을 겪게 됩니다. 수백만 건의 데이터를 하나의

ethank.tistory.com

 

반응형

'Database > My SQL' 카테고리의 다른 글

[DB] MySQL 파티션 테이블 가이드  (0) 2025.01.04
커버링 인덱스 (Covering Index) 를 사용해서 쿼리 최적화하기  (0) 2024.11.30
MySQL Index 정리 및 팁  (0) 2022.05.16
'Database/My SQL' 카테고리의 다른 글
  • [DB] MySQL 파티션 테이블 가이드
  • 커버링 인덱스 (Covering Index) 를 사용해서 쿼리 최적화하기
  • MySQL Index 정리 및 팁
Ethan Kang
Ethan Kang
Digital nomad + Software Engineer
    반응형
  • Ethan Kang
    Software Engineer Ethan
    Ethan Kang
  • 전체
    오늘
    어제
    • Programming (105)
      • Java (22)
        • Spring Framework (6)
        • Spring (8)
        • Spring Security (0)
        • JPA (3)
        • MyBatis (1)
        • Servlet, JSP (2)
      • DevOps (4)
        • Kubernetes (2)
        • Docker (1)
        • Terraform (0)
        • Jenkins (0)
        • Bazel (1)
      • Front-End (18)
        • ReactJS (0)
        • Typescript (3)
        • JQuery (1)
        • Java Script (13)
        • RxJS (0)
        • CSS (1)
      • Messaging Queue (1)
        • Kafka (1)
      • Linux (Ubuntu based) (8)
        • Ubuntu (0)
        • CentOS (2)
        • Shell Scripting (2)
      • PHP (5)
        • Laravel (2)
        • PHP 문법 (3)
      • Go (1)
        • Basics (1)
      • Python (16)
        • Flask (1)
        • Django (4)
      • App Development (4)
        • Android (1)
        • Cordova (0)
        • React Native (0)
        • Hybrid Programming (2)
        • IOS (1)
      • Database (4)
        • SQL (0)
        • My SQL (4)
        • MongoDB (0)
      • Shader Programming (0)
      • Tools (5)
        • GIT (2)
      • C# (3)
        • ASP.NET MVC (2)
        • CSharp 파헤치기 (1)
      • 서평 (1)
      • ETC (4)
        • C++ (0)
        • Geo Server (0)
        • NodeJS2 (0)
        • Ruby (2)
        • Elastic Search (0)
        • Camera (0)
        • Open Source (2)
        • WebVR (0)
      • 소프트웨어 이론 (2)
        • TDD (1)
        • Architecture (1)
        • WEB DEV (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 컬러스크립터
  • 공지사항

    • 좋은 프로그래머가 되는 24가지 방법
  • 인기 글

  • 태그

    mysql
    autoloading
    스프링
    이미지 #jsp
    N+1
    JPA
    mysql데이터복구
    데이터베이스
    psr-4
    VersionControl
    java
    db
    mybatis
    자바
    django #장고
    spring
    데이터베이스캐쉬
    Python
    스프링데이타
    Kotlin
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Ethan Kang
[DB] 파티션 테이블(Partition Table)이란?
상단으로

티스토리툴바