카테고리 없음
오늘의 문제는 대용량 쿠폰으로 인한 디스크 점유 문제 입니다.
gw1
2025. 10. 2. 21:09
회원 수 1000만명인 서비스에서
1년 이상 가입한 모든 고객에게 할인 쿠폰을 지급하기로 함
쿠폰을 지급 받는 대상자는 총 900만 명임
SELECT * FROM user where created_at <= '2024-10-02 00:00:00';
웹서버에서 해당 쿼리로 조회 후
유효한 사용자 인지 이것저것 체크 후에
INSERT INTO user_coupon (coupon_id, user_id)
VALUES
('1234', 101),
('1234', 102),
('1234', 103),
('1234', 104),
('1234', 105)
.....
('1234', 89777777);
// 1년 이상 가입 고객 id를 뽑아서 (coupon_id, user_id)로 유저 수 만큼 삽입
기존에는 총 900만개 ROW를 Bulk INSERT로 한번에 삽입을 진행
이로 인해 CPU 사용량, 메모리 사용량, 디스크 사용량(트랜잭션 undo, redo log, Binlog, 데이터 자체 GB, 인덱스 저장 크기 등)
모든 물리적인 자원이 폭증하는 현상이 발생
하지만, 이러한 모든 유저를 대상으로 지급하는 쿠폰 이벤트를 자주하여
디스크 GB 사용량이 비용이 감당이 안됨 오히려 적자가 발생
유저가 적을 때는 아무 문제 없었지만, 유저가 많아져 문제가 발생
해결책을 고안하세요
필요 시 추가 조건 설계 가능