Recientemente, una de nuestras aplicaciones ASP.NET mostró un error de bloqueo de la base de datos y se me solicitó que verificara y corrigiera el error. Logré encontrar que la causa del punto muerto era un procedimiento almacenado que actualizaba rigurosamente una tabla dentro de un cursor.
Esta es la primera vez que veo este error y no sabía cómo rastrearlo y solucionarlo de manera efectiva. ¡Intenté todas las formas posibles que conozco y finalmente descubrí que la tabla que se está actualizando no tiene una clave principal! Afortunadamente era una columna de identidad.
Más tarde encontré al desarrollador que creó una base de datos con script para la implementación en mal estado. Agregué una clave principal y el problema se resolvió.
Me sentí feliz y volví a mi proyecto, e investigué un poco para descubrir la razón de ese punto muerto ...
Aparentemente, fue una condición de espera circular que causó el punto muerto. Las actualizaciones aparentemente tardan más sin una clave primaria que con la clave primaria.
Sé que no es una conclusión bien definida, es por eso que estoy publicando aquí ...
- ¿La clave primaria que falta es el problema?
- ¿Existen otras condiciones que causen un punto muerto que no sea (exclusión mutua, retención y espera, sin preferencia y espera circular)?
- ¿Cómo puedo prevenir y rastrear puntos muertos?