Bonjour,
J'ai lu attentivement l'article d'SQLpro sur la représentation intervallaire que je trouve très intéressant.
Cependant, j'ai le sentiment que les procédures d'insertions et de suppressions par exemple peuvent produire des deadlocks. En effet, dans les procédures on ne verrouille pas la table entière, ou on ne fait pas un SELECT FOR UPDATE sur toutes nos lignes de l'arborescence par précaution... alors que justement en cas d'insertions ou de suppressions c'est bien toutes les lignes de la table qui sont affectées avec la mise à jour des bornes. Cela me pose donc un problème car dans ce cas, si on fait une pause de 5 secondes après:
Rien empêche une autre transaction de lire entre temps un résultat différent pour les bornes d'un parent donné, puisque l'isolation SERIALIZABLE n'empêche pas deux SELECTs concurrents, ce qui provoque ensuite des anomalies en REPEATABLE READ et des deadlocks en SERIALIZABLE puisque les valeurs dans la procédure sont alors faussées.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT @bgp = NMC_BG, @bdp = NMC_BD, @nivp = NMC_NIVEAU FROM T_NOMENCLATURE_NMC WHERE NMC_ID = @id_parent
Bien évidemment, comme les requêtes s’exécutent très rapidement il n'y a pratiquement jamais de deadlock.
Ma question est donc, est-ce que ces procédures peuvent effectivement faire l'objet de deadlocks ?
Merci d'avance pour vos réponses.
Bien cordialement,
Nicolas.
Partager