관리 메뉴

Mini

where IN 절의 한계, 해결 본문

CS/DB

where IN 절의 한계, 해결

Mini_96 2024. 8. 25. 12:27

* 한계 : 100개가 넘는경우, 풀스캔을함

* 해결 : In절에 담는 값을 Promise.all을 이용해 분할처리(20개씩)

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

이전과는 달리 이번에는 where id in (ID) 에 포함되는 ID의 개수가 100개를 초과해서 인덱스를 사용하지 못하고 테이블 풀 스캔을 하는 쿼리의 문제였습니다.

위 쿼리는 장바구니, 구매완료, 결제페이지 등에서 신청하는 강의들의 정보를 가져오는 쿼리입니다.

(수강바구니)

이 쿼리가 평소에는 문제가 없었지만, 이번 이벤트의 경우 125개의 강의를 100% 할인하는 것이 원인이 되었습니다.
한번에 125개 강의를 모두 담아서 일괄 결제 (어차피 0원이니) 하는 수강생분들이 급증했기 때문입니다.

이 문제를 해결하기 위해서 “한번에 담는 강의의 수를 제한” 보다는 IN 절에 담는 ID를 20개씩으로 끊어서 Promise.all 로 분할처리하도록 구성하여 IN 절을 통한 인덱스 효과를 다시 사용할 수 있도록 하였습니다.

이렇게 첫 주의 할인 이벤트가 마무리 됩니다.

 

https://tech.inflab.com/202201-event-postmortem/

 

2022년 1월 100% 할인 이벤트 장애 부검

안녕하세요 인프랩의 향로입니다. 인프런 서비스는 2022년 1월 3일 ~ 17일까지 지속적으로 서비스를 사용할 수 없는, 역대급 장애가 발생했습니다. 이번 장애 기간동안 정말 많…

tech.inflab.com