De repente (sin cambios en el código relacionado) que se producen errores de bloqueo a través de registro activo, tales como:¿Cómo puedo solucionar los errores de tiempo de espera de bloqueo de MySQL con Rails?
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
y
ActiveRecord::StatementInvalid: Mysql2::Error: Lock wait timeout exceeded;
try restarting transaction: DELETE FROM `sessions` WHERE `sessions`.`id` = 41997883
No estamos haciendo nuestras propias transacciones en cualquiera de estos modelos, por lo que las únicas transacciones son las integradas en rieles. No ha habido un aumento en el tráfico o volumen de solicitudes.
Estos errores parecen ser cuando una "nueva" consulta intenta ejecutarse en una tabla bloqueada y tiene que esperar, ¿cómo vemos lo que está esperando? ¿Cómo averiguamos qué parte de nuestro código está emitiendo consultas que bloquean las tablas durante períodos de tiempo prolongados?
¿Alguna idea sobre dónde podemos mirar o cómo investigar la causa de esto?
Puede intentar ir por el enfoque de desactivar el bloqueo de hueco de la siguiente manera: innodb_locks_unsafe_for_binlog = 1, aunque podría causar algunos registros fantasma. leer más sobre esto [aquí] (http://dev.mysql.com/doc/refman/5.0/en/innodb-parameters.html#sysvar_innodb_locks_unsafe_for_binlog) – Yarneo
¿Cuál es el motor de base de datos subyacente? Si su INNODB puede publicar 'show innodb status'? – ethrbunny
SHOW ENGINE INNODB STATUS https://gist.github.com/3758910 – chrishomer