Saltar al contenido

Deadlock en MySQL cuando dos procesos actualizan stock y pedidos

ANTONELLA R.

Nivel 3 ·

Tengo dos procesos: uno actualiza stock y después pedidos, el otro actualiza pedidos y después stock. Cada tanto uno muere con 'Deadlock found when trying to get lock'. ¿Cómo lo evito?
233 vistas 4 respuestas 0 0

Respuestas 4

  1. yorman R.

    Nivel 3 ·

    0 0

    El problema es justamente el orden inverso. A bloquea stock y espera pedidos; B bloquea pedidos y espera stock. Nadie avanza y el motor mata a uno.

  2. Rafael R.

    Nivel 3 ·

    0 0

    Solución principal: que todos los procesos tomen los recursos en el mismo orden. Por ejemplo, siempre stock primero y pedidos después.

  3. Yuleidy M.

    Nivel 2 ·

    0 0

    Además: transacciones cortas, índices en las columnas del WHERE (si no, se bloquean más filas de las necesarias) y reintento automático, porque en sistemas concurrentes algún deadlock puede aparecer igual.

  4. ANTONELLA R.

    Nivel 3 ·

    0 0

    Unifiqué el orden y agregué reintento. Desde ayer no apareció más. Gracias.