갑자기 우리가 같은 활동 기록을 통해 잠금 오류를 얻고있다 (관련 코드를 변경하지 않고) : 우리는 우리 자신의 트랜잭션을 수행하지 않는레일즈에서 MySQL 잠금 타임 아웃 오류를 어떻게 해결할 수 있습니까?
ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded;
try restarting transaction: UPDATE `items` SET `state` = 'reserved', `updated_at` = '2012-09-15 17:58:21' WHERE `items`.`id` = 248220
및
ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded;
try restarting transaction: DELETE FROM `sessions` WHERE `sessions`.`id` = 41997883
중 이 모델들 중에서 유일한 트랜잭션은 레일스에 내장되어 있습니다. 트래픽이나 요청량이 급증하지 않았습니다.
이러한 오류는 "새"쿼리가 잠긴 테이블에서 실행하려고 시도하고 기다려야 할 때 나타나는 것처럼 보입니다. 대기중인 것을 어떻게 확인할 수 있습니까? 코드의 어느 부분이 오랫동안 테이블을 잠그는 쿼리를 실행하는지 파악하려면 어떻게해야합니까?
어디서 볼 수 있는지 또는 그 원인을 조사하는 방법에 대한 아이디어가 있으십니까?
다음과 같이 갭 잠금을 해제하는 방법을 시도해 볼 수 있습니다 : innodb_locks_unsafe_for_binlog = 1, 어떤 팬텀 레코드가 발생할 수 있습니다. 그것에 대해 더 읽으십시오 [here] (http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog) – Yarneo
기본 DB 엔진이란 무엇입니까? INNODB에 'show innodb status'를 게시 할 수 있습니까? – ethrbunny
SHOW ENGINE INNODB STATUS https://gist.github.com/3758910 – chrishomer