-
# DB PK Index 생성 속도 저하 이슈 (postgreSQL)개발메모 2025. 3. 24. 22:28
회사에서 엑셀 업로드로 데이터를 등록하면서 생긴 일이다.
엑셀 업로드를 진행함에 있어 속도 저하가 너무 심했던 것.
많은 원인을 분석 해봤다.
- 엑셀 row를 읽어 들이는 반복문에 쓸데 없는 조건이나 반복이 중첩되나? -> 없음
- 기준정보 데이터를 DB에서 불러오는 과정에서 누수가 발생할 쿼리가 존재 하는가? -> 없음
- 혹시 개발용으로 생성한 DB 인스턴스의 리소스가 너무 박한가? -> 원인은 아니었음.
그럼 무엇이었을까.
해당 프로젝트는 Spring boot + JPA를 사용하고 있었기에Hibernate 옵션에서 SQL DDL을 로그에 표시하도록 설정을 변경 하고 엑셀 업로드를 다시 진행 했다.
그랬더니..
만약 500건이라고 치면, PK Index를 500건의 인서트가 발생 할 때마다 생성하는 쿼리가 조회 되었다.
알고 봤더니 습관적으로 DB Table의 PK incresement 의 단위를 1로 했던게 속도 저하를 야기 했던 것이었다.
바로 Chat GPT 선생님께 질문 했더니, 만약 대량 인서트 or 업데이트가 자주 발생하는 테이블일 경우 PK incresement의 단위를 더 크게 잡아서 작업하는 것을 추천해줬다.
예를 들어,
PK incresement의 단위를 100건으로 설정 한 뒤 데이터를 500건 업로드를 한다면
PK 생성 쿼리는 100건당 1번씩 나가기 때문에 1로 했을때 보다 훨씬 빠르게 처리가 가능한 것이었다!
다만, 이런 방식에는 맹점이 있으니
100건의 Index를 한번에 생성하기 때문에, 혹여 100건 이하로 데이터가 업로드가 된다면 차이만큼의 Index는 사용되지 못한 채 사라지게 되는 문제가 생긴다.
결국, 업로드하는 데이터양을 고려해서 PK incresement의 단위를 적절하게 설정해서 작업한다면 index의 누수를 최대한 막을 수 있는 것이었다.
무튼, 하루하루 가시밭길..'개발메모' 카테고리의 다른 글
# DB time zone 다루기 (0) 2025.04.01 # apache POI 라이브러리 사용과 엑셀 row 빈 값 (0) 2025.03.31 # AWS ECS 구성하기 (0) 2025.02.17 # 외부 DNS 도메인 AWS alb 연동 (0) 2025.02.11 # AWS ElastiCache 사용하기 (0) 2025.02.06