Partitioning이란
개념
Partition
논리적인 데이터 element를 다수의 entity로 쪼개는 행위
즉 큰 table이나 index를 관리하기 쉬운 partition이라는 작은 단위로 물리적인 분할을 하는 것을 의미한다. 물리적인 데이터 분할이 있더라도 DB에 접근하는 application의 입장에서는 이를 인식하지 못한다.
배경
- 서비스의 크기가 점점 커지고 DB에 저장하는 데이터의 규모 또한 대용량화 되면서, 기존에 사용하는 DB 시스템의 용량(storage)의 한계와 성능(perfomance)의 저하를 가져오게 되었다.
- 즉, VLDB(Very Large DBMS)와 같이 하나의 DBMS에 너무 큰 table이 들어가면서 용량과 성능 측면에서 많은 이슈가 발생하게 되었고, 이런 이슈를 해결하기 위한 방법으로 table을 '파티션(partition)'이라는 작은 단위로 나누어 관리하는 '파티셔닝(partitioning)'기법이 나타나게 되었다.
- '파티셔닝(partitioning)'기법을 통해 소프트웨어적으로 데이터베이스를 분산 처리하여 성능이 저하되는 것을 방지하고 관리를 보다 수월하게 할 수 있게 되었다.
목적
- 특정 DML과 Query의 성능을 향상시킨다.
주로 대용량 Data WRITE 환경에서 효율적이다.
특히, Full Scan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다.
많은 INSERT가 있는 OLTP 시스템에서 INSERT 작업을 작은 단위인 partition들로 분산시켜 경합을 줄인다.
2. 가용성(Availability)
- 물리적인 파티셔닝으로 인해 전체 데이터의 훼손 가능성이 줄어들고 데이터 가용성이 향상된다.
각 분할 영역(partition별로)을 독립적으로 백업하고 복구할 수 있다.
table의 partition 단위로 Disk I/O을 분산하여 경합을 줄이기 때문에 UPDATE 성능을 향상시킨다.
3. 관리용이성(Manageability)
- 큰 table들을 제거하여 관리를 쉽게 해준다.
DB 파티셔닝(Partitioning)의 장단점
장점
관리적 측면
- partition 단위 백업, 추가, 삭제, 변경
전체 데이터를 손실할 가능성이 줄어들어 데이터 가용성이 향상된다.
partition별로 백업 및 복구가 가능하다.
partition 단위로 I/O 분산이 가능하여 UPDATE 성능을 향상시킨다.
성능적 측면
- partition 단위 조회 및 DML수행
데이터 전체 검색 시 필요한 부분만 탐색해 성능이 증가한다.
즉, Full Scan에서 데이터 Access의 범위를 줄여 성능 향상을 가져온다.
필요한 데이터만 빠르게 조회할 수 있기 때문에 쿼리 자체가 가볍다.
단점
- table간 JOIN에 대한 비용이 증가한다.
- table과 index를 별도로 파티셔닝할 수 없다. table과 index를 같이 파티셔닝해야 한다.