Controlar interbloqueos

Cuando una instancia del SQL Server Database Engine (Motor de base de datos de SQL Server) de Microsoft elige una transacción como sujeto de un interbloqueo, finaliza el lote actual, revierte la transacción y devuelve el mensaje de error 1205 a la aplicación.

Your transaction (process ID #52) was deadlocked on {lock | communication buffer | thread} resources with another process and has been chosen as the deadlock victim. Rerun your transaction.

Debido a que se puede elegir cualquier aplicación que envíe consultas de Transact-SQL como sujeto del interbloqueo, las aplicaciones deben contener un controlador de errores que pueda interceptar el mensaje de error 1205. Si una aplicación no intercepta el error, ésta puede continuar sin ser consciente de que se ha revertido la transacción y de que se pueden producir errores.

La implementación de un controlador de errores que intercepte el mensaje 1205 permite a una aplicación controlar la situación de interbloqueo y realizar una acción apropiada para solucionarla, por ejemplo, volver a enviar automáticamente la consulta implicada en el interbloqueo. Si se vuelve a enviar la consulta de forma automática, no es necesario que el usuario sepa que se ha producido un interbloqueo.

La aplicación debería realizar una pausa breve antes de volver a enviar su consulta. Esto ofrece a la otra transacción implicada en el interbloqueo una oportunidad de completarse y liberar sus bloqueos que formaban parte del ciclo de interbloqueo. Así se minimiza la probabilidad de que el interbloqueo vuelva a ocurrir cuando la consulta que se ha vuelto a enviar solicite sus bloqueos.