A propos de la représentation intervallaire (article SQLpro)
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:
Code:
1 2 3
| SELECT @bgp = NMC_BG, @bdp = NMC_BD, @nivp = NMC_NIVEAU
FROM T_NOMENCLATURE_NMC
WHERE NMC_ID = @id_parent |
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.
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.