일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SUM
- Oracle
- MySQL
- 데이터분석
- matplotlib
- 결측값
- seaborn
- 파이썬
- 프로그래머스
- GROUPBY
- hackerrank
- mysql :=
- 전처리
- solvesql
- join
- 그로스해킹
- airflow 설치
- SQL
- TRUNCATE
- 머신러닝
- 데이터리안 웨비나
- Limit
- SQLite
- pandas
- not in
- PostgreSQL
- 데이터시각화
- Round
- 다중 JOIN
- having
- Today
- Total
Milky's note
[PostgreSQL] Table Partitioning 본문
2021년 3월에 운영 시스템을 오픈했다.
그 시점부터 로그를 테이블에 쌓고 있다.
하지만 시간이 지날수록 점점 데이터는 늘어가고 테이블의 사이즈는 커지고 있다.
로그 같은 경우에는 물론 주기를 정해놓고 오래된 로그는 지우는 게 맞는데,,, 담당자가 불안해하고 있어서
지우지 못하고 있다..ㅜ 다시 한 번 지우자고 주기 정해서 건의해봐야지!
그래서 테이블의 크기는 커져가고 있는 중에, 데이터를 조회하는 건 부하가 점점 심해져서 월 별로 로그 테이블을 파티셔닝 하기로 했다.
당연히 작업 절차서를 만들어서 진행하였다.
개발계에 있는 건 부담없이 진행하였는데, 운영계 할 때는 떨렸다. ㅎㅎ
테이블 파티셔닝의 순서는 다음과 같다.
1. 파티션 테이블 생성
2. 기존 전체 테이블의 데이터를 기간으로 나누어서 파티션 테이블에 insert
3. 파티션 테이블에 성공적으로 들어갔는 지 확인
-- 파티셔닝 테이블 생성
CREATE TABLE log_m202101 PARTITION OF log (
CONSTRAINT log_m202101_pk PRIMARY KEY (tran_id)
)FOR VALUES FROM ('20210101') TO ('20210201')
TABLESPACE pg_default;
CREATE TABLE log_m202102 PARTITION OF log (
CONSTRAINT log_m202102_pk PRIMARY KEY (tran_id)
)FOR VALUES FROM ('20210201') TO ('20210301')
TABLESPACE pg_default;
CREATE TABLE log_m202103 PARTITION OF log (
CONSTRAINT log_m202103_pk PRIMARY KEY (tran_id)
)FOR VALUES FROM ('20210301') TO ('20210401')
TABLESPACE pg_default;
-- 데이터 insert
INSERT INTO log_m202101 (SELECT * FROM log WHERE proc_date BETWEEN ('20210101') AND ('20210131'));
INSERT INTO log_m202102 (SELECT * FROM log WHERE proc_date BETWEEN ('20210201') AND ('20210228'));
INSERT INTO log_m202103 (SELECT * FROM log WHERE proc_date BETWEEN ('20210301') AND ('20210331'));
작업하는 날 기준으로 전날까지 쌓인 로그들을 대상으로 진행하였고, 건수를 먼저 조회하고 insert한 건수와 동일한지 확인을 하였다.
작년 1년치의 파티셔닝 테이블을 미리 만들어놨었고, 해가 바뀌기 전에 미리 2022년도의 파티셔닝 테이블도 생성해놓았다.
2022년 1월 1일이 되자마자 잘 들어가고 있는 걸 확인했다.
파티셔닝 테이블이 자동으로 생성되게 트리거나 펑션을 이용해서 할 수도 있다고 한다.
파티셔닝할 때는 로그 관련된게 주 업무가 아니라 다른 개발건들이 밀려서ㅜㅜ 수동으로 빨리 진행하였다.
지금은 시간적 여유가 좀 되니, 트리거를 통해 동적으로 파티셔닝 테이블이 생성되는 것을 해보아야겠다.
'SQL > 요약 정리' 카테고리의 다른 글
[K-Digital] 데이터 모델링 (0) | 2022.05.18 |
---|---|
[PostgreSQL] Vacuum 수행 (2) | 2022.01.05 |
[PostgreSQL] Window Function (1) | 2021.11.29 |