Search

[Airflow 운영 안정화] DMS 정합성 알람 트러블슈팅

제목
작성일

배경

메인 서비스 MariaDB데이터팀 MariaDB 간 복제를 위해 AWS DMS (Database Migration Service) 사용 중
DMS 동작 검증을 위해 매시간 직전 2시간 구간의 데이터를 기준으로
소스/타깃 DB의 Row 수 비교
스키마 변경 여부 감시 로직이 존재함
그 중 CART 테이블만 거의 소스 테이블 행 수가 더 많다는 정합성 알람이 자주옴

원인 분석

1. CART 테이블의 특성
CARThard delete가 발생하는 테이블로, 사용자가 장바구니에서 상품을 제거하면 실제로 레코드가 삭제됨
조회 쿼리 예시
SELECT COUNT(*) FROM CART WHERE created_at >= '2025-09-23 18:00:00' AND created_at < '2025-09-23 19:00:00'
SQL
복사
2.
로그 분석
데이터 비교하는 task 로그를 보면 Secret retrieved successfully. 가 두번 찍히는 것을 볼 수 있었음
이는 소스 DB와 타겟 DB 각각 connection 맺어서 값을 조회할때, 시크릿매니저에서 DB 시크릿 값을 읽어오면서 찍히는 로그
타임라인
17:02:10 - 메인 DB 시크릿 조회 후 COUNT 쿼리 수행
17:02:26 - 데이터팀 DB 시크릿 조회 후 COUNT 쿼리 수행
→ 두 쿼리간 16초 차이있음
3.
원인 정리
a.
메인 DB에서 COUNT 쿼리 실행 시점에 CART에 존재하던 데이터가 포함된 상태
b.
이후 16초 텀 사이에 장바구니에 담은 항목들이 삭제
c.
데이터 DB CART 삭제 CDC 이벤트가 바로 반영되어 행개수가 줄어듬
d.
타깃 DB에서 COUNT 쿼리 실행 시 이미 줄어든 상태로 조회
e.
최종적으로 비교시 메인 DB CART의 행 수가 항상 더 많게 나옴

개선

동시 쿼리 실행으로 시차 제거
ThreadPoolExecutor(max_workers=2) 사용
소스/타깃 COUNT를 동시에 실행
시크릿 호출 최적화
기존 boto3를 통한 Secrets Manager 직접 호출 제거
기존 방식인 Airflow Connection + MySqlHook 으로 일원화
검증 윈도우 수정
의미없던 타임 윈도우 2시간 → 1시간으로 중복 집계 없애고 한시간마다 한시간치만 조회하도록 변경

결과

변경 이후 동일 유형의 CART 정합성 노이즈 알람 제거됨
진짜 정합성 알람만 남게되어 DMS 모니터링 신뢰도 향상