카테고리 없음

포인트 만료 배치 개선

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_ci
UPDATE 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. 해당 개선의 목적은 사용자 주문 과정 딜레이 방지 입니다.