1205: Lock wait timeout exceeded; try restarting transaction
MySQL의미
트랜잭션이 필요한 행 락을 innodb_lock_wait_timeout초 동안 기다렸지만 획득하지 못하고 타임아웃되었다.
원인
다른 트랜잭션이 commit이나 rollback 없이 락을 오래 보유함. idle 상태의 열린 트랜잭션, 장시간 실행되는 대량 갱신, 또는 경합이 심한 hot row.
해결 방법
블로킹 트랜잭션을 찾는다: performance_schema.data_lock_waits와 data_locks를 조인한다(이전 버전에서는 information_schema.innodb_lock_waits/innodb_trx). 블로킹 트랜잭션을 커밋/롤백하거나 필요하면 KILL <trx_mysql_thread_id>로 종료한다. 트랜잭션을 짧게 유지하고 idle 상태로 두지 않는다(autocommit/애플리케이션 로직). 필요하면 innodb_lock_wait_timeout을 워크로드에 맞게 조정한다.