mysql 잠금 대기 시간 초과가 초과되었습니다. 거래를 다시 시작하십시오


26

우리는 자바 애플리케이션을 실행하고 있으며, 오랜 기간 동안 실행 중이며 백엔드는 db는 MySQL이며 최근에는 mysql 5.6으로 업데이트되었습니다. 지난 주에이 오류가 발생하기 시작했습니다. 잠금 대기 시간 초과를 초과했습니다. 절대 멈추지 않는 것처럼 보이는 트랜잭션을 다시 시작해보십시오.이 오류로 무엇을 끝내야할지 모르겠습니다. 왜 갑자기 발생 하는가

답변:


29

잠금 시간에 대해 변수 innodb_lock_wait_timeout = 100을 100 초로 설정할 수 있습니다.

mysql> set innodb_lock_wait_timeout=100;

Query OK, 0 rows affected (0.02 sec)

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 100   |
+--------------------------+-------+

시간 종료 된 트랜잭션이 다른 프로세스가 보유한 테이블을 잠그려고 시도하십시오. 타임 아웃 변수는 초 단위로 설정됩니다. 오류가 표시됩니다. 명령으로 더 많은 상태를 볼 수 있습니다.

SHOW ENGINE INNODB STATUS\G 

잠긴 테이블 목록을 볼 수 있습니다.

 show open tables where in_use>0;

이제이 테이블을 사용하는 스레드를 참조하십시오

  show full processlist;

이제 해당 스레드를 종료하거나 완료하기를 기다릴 수 있습니다.



이 정보에 감사하지만 잠금이 계속 발생할 때 (단일 필드 증가 또는 업데이트와 같이) 작은 업데이트가있는 매우 간단한 테이블에서도 어떻게 문제의 근원에 도달 할 수 있습니까?
Wouter

-1

MySQL 버전 5.0 미만을 사용하는 경우 세션 또는 전역 범위에 대해서도 변수를 변경할 수 없습니다. 가장 좋은 솔루션은 쿼리를 캡처하고 트래픽이 느린 후에 실행하는 것입니다.


2
OP는 5.6을 사용하고 있으며 5.0 이상이라고 가정합니다.
RDFozz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.