jueves, octubre 07, 2010

MySQL: Lock wait timeout exceeded

Trabajando con MySql e iBatis me topé con un problema que, en principio no tenía muy claro de dónde podía venir.

El caso es que, aparentemente, de forma aleatoria cuando hacía un insert o un update, la aplicación dejaba de responder y acababa mostrando una traza como esta:

java.sql.SQLException: Lock wait timeout exceeded...

Después de mucho mirar y también mucho buscar en Google, caí en la cuenta que el problema lo daba una query que abría una transacción que no se cerraba antes de ser devuelta al pool.

En un método de la aplicación estaba abriendo una transacción y cerrandola en el catch en lugar de en el finally. Un finally y un endTransaction después, puedo respirar tranquilo... y por supuesto, mil gracias a este post sin el cual aún seguiría dando vueltas por los fuentes de la aplicación como alma en pena.