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
- 정정 이력
- 2026-07-29 이후 기록 없음
- 대상
- 사이트 운영자, 쇼핑몰 운영자, 웹 에이전시, 프리랜서
이 가이드가 맞는 경우
- 애플리케이션 오류 메시지
상황별 다음 단계
Lock wait timeout exceeded; try restarting transaction
오류 번호 1205, SQLSTATE HY000 또는 `Lock wait timeout exceeded; try restarting transaction`이 확인됩니다.
Deadlock found when trying to get lock; try restarting transaction
오류 번호 1213, SQLSTATE 40001 또는 `Deadlock found when trying to get lock; try restarting transaction`이 확인됩니다.
호스팅사·개발자에게 전달할 내용
변경 전 기록
- 문제가 발생한 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 문서에서 별도로 확인합니다.
먼저 기록할 것
- 오류가 발생한 시각과 요청 또는 배치 작업 식별자를 기록합니다.
- 오류 문구, 오류 번호, SQLSTATE를 원문 그대로 기록합니다.
- 실행한 SQL 문과 대상 테이블을 기록하되 값에 포함된 개인정보와 인증 정보는 제거합니다.
- 트랜잭션 시작·종료 위치와 최근 배포 또는 데이터 작업 변경 시각을 기록합니다.
확인 순서
- 애플리케이션이 오류 후 현재 트랜잭션을 명시적으로 롤백하는지 확인합니다.
- MySQL 8.0 이상이며 조회 권한이 있으면
performance_schema.data_lock_waits에서 대기·차단 트랜잭션 관계를 확인합니다. - 같은 차단 트랜잭션이 반복해서 나타나면 트랜잭션 시작 시각과 커밋·롤백 누락 여부를 확인합니다.
- 트랜잭션 안에서 외부 API 호출, 파일 처리, 대량 연산처럼 잠금 보유 시간을 늘리는 작업이 있는지 확인합니다.
- 여러 코드 경로가 같은 행을 서로 다른 순서로 갱신하는지 비교합니다.
조치 전 확인
innodb_lock_wait_timeout을 늘리는 것은 잠금을 오래 보유하는 원인을 제거하지 않습니다.- 세션 종료와 강제 롤백은 진행 중인 데이터 변경을 중단할 수 있습니다.
- 재시도는 해당 작업이 중복 실행돼도 안전한지 확인한 뒤 횟수와 간격을 제한합니다.
수정 후 동일한 입력에서 오류 재발 여부, 처리 시간, 잠금 대기 관계를 다시 확인합니다. 원인을 확인하지 못하면 기록한 오류 시각·SQL 문·트랜잭션 식별자를 데이터베이스 담당자에게 전달합니다.
참고 자료
MySQL · 공식 자료 · 확인 범위: 오류 번호 1205의 Symbol은 ER_LOCK_WAIT_TIMEOUT이고 SQLSTATE는 HY000입니다., 시간 초과가 발생한 SQL 문은 롤백되지만 기본 설정에서 전체 트랜잭션은 롤백되지 않습니다. · 확인일: 2026-08-29
MySQL · 공식 자료 · 확인 범위: innodb_lock_wait_timeout은 InnoDB 행 잠금의 대기 시간을 정합니다., 기본값을 바꾸기 전에 애플리케이션의 작업 특성과 동시성을 고려해야 합니다. · 확인일: 2026-08-29
MySQL · 공식 자료 · 확인 범위: data_lock_waits에서 요청한 잠금과 이를 차단한 잠금의 관계를 확인할 수 있습니다. · 확인일: 2026-08-29