서브쿼리를 이용한 조인 쿼리 개선하기(3) - JAVA 병목 원인 찾기
개발일지/문제 해결하기 ~2024. 8. 6. 00:54서브쿼리를 이용한 조인 쿼리 개선하기(3) - JAVA 병목 원인 찾기

https://gani-dev.tistory.com/141 서브쿼리를 이용한 조인 쿼리 개선하기(2) -쿼리 개선기https://gani-dev.tistory.com/140 서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무gani-dev.tistory.com지난 글에 이어서, 모든 유저 포인트 조회 기능을 개선해보려고 한다. 이전 상황유저 포인트 조회 기능 성능 향상을 위해 SQL을 개선했다서브쿼리를 이용하여 조인 비용을 줄임 성능테스트 - MTT 는 18초 -> 9초  46.73% 속도 개선됨그러나 아직도 9초나 걸린다는 문제가 있음실행 시간 측정 결과 , DB보다 Java 코드에..

서브쿼리를 이용한 조인 쿼리 개선하기(2) -쿼리 개선기
개발일지/문제 해결하기 ~2024. 8. 1. 01:11서브쿼리를 이용한 조인 쿼리 개선하기(2) -쿼리 개선기

https://gani-dev.tistory.com/140 서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무 느려 개선해보려고 한다. ERD이번 글은 , 저번 데드락 해결하기 글과 이어지는데, 아gani-dev.tistory.com 이전 글에서는 현재 쿼리의 분석과 문제점을 파악했다. 현재 상황 분석모든 사용자의 포인트를 조회했을 때,  MTT 는 18초 , TPS는 5.3을 기록했다.쿼리에서 oauth_id를 기준으로 인덱스 타고 있었음에도 불구하고,, 속도가 느린 문제가 발생했다.실행 계획을 통해 원인을 분석한 결과 ,  쿼리가 조인 연산을 대략 24만번 수행하고 있었다.sele..

서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석
개발일지/문제 해결하기 ~2024. 7. 30. 03:36서브쿼리를 이용한 조인 쿼리 개선하기(1) - 현재 상황 분석

조인 쿼리 개선하기1. 현재 상황'당장' 서비스에는 모든 유저의 포인트를 조회하는 API가 있는데, 속도가 너무 느려 개선해보려고 한다. ERD이번 글은 , 저번 데드락 해결하기 글과 이어지는데, 아래 ERD에서 User 테이블과 PointHistory 테이블을 확인해 보자User 테이블에는 사용자 정보가 저장되어 있고, PointHsitory에는 포인트 적립 및 사용 내역이 기록되고 있다. 예를 들어, oauth_id가 1인 유저가 혈당을 기록하여 200 포인트를 적립 받았다면, PointHistory 테이블에는oauth_id = 1, 포인트 유형(Product_name) = '혈당 기록' , 날짜시간(created_at) = '2024-08-25 11:26:23' , 반영된 포인트 (change_po..

연속 요청으로 인한 데드락 문제 해결하기
개발일지/문제 해결하기 ~2024. 7. 24. 02:04연속 요청으로 인한 데드락 문제 해결하기

문제 발견현재 ‘당장’ 서비스를 운영하고 있는 중인데, 가끔 point_history 테이블에 대해 데드락 문제나 중복키 문제가 발생했다. 데드락 발생 로그ERROR - Deadlock found when trying to get lock; try restarting transaction ... (생략) 중복키 발생 로그ERROR - Duplicate entry '더블PKID' for key 'point_history.PRIMARY' ... (생략)문제 원인로그를 통해 point_history 테이블에 insert할 때 위의 두 문제가 발생함을 확인할 수 있었다.  발생원인로그를 통해서 동시에 동일한 접속 요청이(같은 유저, 시간,분,초까지 동일한) 2번 있는 것을 확인했다. 말로만 듣던 따닥 (연속) ..

image