sql >> Base de Datos >  >> RDS >> Sqlserver

¿Qué es un interbloqueo en una base de datos?

En general, interbloqueo significa que dos o más entidades están bloqueando algunas fuentes, y ninguna de ellas puede terminar, porque están bloqueando fuentes de forma cíclica.

Un ejemplo:digamos que tengo la tabla A y la tabla B, necesito hacer una actualización en A y luego en B y decido bloquearlas a ambas en el momento del uso (este es un comportamiento realmente estúpido, pero ahora cumple su propósito) ). En el mismo momento, otra persona hace lo mismo en el orden opuesto:bloquea B primero, luego bloquea A.

Cronológicamente, esto sucede:

proc1:Bloquear A

proc2:Bloqueo B

proc1:Bloqueo B:comienza a esperar hasta que proc2 libera B

proc2:Bloqueo A:comienza a esperar hasta que proc1 libera A

Ninguno de los dos terminará nunca. Eso es un punto muerto. En la práctica, esto suele generar errores de tiempo de espera, ya que no se desea que ninguna consulta se cuelgue para siempre, y el sistema subyacente (por ejemplo, la base de datos) eliminará las consultas que no finalicen a tiempo.

Un ejemplo del mundo real de un interbloqueo es cuando guardas las llaves de tu casa en tu auto y las llaves de tu auto en tu casa.