Hacer debug a Locks en base de datos MySQL

2019-12-30 MySQL
Tags   MySQL 8

Seguramente alguna vez habrás visto un error 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 el que te muevas, lo más sensato es buscar la lista de procesamiento de MySQL para tratar de observar que 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, pueden existir conexiones en espera, iniciadas o 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

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.