Article de reference

Problème d'Halloween

En informatique, le problème d'Halloween désigne un phénomène survenant dans les bases de données lorsqu'une mise à jour modifie l'emplacement physique d'une ligne, permettant a...

En informatique, le problème d'Halloween désigne un phénomène survenant dans les bases de données lorsqu'une mise à jour modifie l'emplacement physique d'une ligne, permettant ainsi potentiellement de réaccéder à cette ligne ultérieurement au cours de la même opération. Dans certains cas, cela peut même engendrer une boucle infinie, les mises à jour plaçant continuellement l'enregistrement modifié avant l'analyse qui effectue la mise à jour.

Le risque d'erreur dans cette base de données a été découvert pour la première fois par Don Chamberlin , Pat Selinger et d'Halloween , alors qu'ils travaillaient sur l'optimisation de requêtes . Ils ont écrit une requête SQL censée accorder une augmentation de 10 % à chaque employé gagnant moins de 25 000 $. Cette requête s'exécutait sans erreur, mais à la fin, tous les employés de la base de données gagnaient au moins 25 000 $, car elle continuait de leur accorder une augmentation jusqu'à ce qu'ils atteignent ce niveau. On s'attendait à ce que la requête parcoure chaque enregistrement d'employé dont le salaire était inférieur à 25 000 $ une seule fois. En réalité, comme même les enregistrements mis à jour étaient visibles par le moteur d'exécution des requêtes et continuaient donc de correspondre aux critères de la requête, les enregistrements de salaire correspondaient plusieurs fois et recevaient à chaque fois une augmentation de 10 % jusqu'à ce que tous les salaires soient supérieurs à 25 000 $.

Contrairement à ce que certains pensent, le nom ne décrit pas la nature du problème, mais a plutôt été donné en raison du jour où il a été découvert. Comme le raconte Don Chamberlin :

Pat et Morton ont découvert ce problème le soir d'Halloween… Je me souviens qu'ils sont venus me voir et m'ont dit : « Chamberlin, regarde ça. Il faut absolument que l'optimiseur, lorsqu'il planifie le traitement d'une mise à jour, n'utilise pas un index basé sur le champ mis à jour. Comment on fait ? » C'était un vendredi, et on s'est dit : « Écoutez, on ne va pas pouvoir résoudre ce problème cet après-midi. Donnons-lui un nom. On va l'appeler le problème d'Halloween et on s'en occupera la semaine prochaine. » Et depuis, il porte ce nom.