sql >> Base de Datos >  >> RDS >> Mysql

cómo evitar el punto muerto en mysql

Según tengo entendido, una selección no adquiere el bloqueo y no debería ser la causa del interbloqueo.

Cada vez que inserta/actualiza/o elimina una fila, se adquiere un bloqueo. Para evitar un punto muerto, debe asegurarse de que las transacciones simultáneas no actualicen la fila en un orden que podría provocar un punto muerto. En términos generales, para evitar el interbloqueo debe adquirir el bloqueo siempre en el mismo orden incluso en transacciones diferentes (por ejemplo, siempre la tabla A primero, luego la tabla B).

Pero si dentro de una transacción inserta en una sola tabla, esta condición se cumple y, por lo general, esto no debería conducir a un punto muerto. ¿Estás haciendo algo más en la transacción?

Sin embargo, puede producirse un interbloqueo si hay índices faltantes . Cuando se inserta/actualiza/elimina una fila, la base de datos debe verificar las restricciones relacionales, es decir, asegurarse de que las relaciones sean consistentes. Para hacerlo, la base de datos necesita verificar las claves foráneas en las tablas relacionadas. podría dar como resultado que se adquiera otro bloqueo además de la fila que se modifica. Asegúrese de tener siempre un índice en las claves externas (y, por supuesto, en las claves principales), de lo contrario, podría resultar en un bloqueo de tabla en lugar de un bloqueo de fila . Si ocurre un bloqueo de tabla, la contención de bloqueo es mayor y aumenta la probabilidad de bloqueo mutuo.

No estoy seguro de qué sucede exactamente en tu caso, pero tal vez ayude.