본문 바로가기

Issues2

[Issues] 성능 개선 전략: 인덱스, 역정규화 들어가기 전성능 개선을 이야기할 때 가장 흔하게 등장하는 단어는 인덱스다.쿼리가 느리면 인덱스를 추가하고 그래도 느리면 인덱스를 하나 더 추가한다.하지만 실무에서는 인덱스를 아무리 추가해도 성능이 거의 개선되지 않는 경우가 분명히 있을 뿐더러 오히려 무분별한 인덱스 추가는 쓰기 성능 저하, 저장 공간 증가, 인덱스 유지·관리 비용 상승 같은 부작용을 낳을 수 있다.이 글은 그런 상황에서 출발한다.호텔을 검색할 때 전형적인 읽기 중심 도메인을 기준으로 정규화된 모델이 왜 느려지는지 그 문제를 해결하기 위해 왜 역정규화를 먼저 선택하게 되는지 그 이후 인덱스와 비트맵 설계가 어떤 역할을 맡게 되는지를 순서대로 정리한다.핵심은 "어떤 기법이 빠르다"가 아니라 "어떤 문제에 어떤 순서로 접근해야 하는가" 다.1.. 2026. 2. 2.
[Issues] 대량 Delete 작업 중 발생한 lock 문제 분석 1.문제 상황 Spring Batch 기반의 백엔드 시스템에서 멀티 스레드로 대용량 삭제 작업을 수행하는 중 지속적으로 락 대기 시간 초과(Lock wait timeout) 이 발생하였습니다. 해당 배치 작업은 총 10개의 스레드가 병렬로 실행되며 대부분의 데이터를 미리 Processor 레벨에서 가공하여 삭제 -> insert 하는 방식으로 실행되었는데 예를 들어 tb_order_item 테이블에서 특정 order_id 목록에 해당하는 행들을 한꺼번에 삭제하는 형태였습니다. -- 예시: 하나의 스레드가 실행하는 삭제 쿼리 (IN 절에 다수의 ID 포함)deletefrom tb_order_itemwhere order_id in (101, 102, ..., 250); 대게 그렇듯이 다른 테이블.. 2026. 1. 6.