본문 바로가기

GORM2

Error 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 해결 과정 개선이 필요했던 이유필터 처리된 지 3개월이 지난 경고 알림을 삭제하는 배치 작업을 수행할 때, 아래와 같은 오류가 발생했다.Error 1205 (HY000): Lock wait timeout exceeded; try restarting transaction 약 15,000개의 데이터를 한 번에 삭제하는 로직이었고, MariaDB 파라미터인 innodb_lock_wait_timeout 값은 기본값(50초)을 사용하고 있었다.  위와 같은 오류가 발생한 원인을 분석하기 위해 아래의 쿼리를 사용하여 현재 Lock 정보, Lock 대기 정보, 트랜잭션 상태를 조회했다.# 현재 Lock 정보 조회select * from information_schema.INNODB_LOCKS;# Lock 대기 정보 조회sele.. 2024. 7. 31.
Legacy Query 성능 개선 과정 Query 성능 개선이 필요했던 이유약 28,000개의 데이터 행을 처리하는 조회 기능에서 성능 저하 현상이 발생했다. 데이터가 많지 않았기 때문에 성능 저하를 예상하지 못했다. 조회 응답 시간이 5,500ms ~ 6,000ms 정도 소요되었고, 유저 입장에서는 해당 기능이 중지된다고 느껴질 정도였다. 해당 기능은 장애 발생 시 모니터링 인원의 편의성을 위해 만들어진 것으로, 평상시 자주 사용하지는 않지만, 소 잃기 전에 외양간을 고친다는 마음으로 성능 개선을 시도했다. 총 2번의 개선 시도가 있었으며, 그 내용은 다음과 같다. 1차 개선1. 서브 쿼리를 사용하던 기존 구조를 조인 구조로 리팩토링2. 총행수를 계산하기 위해 전체 쿼리를 서브 쿼리로 감싸던 방식을 명시적으로 조인된 테이블에서 직접 계산하도.. 2024. 7. 25.