DEV WIKI
백엔드 · 문제 해결 가이드

MySQL Lock wait timeout exceeded 해결 방법

MySQL 오류 1205가 발생했을 때 대기한 SQL 문과 차단 트랜잭션을 확인하고 안전하게 재검사하는 순서를 설명합니다.

빠른 답변

`Lock wait timeout exceeded; try restarting transaction`은 InnoDB 트랜잭션이 행 잠금을 설정된 시간 안에 얻지 못했다는 뜻입니다. 오류 번호 1205와 SQLSTATE HY000을 확인한 뒤, 재시도나 시간 제한 변경보다 대기·차단 트랜잭션과 열린 트랜잭션 범위를 먼저 확인합니다.

적용 범위
이 가이드의 시작 증상과 각 분기 조건이 일치하는 경우
출처
MySQL
출처 확인일
2026-08-29
최종 검토
2026-08-29
수정일
2026-08-29
대상
사이트 운영자, 쇼핑몰 운영자, 웹 에이전시, 프리랜서
오류·수정 제보 (새 창에서 열림)

이 가이드가 맞는 경우

  • 애플리케이션 오류 메시지

상황별 다음 단계

호스팅사·개발자에게 전달할 내용

변경 전 기록

  • 문제가 발생한 URL, 화면 또는 로그의 원문, 최초 발생 시각을 전달합니다.
  • 비밀번호, 인증 토큰, 세션 쿠키, 결제 정보, 개인정보는 전달하지 않습니다.
  • 최근 배포, 설정, 도메인, 플러그인 또는 인프라 변경이 있었다면 시각과 변경 범위를 함께 전달합니다.

알아둘 점

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction이 발생하면 단순 재시도나 시간 제한 변경보다 현재 트랜잭션 상태를 먼저 확인합니다.

적용되는 시작 상황

다음 값 중 하나 이상이 확인되는 상황에 적용합니다.

  • 오류 번호 1205
  • SQLSTATE HY000
  • 오류 원문 Lock wait timeout exceeded; try restarting transaction

세 값이 일치하면 Lock wait timeout exceeded; try restarting transaction 문서의 진단 절차를 따릅니다.

오류 번호가 1213이거나 SQLSTATE가 40001이면 잠금 대기 시간 초과가 아니라 교착 상태입니다. Deadlock found when trying to get lock; try restarting transaction 문서에서 별도로 확인합니다.

먼저 기록할 것

  1. 오류가 발생한 시각과 요청 또는 배치 작업 식별자를 기록합니다.
  2. 오류 문구, 오류 번호, SQLSTATE를 원문 그대로 기록합니다.
  3. 실행한 SQL 문과 대상 테이블을 기록하되 값에 포함된 개인정보와 인증 정보는 제거합니다.
  4. 트랜잭션 시작·종료 위치와 최근 배포 또는 데이터 작업 변경 시각을 기록합니다.

확인 순서

  1. 애플리케이션이 오류 후 현재 트랜잭션을 명시적으로 롤백하는지 확인합니다.
  2. MySQL 8.0 이상이며 조회 권한이 있으면 performance_schema.data_lock_waits에서 대기·차단 트랜잭션 관계를 확인합니다.
  3. 같은 차단 트랜잭션이 반복해서 나타나면 트랜잭션 시작 시각과 커밋·롤백 누락 여부를 확인합니다.
  4. 트랜잭션 안에서 외부 API 호출, 파일 처리, 대량 연산처럼 잠금 보유 시간을 늘리는 작업이 있는지 확인합니다.
  5. 여러 코드 경로가 같은 행을 서로 다른 순서로 갱신하는지 비교합니다.

조치 전 확인

  • innodb_lock_wait_timeout을 늘리는 것은 잠금을 오래 보유하는 원인을 제거하지 않습니다.
  • 세션 종료와 강제 롤백은 진행 중인 데이터 변경을 중단할 수 있습니다.
  • 재시도는 해당 작업이 중복 실행돼도 안전한지 확인한 뒤 횟수와 간격을 제한합니다.

수정 후 동일한 입력에서 오류 재발 여부, 처리 시간, 잠금 대기 관계를 다시 확인합니다. 원인을 확인하지 못하면 기록한 오류 시각·SQL 문·트랜잭션 식별자를 데이터베이스 담당자에게 전달합니다.

같은 상황의 가이드

참고 자료

MySQL :: MySQL 8.4 Error Reference :: 2 Server Error Message Reference (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: 오류 번호 1205의 Symbol은 ER_LOCK_WAIT_TIMEOUT이고 SQLSTATE는 HY000입니다., 시간 초과가 발생한 SQL 문은 롤백되지만 기본 설정에서 전체 트랜잭션은 롤백되지 않습니다. · 확인일: 2026-08-29

MySQL :: MySQL 8.4 Reference Manual :: InnoDB Startup Options and System Variables (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: innodb_lock_wait_timeout은 InnoDB 행 잠금의 대기 시간을 정합니다., 기본값을 바꾸기 전에 애플리케이션의 작업 특성과 동시성을 고려해야 합니다. · 확인일: 2026-08-29

MySQL :: MySQL 8.4 Reference Manual :: The data_lock_waits Table (새 창에서 열림)

MySQL · 공식 자료 · 확인 범위: data_lock_waits에서 요청한 잠금과 이를 차단한 잠금의 관계를 확인할 수 있습니다. · 확인일: 2026-08-29