메모용 글입니다.
1. mysql은 Clustered Index가 기본이고 모든 테이블에 존재함을 감안
2. 가능하면 불필요한 secondary index 추가는 안함(필요성에 의해서 IDX_uid가 추가되었지만)
3. 파티션 add가 안되어서 서비스 장애가 발생하는걸 방어하기 위해서 MAXVALUE 처리
4. 월 파티션으로 생성
- 필요에 따라서 일 파티션으로 줄여도됨. 다만 mysql 파티션 최대 갯수의 제한이 있으니 서비스 특성 고민
내용
-
DDL
-- 로그인 이력 테이블 추가(파티션 추가가 안되었을 때 방어로직으로 MAXVALUE 파티션까지 처리 해둠)
CREATE TABLE `login_hist_test`(
`login_ymdt` DATETIME NOT NULL COMMENT '로그인일시',
`uid` BIGINT(19) UNSIGNED NOT NULL COMMENT '유저ID',
`req_ip` VARCHAR(50) NOT NULL COMMENT '요청자IP',
`device_model` VARCHAR(100) COMMENT '요청 디바이스 모델',
`country` VARCHAR(6) COMMENT 'Country 값',
PRIMARY KEY (`login_ymdt`, `uid`),
INDEX `IDX_uid` (`uid`)
) COMMENT='로그인이력'
PARTITION BY RANGE (TO_DAYS(login_ymdt))
(
PARTITION P_2018_11 VALUES LESS THAN (TO_DAYS('2018-12-01')),
PARTITION P_max VALUES LESS THAN (MAXVALUE)
);
-- 파티션 추가(REORGANIZE로 방어 파티션 P_max까지 수정)
ALTER TABLE login_hist_test REORGANIZE PARTITION P_max INTO (
PARTITION P_2018_12 VALUES LESS THAN (TO_DAYS('2019-01-01')),
PARTITION P_max VALUES LESS THAN MAXVALUE
);
-
결과
-
최초 테이블 생성 결과
-
파티션 추가
'DB > Mysql' 카테고리의 다른 글
글로벌 서비스 개발시, Mysql 날짜/시간에 처리를 위한 데이터타입 확인 (0) | 2021.11.17 |
---|---|
Mysql n-gram을 이용한 검색 (2) | 2021.08.26 |
Mysql full text 검색(전문 검색) 정리 (0) | 2019.05.06 |
Mysql rules(with java) (0) | 2018.12.28 |
CentOS 7에 Mysql 5.7 설치 (1) | 2017.05.17 |