- MySQL Patitioning
- 웹서비스에 최적화된 Multi-Replication : 읽기 성능을 향상시키기 위해서 사용한다.
- 대용량의 데이터를 쓸 때, 성능을 향상시키기 위해서는 어떻게 해야할까? ▶ Patitioning
- 데이터를 입력받으면 어디에 넣어야하는가?
- dictionary 방식으로 각각의 Location을 지정한다.
- VLDB(Very Large DBMS)
- Very Large한 테이블을 뒤져서 Join을 하는 것이 가능한가? ▶ 굉장히 힘들다.
- 정규화를 통해 redundancy를 없애는 DB의 기본 규칙(Normalize)에 위배되는데?
- 해결방안 : De-normalization(중복 허용)
- 대용량의 데이터를 쓸 때, 성능을 향상시키기 위해서는 어떻게 해야할까? ▶ Patitioning
단점 :
- Patitioning : Location Problem
- 데이터를 입력받으면 어디에 넣어야하는가?
- dictionary 방식으로 각각의 Location을 지정한다.
- VLDB(Very Large DBMS)
- Patitioning : Join
- Very Large한 테이블을 뒤져서 Join을 하는 것이 가능한가? ▶ 굉장히 힘들다.
- 정규화를 통해 redundancy를 없애는 DB의 기본 규칙(Normalize)에 위배되는데?
- 해결방안 : De-normalization(중복 허용)
장점 :
- Patitioning : Write Perfomance Upgrade
- 테이블을 작게 나누어두어 입력에 강점을 보인다.
- 단점을 덮을만큼 강력한 장점
※ 참조 : http://blog.hibrainapps.net/131
- MySQL Partition 사용시 제약 사항
- 모든 파티션은 동일한 스토리지 엔진 사용
파티션별 다른 엔진을 지정하여도 에러가 발생하지는 않지만 적용되는것은 아니다.
- 테이블과 인덱스를 별도로 파티션 할수는 없다. 테이블과 인덱스를 같이 Partitioning 하여야 한다.
- Partition 된 테이블은 foreign Key를 지원하지 않는다.
- Partition 된 테이블은 FullText Index 를 지원하지 않는다.
- Partition 된 테이블은 Geometry(point, geometry...) 컬럼 타입을 지원하지 않는다.
- 한 테이블당 파티션의 갯수는 최대 1,024개이다.
- Temp Table 은 파티션 사용 불가.
- Partition 값은 정수형이어야 한다.
- 테이블이 Unique 또는 Primary Key를 가지고 있다면, 파티션키는 모든 Unique 또는 Primary Key의 일부 또는 모든 컬럼을 포함해야 한다.
- 예제
#####################################################
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
PARTITION BY RANGE (YEAR(hired)) (
PARTITION p0 VALUES LESS THAN (2010),
PARTITION p1 VALUES LESS THAN (2011),
PARTITION p2 VALUES LESS THAN (2012),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
#####################################################
#Partition 추가
ALTER TABLE employees ADD PARTITION(PARTITION p4 VALUES LESS THAN (2009));
#Partition 삭제
ALTER TABLE employees DROP PARTITION p4;
#기존 파티션의 분리
ALTER TABLE employees
REORGANIZE PARTITION p3 INTO (
PARTITION p3 VALUES LESS THAN (2013),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
#기존 파티션의 병합
ALTER TABLE employees
REORGANIZE PARTITION p2,p3 INTO (
PARTITION p23 VALUES LESS THAN (2012)
);
#####################################################
- 기존 테이블을 파티션 적용하기
#####################################################
alter table [테이블이름] partition by range ([컬럼값])
(partition c0 values less than (100000),
partition c1 values less than (500000),
partition c2 values less than (1000000),
partition c3 values less than MAXVALUE);
#MAXVALUE를 설정하지 않으면 범위에 대한 에러메시지가 처리된다.
#####################################################
- MySQL Partition 종류
- Partition by Range
- Partition by List
- Partition by Hash
- Partition by Key
댓글 없음:
댓글 쓰기