본문 바로가기

DS

MariaDB Partioning

반응형



# MariaDB Partitioning
사용 하게 된 이유:
- 많은 양의 데이터가 한 테이블에 쌓여서 검색속도가 느리다
- 인덱스의 크기가 물리적인 메모리보다 커진다.
- 삭제를 할 경우 물리디스크에서 사이즈는 줄어들지 않게 된다.
delete 명령으로 테이블의 데이터를 삭제 할 경우 사이즈가 줄어 들지 않는다.
* innoDB 테이블일 경우 optimize 제공이 안된다.
파티션 도입 :
- 특정 범위내의 데이터 검색 삭제 가 빠르게 된다.
하나의 테이블에 저장하던 데이터를 여러개의 테이블로 분산 저장함으로써 범위 내의 검색이 빨라짐
또한 데이터 삭제시 디스크 용량을 줄일수 있음
- 한 테이블에 많은 데이터가 입력되었을때 발생하는 문제를 해결 할 수 있다.
파티션 제약 사항:(Ragne 만 해당)
- Partition 컬럼은 primary Key 중 하나여야 한다.
- 테이블 컬럼 속성중 Unique 를 사용 할 수 없다.
파티션 종류:
RANGE,List,Hash etc

파티션 방법: ( RANGE 만 사용 )
CREATE TABLE MEMBER(
ID VARCHAR(50) NOT NULL,
EMAIL VARCHAR(50) NOT NULL,
CREATED DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY PKEY (ID,CREATED)
) ENGINE=INNODB CHARSET = utf8
PARTITION BY RANGE (TO_DAYS(CREATED))(
PARTITION p20170601 VALUES LESS THAN (TO_DAYS('2017-06-01 00:00:00')),
PARTITION p20170602 VALUES LESS THAN (TO_DAYS('2017-06-02 00:00:00')),
PARTITION p20170603 VALUES LESS THAN (TO_DAYS('2017-06-03 00:00:00')),
PARTITION pMAX VALUES LESS THAN MAXVALUE
);
멤버 테이블을 생성후 primary key 는 multiple key() id,created) 를 생성함
multiple key 를 생성한 이유는 partition range 의 컬럼에는 반드시 primary key 가 포함되어 있어야 하는 제약 사항 때문이다.

파티션 테이블 생성은 수동으로 추가해주는 것보다 event scheduler 에 등록하여 생성해주는것이 편리하다

THAN 절 안에는 해당 파티션의 MAX 값을 넣어준다.
데이터가 들어갈 파티션은 VALUESE LESS THAN 구문에 의해 결정 된다.
CREATED 가 '2017-05-031 00:00:00' ~ '2017-06-01 00:00:00' 까지는 p20170601 파티션 테이블에 데이터가 들어간다.
현재 p20170603 테이블까지만 생성된 상태에서 CREATED '2017-06-03 00:00:00' 일 경우에는 해당 값이 들어갈 파티션이 지정되어
있지 않기 때문에 에러가 발생한다.
따라서 어떤 값이 들어 오더라도 에러가 나지 않도록 pMAX 테이블 , MAXVALUE 를 지정 하도록 해준다.

파티션 추가:
ALTER TABLE MEMBER ADD PARTITION (
PARTITION p20170604 VALUES LESS THAN (TO_DAYS('2017-06-04 00:00:00'))
);
파티션 삭제:
ALTER TABLE MEMBER DROP PARTITION p20170601;
파티션 정보 :
INFORMATION_SCHEMA.PARTITIONS 테이블에서 확인 가능하다.


반응형

'DS' 카테고리의 다른 글

Postgresql daily auto partition  (0) 2017.06.02
Postgresql session issue 해결방법  (0) 2017.06.02
Mariadb log 활성화  (0) 2017.05.31
DB size query  (0) 2017.05.30
MariaDB clustering  (0) 2017.05.22