Digamos que abro una transacción y ejecuto consultas de actualización.¿Puedo ser una víctima de interbloqueo si no estoy ejecutando una consulta dentro de una transacción?
BEGIN TRANSACTION
UPDATE x SET y = z WHERE w = v
La consulta devuelve con éxito y la operación se mantiene abierta deliberadamente por un período de tiempo antes de que decida comprometerse.
Mientras estoy sentado en la transacción es posible que la máquina MSSQL interbloquee mi transacción abierta que en realidad no está ejecutando nada para eliminar un interbloqueo o liberar recursos a medida que se alcanzan los límites de memoria/recursos del sistema ?
Conozco SET DEADLOCK_PRIORITY y he leído los artículos de MSDN sobre el tema de interbloqueos. Lógicamente, dado que no estoy buscando activamente reclamar recursos adicionales, no puedo imaginar un escenario que pueda desencadenar un sano algoritmo para evitar interbloqueos.
¿Alguien sabe a ciencia cierta si es posible que el simple hecho de tener cerraduras pueda convertirme en un objetivo válido? Del mismo modo, ¿podría una condición de bajo recurso desencadenar la muerte de mi SPID?
No sé a ciencia cierta (por eso esto es un comentario), pero yo creo que si está simplemente dando vueltas con las cerraduras se abren que sería más probable que se seleccione como sujeto del interbloqueo (no menos probable) Los bloqueos ocurren cuando dos procesos necesitan el mismo recurso y ninguno se va a rendir. Si está sosteniendo bloqueos, entonces está haciendo un punto muerto con su proceso más probable, no menos. En cuanto a qué spid es la víctima, nunca escuché que el proceso de selección es determinista en el nivel de usuario. De cualquier manera, tus probabilidades empeoran cuanto más tiempo tienes las cerraduras. – Vaccano