[데이터베이스] 파티셔닝(Partitioning)이란?

James·2023년 7월 17일
1
post-thumbnail

파티셔닝(Partitioning)이란?


개념 : 테이블 또는 인덱스 데이터를 파티션(Partition) 단위로 나누어 저장하는 것을 말한다.

파티셔닝 왜 탄생했는가?


  • 서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량(storage)의 한계와 성능(performance)의 저하를 가져오게 되었다.
  • 즉, VLDB(Very Large DBMS)와 같이 하나의 DBMS에 너무 큰 table이 들어가면서 용량과 성능 측면에서 많은 이슈가 발생하게 되었고, 이런 이슈를 해결하기 위한 방법으로 table을 ‘파티션(partition)’이라는 작은 단위로 나누어 관리하는 ‘파티셔닝(Partitioning)’기법 이 나타나게 되었다.

    ‘파티셔닝(Partitioning)’기법을 통해 소프트웨어적으로 데이터베이스를 분산 처리하여 성능이 저하되는 것을 방지하고 관리를 보다 수월하게 할 수 있게 되었다.


파티셔닝의 목적


[성능(Performance)]

  • 특정 DML과 Query의 성능을 향상시킨다.
  • 주로 대용량 Data WRITE 환경에서 효율적이다.
  • 특히, Full Scan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다.
  • 많은 INSERT가 있는 OLTP 시스템에서 INSERT 작업을 작은 단위인 partition들로 분산시켜 경합을 줄인다.

[가용성(Availability)]

  • 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다.
    각 분할 영역(partition별로)을 독립적으로 백업하고 복구할 수 있다.
    table의 partition 단위로 Disk I/O을 분산하여 경합을 줄이기 때문에 UPDATE 성능을 향상시킨다.

[관리용이성(Manageability)]

  • 큰 table들을 제거하여 관리를 쉽게 해준다.

DB 파티셔닝(Partitioning)의 장단점


장점

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

단점

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

DB 파티셔닝(Partitioning)의 종류


1. 수평(horizontal) 파티셔닝

하나의 테이블의 각 행을 다른 테이블에 분산시키는 것이다.

특징

  • 퍼포먼스, 가용성을 위해 KEY 기반으로 여러 곳에 분산 저장한다.
  • 일반적으로 분산 저장 기술에서 파티셔닝은 수평 분할을 의미한다.
  • 보통 수평 분할을 한다고 했을 때는 하나의 데이터베이스 안에서 이루어지는 경우를 지칭한다.

수평(horizontal) 파티셔닝 장단점

장점

  • 데이터의 개수를 기준으로 나누어 파티셔닝한다.
  • 데이터의 개수가 작아지고 따라서 인덱스의 개수도 작아지게 된다. 자연스럽게 성능은 향상된다.

단점

  • 서버간의 연결과정이 많아진다.
  • 데이터를 찾는 과정이 기존보다 복잡하기 때문에 latency가 증가하게 된다.
  • 하나의 서버가 고장나게 되면 데이터의 무결성이 깨질 수 있다.


2. 수직(vertical) 파티셔닝

테이블의 일부 열을 빼내는 형태로 분할한다.정규화도 수직 파티셔닝과 관련된 과정이라고 할 수 있다. 하지만 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 과정이라고 생각해야 한다.

특징

  • 관계형 DB에서 3정규화와 같은 개념으로 접근하면 이해하기 쉽다.
  • 하지만 수직 파티셔닝은 이미 정규화된 데이터를 분리하는 과정이다.

수직(vertical) 파티셔닝 장단점

장점

  • 자주 사용하는 컬럼 등을 분리시켜 성능을 향상시킬 수 있다.
  • 한 테이블을 SELECT하면 결국 모든 컬럼을 메모리에 올리게 되므로 필요없는 컬럼까지 올라가서 한 번에 읽을 수 있는 ROW가 줄어든다. 이는 I/O 측면에서 봤을 때 필요한 컬럼만 올리면 훨씬 많은 수의 ROW를 메모리에 올릴 수 있으니 성능상의 이점이 있다.
  • 같은 타입의 데이터가 저장되기 때문에 저장 시 데이터 압축률을 높일 수 있다.

단점

  • 데이터를 찾는 과정이 기존보다 복잡하므로 Latency가 증가한다.


DB 파티셔닝(Partitioning)의 분할 기준

데이터베이스 관리 시스템은 분할에 대해 각종 기준(분할 기법)을 제공하고 있다. 분할은 ‘분할 키(partitioning key)’를 사용한다.

1. 범위 분할 (range partitioning)

  • 연속적인 숫자나 날짜를 기준으로 파티셔닝 한다.
  • 분할 키 값이 범위 내에 있는지 여부로 구분한다.
  • 우편 번호, 날짜 등의 데이터에 적합하다.

2. 목록 분할 (list partitioning)

  • 값 목록에 파티션을 할당 분할 키 값을 그 목록에 비추어 파티션을 선택한다.
  • 특정 파티션에 저장될 데이터에 대한 명시적 제어가 가능하다.
  • 분포도가 비슷하며, 많은 SQL에서 해당 칼럼의 조건이 많이 들어오는 경우 유용하다.

    예를 들어, Country 라는 컬럼의 값이 Iceland , Norway , Sweden , Finland , Denmark 중 하나에 있는 행을 빼낼 때 북유럽 국가 파티션을 구축 할 수 있다.

3. 해시 분할 (hash partitioning)

  • 파티션 키(Key)의 해시 값에 의한 파티셔닝이 이루어진다.
  • 균등한 데이터 분할이 가능하다.
  • 특정 데이터가 어느 Hash 파티션에 있는지 판단하기 어렵다.
  • 해시 함수의 값에 따라 파티션에 포함할지 여부를 결정한다.
  • 파티션을 위한 범위가 없는 데이터에 적합하다.

    예를 들어, 4개의 파티션으로 분할하는 경우 해시 함수는 0-3의 정수를 돌려준다.

4. 합성 분할 (composite partitioning)

  • 위의 분할들을 결합하는 것을 의미한다. 즉, 파티션의 sub-partitioning을 뜻한다.
  • 큰 파티션에 대한 I/O 요청을 여러 파티션으로 분산할 수 있다.
  • 예를 들면 먼저 범위 분할하고, 다음에 해시 분할 같은 것을 생각할 수 있다.

Reference & Additional Resources

profile
의미있는 성장의 태도, 긍정적인 사고를 지닌 Deveolper

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

유익한 글 잘 봤습니다, 감사합니다.

1개의 답글