본문 바로가기
DB

Partitioning

by kiwi_wiki 2025. 1. 18.

테이블 또는 인덱스 데이터를 파티션 단위로 나누어 저장하는 것

목적

  • 성능
    • 특정 DML과 Query의 성능을 향상시킨다.
    • 주로 대용량 Data WRITE 환경에서 효율적이다.
    • 특히, Full Scan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다.
    • 많은 INSERT가 있는 OLTP 시스템에서 INSERT 작업을 작은 단위인 partition들로 분산시켜 경합을 줄인다.
  • 가용성
    • 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다.
    • 각 분할 영역(partition별로)을 독립적으로 백업하고 복구할 수 있다.
    • table의 partition 단위로 Disk I/O을 분산하여 경합을 줄이기 때문에 UPDATE 성능을 향상시킨다.
  • 관리용이성
    • 큰 table들을 제거하여 관리를 쉽게 해준다.

장점

  • 관리적 측면 : partition 단위 백업, 추가, 삭제, 변경
    • 전체 데이터를 손실할 가능성이 줄어들어 데이터 가용성이 향상
    • partition별로 백업 및 복구가 가능
    • partition 단위로 I/O 분산이 가능하여 UPDATE 성능 향상
  • 성능적 측면 : partition 단위 조회 및 DML수행
    • 데이터 전체 검색 시 필요한 부분만 탐색해 성능 향상
    • 즉, Full Scan에서 데이터 Access의 범위를 줄여 성능 향상
    • 필요한 데이터만 빠르게 조회할 수 있기 때문에 쿼리 자체가 가벼움

단점

  • table간 JOIN에 대한 비용이 증가
  • table과 index를 별도로 파티셔닝할 수 없음
  • table과 index를 같이 파티셔닝해야 함

종류

수평(horizontal) 파티셔닝

  • 하나의 테이블의 각 행을 다른 테이블에 분산시키는 것
  • 샤딩과 동일한 개념. 스키마를 복제한 후 샤드키를 기준으로 데이터를 나누는 것
  • 장점
    • 성능 향상: 데이터를 여러 파티션으로 나눠서 동시에 처리하니까 빨라짐
    • 확장성: 새로운 서버를 추가하면 더 많은 데이터 처리 가능
    • 보안: 각 파티션 별로 권한 따로 설정 가능
    • 유지보수 쉬움: 작은 파티션 관리가 편함
  • 단점
    • 데이터 중복: 특정 작업 때문에 데이터 중복될 수 있음
    • 쿼리 복잡성: 데이터 찾기 위해 여러 파티션을 찾아야 할 수 있음
    • 부하 균형: 파티션 간에 부하 균등하게 분산시키기 어려움
    • 데이터 무결성 관리: 데이터 일관성 유지에 관리 어려움

샤딩 종류

  • 모듈러 샤딩: PK를 모듈러 연산한 결과로 DB를 라우팅 하는 방식

 

    • 레인지 샤딩에 비해 데이터가 균일하게 분산
    • DB를 추가 증설하는 과정에서 이미지 적재된 데이터의 재정렬이 필요
    • 데이터량이 일정 수준에서 유지될 것으로 예상되는 데이터 성격을 가진 곳에 적용할 때 어울림
    •  균일하게 분산된다는 점은 트래픽을 안정적으로 소화하면서도 DB 리소스를 최대한 활용할 수 있음
  • 레인지 샤딩: PK의 범위를 기준으로 DB를 특정하는 방식

  • 모듈러 샤딩에 비해 기본적으로 증설에 재정렬 비용이 들지 않는다.
  • 일부 DB에 데이터가 몰릴 수 있다.
  • 증설 작업에 드는 큰 비용이 들지 않는다는 점이다. 데이터가 급격히 증가할 여지가 있는 곳에 어울림
  • 다만 활성 유저가 몰린 DB로 트래픽이나 데이터량이 몰릴 수 있기 때문에 적절한 range 기준을 잡는 것이 중요

 

  • 디렉토리 샤딩: 별도의 조회 테이블을 사용해서 샤딩을 하는 경우

 

  • 샤딩에 사용되는 시스템이나 알고리즘을 사용할 수 있다.
  • 샤드를 동적으로 추가하는 것도 비교적 쉽다.
  • 모든 읽기 및 쓰기 쿼리 전에 조회 테이블을 참조해야 하므로 오버헤드가 발생한다.

 

 

 

 

 

 

수직(vertical) 파티셔닝

  • 테이블의 일부 열을 빼내는 형태로 분할
  • 장점
    • 성능 개선: 자주 사용하는 열만 가져오니까 쿼리 속도가 빨라짐
    • 보안 강화: 중요한 열을 따로 저장해 더 안전함
    • 쉬운 유지보수: 열 단위로 데이터베이스 관리가 편함
  • 단점
    • 쿼리 복잡성: 필요한 정보를 얻기 위해 여러 테이블을 참조해야 할 수 있음
    • 중복 데이터: 여러 테이블에 동일한 정보가 중복 저장될 수 있음
    • 확장성 제한: 열 기반으로 분할되어 새로운 데이터 추가 어려울 수 있음

분할 기준

분할은 ‘분할 키(partitioning key)’를 사용한다.

  • 범위 분할 (range partitioning)
    • 분할 키 값이 범위 내에 있는지 여부로 구분한다.
    • 예를 들어, 우편 번호를 분할 키로 수평 분할하는 경우이다.
  • 목록 분할 (list partitioning)
    • 값 목록에 파티션을 할당 분할 키 값을 그 목록에 비추어 파티션을 선택한다.
    • 예를 들어, Country 라는 컬럼의 값이 Iceland , Norway , Sweden , Finland , Denmark 중 하나에 있는 행을 빼낼 때 북유럽 국가 파티션을 구축 할 수 있다.
  • 해시 분할 (hash partitioning)
    • 해시 함수의 값에 따라 파티션에 포함할지 여부를 결정한다.
    • 예를 들어, 4개의 파티션으로 분할하는 경우 해시 함수는 0-3의 정수를 돌려준다.
  • 합성 분할 (composite partitioning)
    • 상기 기술을 결합하는 것을 의미하며, 예를 들면 먼저 범위 분할하고, 다음에 해시 분할 같은 것을 생각할 수 있다.
    • 컨시스턴트 해시법은 해시 분할 및 목록 분할의 합성으로 간주 될 수 있고 키 공간을 해시 축소함으로써 일람할 수 있게 한다.
728x90
반응형

'DB' 카테고리의 다른 글

스레드 동시성 문제  (0) 2025.01.20
B+Tree, B-Tree  (0) 2025.01.17
Index Range Scan  (0) 2025.01.16
Index의 랜덤 I/O와 순차 I/O  (0) 2025.01.16
Multi-column Index  (0) 2025.01.16