コンピューター科学において、ハロウィーン問題とは、データベースにおいて更新操作によって行の物理的な位置が変更され、同じ更新操作でその行が再び参照される可能性がある現象を指します。場合によっては、更新操作を実行するスキャンよりも更新されたレコードが常に先行するため、無限ループが発生することもあります
このデータベース エラーが発生する可能性は、1970 年代半ばのハロウィーンの日に、クエリの最適化に取り組んでいるDon Chamberlin、Pat Selinger 、および Morton Astrahan によって初めて発見されました。[1]彼らは、給与が 25,000 ドル未満の従業員全員に 10 パーセントの昇給を与えることになっているSQL クエリを作成しました。このクエリはエラーなく正常に実行されましたが、完了するとデータベース内のすべての従業員の給与が 25,000 ドル以上になりました。これは、従業員がそのレベルに達するまで昇給を繰り返したためです。クエリでは、給与が 25,000 ドル未満の従業員レコードをそれぞれ 1 回ずつ繰り返し処理することが期待されていました。実際には、更新されたレコードもクエリ実行エンジンに表示され、クエリの条件に一致し続けたため、給与レコードは複数回一致し、そのたびに 10 パーセントの昇給が与えられ、最終的にはすべてが 25,000 ドルを超えました。
一部の人が信じていることとは反対に、この名前は問題の本質を表すものではなく、むしろ発見された日にちに付けられたものである。[1]ドン・チェンバリン氏は次のように述べている。 [2]
パットとモートンがこの問題を発見したのはハロウィンのことでした… 彼らが私のオフィスに来て、「チェンバリン、これを見てください。オプティマイザが更新処理の計画を立てる際に、更新対象のフィールドに基づくインデックスを使わないようにしなければなりません。どうすればいいですか?」と言ったのを覚えています。たまたま金曜日だったので、私たちは「いいですか、今日の午後にはこの問題は解決できないでしょう。とりあえず名前を付けましょう。ハロウィン問題と呼んで、来週取り組みましょう」と言いました。そして、それ以来ずっとその名前で呼ばれるようになりました。
参考文献
- 1995 年の SQL 再会 (プロトコル)
- XML API の「ハロウィーン問題」、Mike Champion のブログ。