728x90
반응형
130만건 데이터를 백업하는 경우가 있다. 총 3천만건 정도 되는 테이블이라 슬로우쿼리가 팍팍하게 걸린다.
일단 생각나는대로 조회쿼리를 뚝딱뚝딱 조립해서, 백업을 시도했다.
반응형
CREATE TABLE Z_BAK_M_DATA AS
SELECT *
FROM K_V2.M_DATA m
WHERE SRC_SEQ = 3
AND m.M_POINT_ID IN (
SELECT m2.M_POINT_ID
FROM K_V2.M_DATA m2
LEFT JOIN K_V2.OUTDOOR_M_POINT o
ON m2.M_POINT_ID = o.OUTDOOR_M_POINT_ID
AND o.DEL_YN = 'N'
WHERE m2.SRC_SEQ = 3
AND o.OUTDOOR_M_POINT_ID IS NULL
);
단순하게 접근하니, 느리고, 안되고, 슬프네.
느리고, 뻗고, 재기동하면서 내가 잘못했다 인정을 한다.
그래서 GPT 형님께 문의를 하면서 튜닝을 시작한다.
형님의 조언을 듣고보니, 고개가 절로 끄덕여진다. 그래 이게 맞지.
CREATE TABLE Z_BAK_M_DATA
NOLOGGING
PARALLEL 8
AS
SELECT /*+ PARALLEL(m 8) */
m.*
FROM K_V2.M_DATA m
WHERE m.SRC_SEQ = 3
AND NOT EXISTS (
SELECT 1
FROM K_V2.OUTDOOR_M_POINT o
WHERE o.OUTDOOR_M_POINT_ID = m.M_POINT_ID
AND o.DEL_YN = 'N'
);
현재 쿼리가 느린 이유 (핵심)
- IN (서브쿼리)
→ 대량 데이터에서 가장 느린 패턴 중 하나 - MEASURE_DATA를 두 번 스캔
- LEFT JOIN + IS NULL
→ 옵티마이저가 잘못 타면 풀스캔 - CTAS 단일 트랜잭션
- 이후 DELETE도 같은 조건으로 또 풀스캔 예정
문제는 늘 정답을 놓고 보면 명확하고, 간단한 해법들이 있다.
공부를 해야 한다. 열심히 해보자.
728x90
반응형
'study > TIP' 카테고리의 다른 글
| Git 이슈 1. Eclipse / 디자이너 PC에서 Pull 시 .gitignore 충돌 해결 (0) | 2026.06.10 |
|---|---|
| 바이브코딩, 감으로 하지 말고 점수로 보자 — VibeGraph 만든 이야기 (1) | 2026.06.07 |
| JENKINS MVN BUILD OPTION (0) | 2026.01.14 |
| jenkins plugin : invoke top-level Maven targets (0) | 2026.01.08 |
| 스마트폰 패턴잠금 오류 해결 (1) | 2025.08.19 |