카테고리 없음
포인트 만료 배치 개선
gw1
2026. 2. 27. 23:37
CREATE TABLE `user_points` (
`id` bigint NOT NULL,
`user_id` bigint DEFAULT NULL,
`amount` int DEFAULT NULL,
`used_amount` int DEFAULT '0',
`expired` char(1) DEFAULT 'N',
`expire_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_expire_at` (`expire_at`),
KEY `idx_expired` (`expired`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ciUPDATE user_points
SET expired = 'Y'
WHERE expired = 'N'
AND expire_at <= NOW();

해당 UPDATE 쿼리는 10초 정도 소요됩니다.
expired = 'N' 만료되지 않은 적립금 중
expire_at 만료 기간이 지난
적립금을 만료 상태로 변경합니다!!!
매일 0시 00분에 자정에 해당 쿼리가 돌아가는데
그때 주문이 너무 느리다는 문의가 접수되었습니다.



1. 문제의 제약 사항으로 (expired, expire_at) 인덱스 생성은 불가합니다.
2. 적립금 만료 변경 완료는 0시00분00초에서 조금 늦게 되도 됩니다.
3. 해당 개선의 목적은 사용자 주문 과정 딜레이 방지 입니다.