데이터베이스의 파티셔닝에 대해 더욱 자세히, 목적, 장단점 등을 알아보겠다.
그리고 다음 글에서는 파티셔닝 종류, 분할 기법에 대해서 알아보겠다.
파티셔닝이 생긴 배경부터 알아보겠다.
서비스의 규모가 커지면서 한 데이터베이스내에서 데이터량이 아주 많은 거대한 테이블들을 담으려다 보니 아무래도 무리가 가면서, 용량의 한계와 성능 저하가 발생된다.
VLDB (Very Large DBMS)와 같이 너무 큰 테이블이 들어오게 되면서 용량과 같은 성능적인 측면에서 너무 많은 이슈가 발생하게 되었고, 이러한 문제를 해결하기위해 파티셔닝이라는 기법이 등장하게 되었다.
테이블을 파티셔닝이라는 단위로 쪼개어 관리하는 기법을 파티셔닝 기법이라고 한다.
논리적인 데이터 element 들을 다수의 entity로 쪼개는 행위를 뜻하는 일반적인 용어다.
즉 큰 table이나 index를, 관리하기 쉬운 partition이라는 작은 단위로 물리적으로 분할하는 것을 의미한다. 물리적인 데이터 분할이 있더라도, DB에 접근하는 application의 입장에서는 이를 인식하지 못한다.
파티셔닝 기법을 사용하는 목적으로는 다음과 같은 측면에서 고려된다.
- 성능 주로 DML(Select, Update, Insert, Delete)와 같은 연산의 성능을 향상시킨다.
대용량 데이터베이스 Write 환경에서 효율적이다.
특히, Full Scan이 많은 데이터의 Access 범위를 줄여주어 효율적이다.
많은 INSERT가 있는 OLTP 시스템에서 INSERT 작업을 작은 단위인 partition들로 분산시켜 경합을 줄인다.
OLTP는 Online Transaction Processing으로 온라인상에서 일어나는 트랜잭션 작업으로 삽입, 수정, 삭제 연산들을 뜻한다.
- 가용성 물리적인 파티셔닝을 통해 데이터 손실/훼손 가능성이 줄어든다.
각 분할영역(파티션 별로)을 독립적으로 백업하고 복구할 수 있다.
테이블을 파티션 단위로 Disk I/O를 분산하여 처리하기 때문에 Update 성능을 향상시킬 수 있다.
- 관리용이성 큰 테이블을 제거하여 관리를 쉽게할 수 있다.
관리적 측면으로는, 파티션 단위의 백업이 가능하고 추가 삭제 변경과 같은 작업을 처리하기 수월해진다.
- 전체 데이터를 손실할 가능성이 줄어 가용성이 향상된다.
- 파티션별로 데이터를 백업 복구가 가능하다.
- 파티션 단위로 I/O 작업을 처리하여 Update 성능이 향상된다.
성능적 측면으로 파티션 단위로 DML를 수행하기 때문에 데이터 스캔 영역이 줄어들어 성능이 향상된다.
- Full Scan의 Access 범위가 파티션으로 줄게되어 성능이 향상된다.
- 필요한 데이터만 빠르게 조회할 수 있으니 쿼리 자체가 가볍다.
- Join 연산의 비용이 증가될 수 있다.
- 파티션키로 지정하지 않은 데이터로 조회연산과 같은 기능을 수행할 때 여러 파티션 테이블들에서 Join이 발생할 수 있으므로 주의해야한다.
- Table과 Index를 별도로 파티셔닝 할 수 없다. -> 무조건 같이 해야한다는 단점이 있다