잠금 대기 시간 초과를 초과했습니다. 거래를 다시 시작하십시오


12

이 오류는 매일 4-5 회 반복해서 나타납니다.

SQLSTATE [HY000] : 일반 오류 : 1205 잠금 대기 시간 초과가 초과되었습니다. 거래를 다시 시작하십시오

이번에는 phpmyadmin을 다시 시작하지만 반복해서 발생합니다. 이 문제를 지적 할 수 없습니다.

내가 사용하고 젠토의 버전을. 웹 사이트의 1.9.0.1 7000 개 이상의 제품이 있습니다. 서버에는 16GB RAM이 있습니다.

이 문제를 해결하는 방법?

답변:


8

innodb_lock_wait_timeout 을 설정하여 InnoDB의 잠금 대기 제한 시간 값을 늘리는 것을 고려해야합니다 . 기본값은 50 초입니다.

mysql> show variables like 'innodb_lock_wait_timeout';
+--------------------------+-------+
| Variable_name            | Value |
+--------------------------+-------+
| innodb_lock_wait_timeout | 50    |
+--------------------------+-------+
1 row in set (0.01 sec)

/etc/my.cnf이 줄을 사용 하여 영구적으로 더 높은 값으로 설정할 수 있습니다

[mysqld]
innodb_lock_wait_timeout=120

mysql을 다시 시작하십시오. 지금 mysql을 다시 시작할 수 없으면 다음을 실행하십시오.

SET GLOBAL innodb_lock_wait_timeout = 120; 

세션 기간 동안 설정할 수도 있습니다.

SET innodb_lock_wait_timeout = 120; 

그 뒤에 쿼리


3
왜 140 '또는 2000'? 이것이 실제로 문제를 어떻게 해결할 수 있습니까? 숨겨서?
Elzo Valugi

테이블이 합리적으로 예상보다 많이 잠기는 문제가 있습니다. 이 작업을 수행하면 문제를 한 번 해결하는 대신 매 2 분마다 기다려야합니다. Elzo가 말했듯이 ... 120이 충분하지 않으면 어떻게됩니까?
Carlos Robles

7

액세스하려는 데이터베이스 내용이 (일반적으로 오래 실행되는) 이전 프로세스에 의해 잠겨 있으면이 메시지가 표시됩니다. MySQL은 잠금이 해제되고 해당 오류가 발생하기 전에 잠금이 제거 될 때까지 일정 시간 동안 대기합니다. 일관된 시간으로 이러한 오류 메시지가 표시 될 때 추적 할 수있는 경우 서버가 그 시점에 수행중인 다른 작업을 확인해야합니다 (예 : 데이터베이스 백업 실행). 이렇게함으로써 잠금을 생성 할 수있는 프로세스가 무엇인지에 대한 가능성을 좁힐 수 있어야합니다 (항상 그렇게하는 것은 아니지만 약간의 시행 착오가있을 수 있습니다).


5

이 문제의 원인은 데이터베이스 연결이 종료되기 전에 많은 사용자 정의 스크립트를 실행하고 스크립트를 종료하는 것입니다.

무언가 쿼리 실행을 차단하고 있습니다. 쿼리의 테이블 중 하나에서 다른 쿼리를 업데이트, 삽입 또는 삭제하는 경우가 많습니다. 그게 무엇인지 찾아야합니다.

CLI에서 MySQL에 로그인하여 다음 명령을 실행할 수있는 경우

SHOW PROCESSLIST;

블로킹 / 슬립 프로세스를 찾으면 프로세스를 찾아 id실행하십시오.

KILL {id};

초기 쿼리를 다시 실행하십시오.

이 링크가 도움이 될 수 있습니다. SQLSTATE [HY000] : 일반 오류 : 1205 잠금 대기 시간 초과가 초과되었습니다. 트랜잭션 Magento를 다시 시작하십시오 .


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