Red de conocimiento de abogados - Derecho de sociedades - ¿Qué son los puntos muertos?

¿Qué son los puntos muertos?

En dos o más tareas, si cada tarea bloquea un recurso que otras tareas están intentando bloquear, estas tareas se bloquearán permanentemente, lo que resultará en un punto muerto. Por ejemplo:

La transacción A adquirió el bloqueo exclusivo en la fila 1.

La transacción B adquirió el bloqueo exclusivo en la fila 2.

Ahora, la transacción A solicita un bloqueo exclusivo en la fila 2, pero se bloquea hasta que la transacción B se completa y libera el bloqueo exclusivo que mantiene en la fila 2.

Ahora, la transacción B solicita un bloqueo exclusivo en la fila 1, pero se bloquea hasta que la transacción A completa y libera el bloqueo exclusivo que mantiene en la fila 1.

La transacción A debe completarse después de que se complete la transacción B, pero la transacción A bloquea la transacción B. Esta situación también se denomina dependencia circular: la transacción A depende de la transacción B, que a su vez depende de la transacción A, creando un ciclo.

A menos que un proceso externo rompa el punto muerto, ambas transacciones en el punto muerto esperarán indefinidamente. El monitor de interbloqueos del motor de base de datos de Microsoft SQL Server comprueba periódicamente si hay tareas bloqueadas en interbloqueos. Si el monitor detecta una dependencia circular, una de las tareas será seleccionada como víctima y su transacción finalizará con un error. De esta manera, otras tareas pueden completar su negocio. Para aplicaciones donde una transacción termina con un error, también puede reintentar la transacción, pero generalmente no hasta que se hayan completado las otras transacciones con las que estaba bloqueada.

El uso de convenciones de codificación específicas en su aplicación puede reducir la posibilidad de que su aplicación cause interbloqueos. Para obtener más información, consulte Minimizar los interbloqueos.

El interbloqueo a menudo se confunde con el bloqueo normal. Cuando una transacción solicita un bloqueo en un recurso que está bloqueado por otra transacción, la transacción solicitante espera hasta que se libere el bloqueo. De forma predeterminada, las transacciones de SQL Server no vencen (a menos que esté configurado LOCK_TIMEOUT). Debido a que la transacción solicitante no hace nada para bloquear la transacción propietaria del bloqueo, la transacción se bloquea en lugar de quedar atrapada en un punto muerto. Finalmente, la transacción propietaria del bloqueo se completará y liberará el bloqueo, y luego la transacción solicitante adquirirá el bloqueo y continuará la ejecución.

El punto muerto a veces se denomina punto muerto.

Los interbloqueos pueden ocurrir en cualquier sistema multiproceso, no solo en los sistemas de administración de bases de datos relacionales, y también pueden ocurrir en recursos distintos de los bloqueos de objetos de bases de datos. Por ejemplo, un subproceso en un sistema operativo multiproceso adquiere uno o más recursos (por ejemplo, un bloque de memoria). Si el recurso que se está adquiriendo es actualmente propiedad de otro subproceso, es posible que el primer subproceso tenga que esperar a que el subproceso propietario libere el recurso de destino. Es decir, para ese recurso en particular, el hilo en espera depende del hilo propietario. En una instancia de Motor de base de datos, una sesión puede bloquearse al adquirir recursos que no son de base de datos (por ejemplo, memoria o subprocesos).

En la figura anterior, para el recurso de bloqueo de la tabla de piezas, la transacción T1 depende de la transacción T2. Asimismo, para el recurso de bloqueo de la tabla de proveedores, la transacción T2 depende de la transacción T1. Debido a que estas dependencias forman un ciclo, existe un punto muerto entre la transacción T1 y la transacción T2.