카테고리 없음

오늘의 문제는 유저 등급 갱신 입니다.

gw1 2025. 9. 14. 00:17
CREATE TABLE `user` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `user_id` int DEFAULT NULL,
  `total_price` int NOT NULL DEFAULT '0',
  `grade` enum('브론즈','실버','골드','플래티넘') NOT NULL DEFAULT '브론즈',
  PRIMARY KEY (`id`),
  KEY `idx_total_price_grade` (`total_price`,`grade`),
  KEY `idx_grade_total_price` (`grade`,`total_price`)
) ENGINE=InnoDB AUTO_INCREMENT=1310697 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

 
100만건 존재
 
 

 
user 테이블에 total_price로 누적 금액 칼럼이 있음
 
주문 완료가 될때마다 total_price가 업데이트됨
 
문제 : 매일 1번 오전 9시에 아래 쿼리가 실행됨
정책상 매일 9시에 일괄 반영되도록 설정되어
주문 완료시마다 갱신되도록 변경은 불가능하다고 가정하겠습니다.

UPDATE user
SET grade = CASE
    WHEN total_price < 100000   THEN '브론즈'
    WHEN total_price < 500000   THEN '실버'
    WHEN total_price < 700000   THEN '골드'
    ELSE '플래티넘'
END;

 

 
83초가 소요되었습니다.
 
그동안 다른 user 관련 쓰기 작업이 락을 대기하여
 
고객으로 부터 화면에 반응이 없다고 컴플레인이 발생하였습니다.
 


위의 언급된 매일 9시 일괄 갱신 외에

어떤 방법이든 제한은 없지만

현재 상황에 적합한 가장 적은 비용의 방법을 제시하세요