Hacer debug a Locks en base de datos MySQL

Author
By Darío Rivera
Posted on 2019-12-30 in MySQL
Tags   MySQL 8

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.


Si te ha gustado este artículo puedes invitarme a tomar una taza de café

Acerca de Darío Rivera

Author

Ingeniero de desarrollo en PlacetoPay , Medellín. Darío ha trabajado por más de 6 años en lenguajes de programación web especialmente en PHP. Creador del microframework DronePHP basado en Zend y Laravel.

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