Récemment, une de nos applications ASP.NET a affiché une erreur de blocage de la base de données et il m'a été demandé de vérifier et de corriger l'erreur. J'ai réussi à trouver la cause du blocage était une procédure stockée qui mettait à jour de manière rigoureuse une table dans un curseur.
C'est la première fois que je vois cette erreur et que je ne sais pas comment la détecter et la corriger efficacement. J'ai essayé tous les moyens possibles que je connais, et j'ai finalement trouvé que la table en cours de mise à jour n'avait pas de clé primaire! Heureusement, c'était une colonne d'identité.
J'ai par la suite trouvé le développeur qui a scripté la base de données pour le déploiement en désordre. J'ai ajouté une clé primaire et le problème a été résolu.
Je me suis senti heureux et je suis revenu à mon projet et j'ai fait quelques recherches pour découvrir la raison de cette impasse ...
Apparemment, c'était une condition d'attente circulaire qui a provoqué l'impasse. Les mises à jour prennent apparemment plus de temps sans clé primaire qu'avec une clé primaire.
Je sais que ce n'est pas une conclusion bien définie, c'est pourquoi je poste ici ...
- La clé primaire manquante est-elle le problème?
- Existe-t-il d'autres conditions qui entraînent une impasse autres que (exclusion mutuelle, attente et maintien, absence de préemption et attente circulaire)?
- Comment puis-je prévenir et suivre les blocages?