Hacer debug a Locks en base de datos MySQL

Author
Por Darío Rivera
Publicado el en MySQL

Cuando trabajas con bases de datos relacionales una que otra vez te habrá tocado realizar una transacción para asegurar la integridad de los datos. Cuando tu aplicación tiene un número considerable de transacciones o has realizado alguna de manera incorrecta seguramente habrás visto un error del motor similar al siguiente:

SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded

Este error indica que hay un bloqueo el cual puede darse por varias razones. Una de ellas, podría ser la no confirmación de una transacción, es decir, no se ha ejecutado commit() o rollback(). Para tratar de determinar las sentencias SQL en el entorno en el que te mueves, lo más sensato es buscar la lista de procesamiento de MySQL para tratar de observar qué sentencias están bloqueando a otras. Para esto basta utilizar el siguiente comando.

show full processlist\G
*************************** 1. row ***************************
     Id: 4
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 260933
  State: Waiting on empty queue
   Info: NULL
*************************** 2. row ***************************
     Id: 1116
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: starting
   Info: show full processlist
*************************** 3. row ***************************
     Id: 1125
   User: erp_user
   Host: localhost:55498
     db: erp
Command: Execute
   Time: 0
  State: update
   Info: insert into users values `users` values (1, `steave`, 1, now())
5 rows in set (0.00 sec)

Como puedes ver en el resultado anterior, puede existir conexiones en espera, conexiones iniciadas o conexiones ejecutando actualmente un proceso como es el caso de la número 3. Cuando se presenta un bloqueo en la base de datos generalmente te aparecerán dos o tres sentencias de las cuáles tu mismo puedes sacar las conclusiones acerca de cuál de ellas está realizando un bloqueo. Hasta la próxima.


Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.