DB 파티셔닝

홍찬기
4 min readJun 8, 2021

--

DB 파티셔닝이란?

서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량의 한계와 성능의 저하 를 가져오게 되었다.

이것을 해결하기 위한 방법으로 테이블을 여러부분으로 분할하는 데이터베이스 튜닝 기법을 DB파티셔닝이라고 한다.

DB파티셔닝의 이점

  • 가용성(Availability): 물리적인 Partitioning으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다. 각 분할 영역을 독립적으로 백업하고 복구할 수 있다.
  • 관리용이성(Manageability): 각 분할 영역(partition별로)을 독립적으로 백업하고 복구할 수 있다.
  • 성능(Performance): 특정 DML과 Query의 성능을 향상시킨다. 주로 대용량 Data Write 환경에서 효율적이다. Table FullScan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다.

DB파티셔닝의 단점

  • Table간의 Join에 대한 비용이 증가한다.
  • Table과 Index를 별도로 파티션 할수는 없다. 같이 Partitioning 하여야 한다.

DB 파티셔닝 종류

파티셔닝에는 수평분할(Horizontal Partitioning)수직분할(Vertical Partitioning) 두가지 방법이 있다.

수평분할(Horizontal Partitioning)

수평분할은 말 그대로 하나의 테이블의 각 행들을 분할하는 것이다.

수평분할
  • 수평분할은 샤딩(Sharding)과 동일한 개념이다.
  • 스키마(Schema)를 복제한 후 샤드키를 기준으로 데이터를 나누는 것을 말한다. 즉, 스키마(Schema)가 같은 데이터를 두 개 이상의 테이블에 나누어 저장하는 것을 말한다.

장점

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

단점

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

수직분할(Vertical Partitioning)

수직분할은 테이블의 일부를 분할하는 것을 말한다.

수직분할
  • 수직분할은 테이블의 컬럼들중에 특정 컬럼을 쪼개서 따로 저장하는것을 말한다.
  • 스키마(Schema)를 나누고 데이터가 따라 옮겨가는 것을 말한다.
    하나의 엔티티를 2개 이상으로 분리하는 작업이다.

장점

  • 자주 사용하는 컬럼 등을 분리시켜 성능을 향상시킬 수 있다.

DB파티셔닝의 분할 기준

범위분할

  • 분할 키 값이 범위 내에 있는지 여부로 구분한다.
  • 예를들어 키를 160~170, 170~180 범위로 구분하는 것

목록분할

  • 값 목록에 파티션을 할당 분할 키 값을 그 목록에 비추어 파티션을 선택한다.
  • 예를들어 도시를 하남시, 고양시, 안양시, 군포시 를 묶으면 경기도라는 파티션을 생성 할 수 있다.

해시분할

  • 해시 함수의 값에 따라 파티션에 포함할지 여부를 결정한다.
  • 예를 들어 4개의 파티션으로 분할하는 경우 해시 함수는 0–3의 정수를 돌려준다.

합성분할

  • 위의 분할 기술들을 결합하여 분할하는 것을 말한다.

References

https://soye0n.tistory.com/267

--

--

No responses yet