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

Por qué commit no causa interbloqueo

Sospecho que este es un caso extremo que no vale la pena hacerlo más eficiente. Tenga en cuenta que tuvo que obtener 3 sesiones tratando de tomar la misma fila, algo que sucede raramente. E hiciste un ROLLBACK, también raro. Entonces, el punto muerto que ocurrió es excesivo, pero no vale la pena arreglarlo. Por esta razón, uno debe estar preparado para manejar interbloqueos en todas partes.

FYI, si se tratara de 3 nodos de un clúster de Galera, habría errores en COMMIT que el código tendría que manejar. Sospecho que suceden aún más combinaciones de cosas extrañas si aplica esta transacción (con reversión o confirmación) varias veces a varios nodos.

Ahora a su pregunta... Presumiblemente, el punto muerto no ocurrió porque uno de los subprocesos obtuvo el bloqueo exclusivo y el otro recibió un "esperar" en lugar de un "punto muerto".