DB

[DB] 파티션 테이블 (Partition Table) : MYSQL

JUN0126 2023. 1. 7. 16:03

데이터를 쌓기 시작하면서 시간이 지나 엄청나게 많은 양의 데이터가 쌓이게 되고 해당 데이터를 조회 하게 되면 당연히 해당 조회 쿼리는 많은 시간을 사용하게 될 것입니다.

테이블 파티셔닝이라는 기능을 이용하여 이렇게 많은 데이터들을 관리할 수 있습니다. 그렇다면 테이블 파티셔닝은 어떠한 기능일까요?

테이블 파티셔닝 이란?

테이블 파티셔닝은 논리적으로는 하나의 테이블이지만 물리적으로는 여러개의 파티션을 생성하여 각 파티션에 데이터가 나뉘어서 들어가는 기능을 뜻 합니다.

그러하여 데이터를 조회할 때 특정 조건을 만족하는 파티션에서 데이터를 조회하여 데이터를 빠르게 조회할 수 있으며 데이터 삽입 시에도

파티셔닝을 진행한 조건에 맞춰 데이터가 각 파티션에 알맞게 들어가서 관리 측면에서도 장점이 있습니다.

 

테이블 파티셔닝을 사용하기 좋은 테이블

특정한 용도를 가지고 있는 테이블을 정해놓고 테이블 파티셔닝을 진행하지는 않지만 일반적으로 많이 사용되는 테이블은 로그 테이블입니다.

로그테이블은 단순히 기록을 남기는 테이블로써 특정 기간에 대한 데이터를 조회할 경우 파티셔닝된 데이터들을 구간 조회를 더욱 빠르게 할 수 있으며, 기간이 오래된 로그 데이터 같은 경우 데이터를 활용하지 않아 데이터를 지워주는 작업을 이행하는데에 있어서도 오래된 데이터를 가지고 있는 파티션 만을 제거하여 데이터 관리를 할 수 있으므로 로그 테이블에 파티셔닝을 일반적으로 이루어집니다.

 

테이블 파티셔닝을 위한 테이블 키 설정

테이블 파티셔닝을 위해서는 특정 컬럼을 기준으로 데이터를 나누기 때문에 해당 특정 컬럼은 기본키가 되어야 합니다.

그러하여 일반적으로 사용하는 id에 있어서 ' id + 특정 컬럼 ' 을 통하여 복합키를 만들어 기본키를 설정해 준 뒤 파티셔닝을 진행해야 합니다.

위에 예시로 들었던 로그 같은경우 일반적으로 생성 일자가 기본적으로 있을 것이며 해당 일자를 기준으로 연도별로 테이블 파티셔닝을 수행하면 최근 1년에 대한 로그 데이터는 해당 기간에 만족하는 파티션 에서 데이터를 가져와 전체 조회를 하지 않고 데이터를 가져 올 것이며, 5년이 지난 데이터를 삭제함에 있어서도 해당 기간에 알맞는 데이터만 삭제함에 있어 테이블 파티셔닝이 용이합니다.

 

테이블 파티셔닝 기본키 설정

ALTER TABLE '테이블명'
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (id, created_at);

기존에 생성된 테이블의 테이블 파티셔닝 진행 시 파티셔닝 될 컬럼은 기본키가 되어야 하는데 기존에 설정해둔 기본키를 제거하고 파티셔닝 키값이되는 값과 함계 기본키를 구성해야 합니다.

 

파티션 조회 

SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS
FROM information_schema.PARTITIONS
WHERE TABLE_NAME = '파티셔닝된 테이블명';

 

테이블 파티셔닝의 종류

1. Range

Range 파티션은 위의 로그 예시와 같이 기간을 기준으로 잡아 파티셔닝을 진행하는 것 입니다.

2. Hash

Hash 파티션은 전체 데이터를 지정해놓은 컬럼을 기반으로 DB 엔진에서 지정한 hash function 을 통하여 균일하게 데이터를 나눠 놓은 것 입니다.

3. List

List 파티션은 지정한 컬럼을 기반으로 해당 컬럼에 지정한 값이 들어온다면 해당 값으로 생성된 파티션에다가 데이터를 집어 넣는 기능 입니다.

4. Composite

위에서 나열한 1,2,3 의 파티션을 섞어 사용하는 파티션인데 주 파티션으로 파티션을 진행한 후 서브 파티션을 생성하여 

일반적으로 Range-Hash 파티셔닝이 사용됩니다.

 

 

파티셔닝 중 많이 사용되는 파티션은 Range <- Hash <- List 순 이라고 하네요.. 

 

'DB' 카테고리의 다른 글

DB 정규화  (0) 2022.07.19
시계열 데이터 베이스 (TSDB : Time-Series DataBase)  (0) 2021.05.11