sqlschool.gr logo

articles

Articles of SQLschool.gr Team

The Halloween Problem

Fivi Panopoulou
Tuesday 31 October 2017

Σήμερα 31 Οκτώβρη σε πολλά μέρη γιορτάζεται το Halloween και έτσι είναι μια καλή ευκαιρία να αναφερθεί το ομώνυμο πρόβλημα. Το Halloween problem στον κόσμο των δεδομένων είναι ένα πρόβλημα που εντοπίστηκε περίπου 30 χρόνια πριν και αφορά μια ανεπιθύμητη συμπεριφορά στα data modification operations.

Το query το οποίο αποτέλεσε την αφορμή να εξετασθεί το εν λόγω πρόβλημα ήταν κάτι αντίστοιχο του παρακάτω, με σκοπό την αύξηση του μισθού όλων των υπαλλήλων που έπαιρναν λιγότερο από $25.000 κατά 10%.

UPDATE Employees
SET Salary = Salary * 1.1
WHERE Salary < 25000;

Ας υποθέσουμε ότι έχουμε έναν nonclustered index πάνω στην στήλη Salary και μπορεί να χρησιμοποιηθεί για να φέρνει τα rows που θα πρέπει να γίνουν update και ας πάρουμε για παράδειγμα τους παρακάτω υπαλλήλους στους οποίους θέλουμε να γίνει η αύξηση:

Η αρχική ιδέα είναι ότι αν διαβάζονται από τον index ένα ένα τα rows και εφόσον ικανοποιούν την συνθήκη γίνονται update θα έχουμε καλό performance. Όταν όμως αλλάξει το πρώτο row από 21.000 σε 23.100, θα ενημερωθεί για την αλλαγή και ο index που μας δίνει τα rows βάζοντας την εγγραφή μετά τον Scott. Οπότε τώρα το πινακάκι με τις επόμενες αλλαγές που θα γίνουν διαμορφώνεται ως εξής:

Το πρόβλημα λοιπόν εδώ είναι ότι κάποιες εγγραφές θα γίνουν πολλαπλές φορές update, αυξάνοντας το μισθό πολλαπλές φορές αντί για μια. Αν και για τους εν λόγω υπαλλήλους αυτό θα ήταν ευχάριστο, δεν ήταν και η επιθυμητή συμπεριφορά ενός DBMS. Είχε λοιπόν εντοπισθεί μια περίπτωση ένα update να επηρεάσει με λάθος τρόπο τα δεδομένα ή ακόμη και να μην τερματίσει ποτέ.

Τα σημερινά DBMS έχουν αναλάβει την προστασία μας από αυτό το πρόβλημα. Ο SQL Server εντοπίζει σε ποιες περιπτώσεις υπάρχει κίνδυνος για Halloween Problem και φροντίζει να διαχωρίσει την φάση εντοπισμού των εγγραφών από την φάση του modification, όπως με το Table Spool παρακάτω:

Όπως είναι εμφανές αυτό δεν αποτελεί «έγνοια» για τους developers και τους χρήστες ενός DBMS αλλά για τους σχεδιαστές των συστημάτων που αποθηκεύουν και διαχειρίζονται δεδομένα. Μπορεί όμως να εξηγήσει γιατί έχει επιλεχθεί ένας πιο αργός τρόπος από τα συστήματα αυτά σε ορισμένα data modifications, που δεν είναι άλλος από το να διασφαλίσουν το σωστό αποτέλεσμα.

Αν και το πρόβλημα αυτό θα μπορούσε να έχει ονομαστεί Halloween Problem λόγω του ότι είναι κατά κάποιο τρόπο τρομακτικό να μπορεί να συμβεί αυτό στα data κάποιου, το όνομά του το πήρε λόγω του ότι εντοπίστηκε τέτοια μέρα. Του δόθηκε προσωρινά το όνομα αυτό από τους ανθρώπους που το εντόπισαν και έμεινε μέχρι και σήμερα έτσι.

Περισσότερα για την ιστορία εντοπισμού του εδώ και για λεπτομερή ανάλυση του προβλήματος με διαφορετικά σενάρια μια πολύ καλή σειρά άρθρων από τον Paul White ξεκινώντας από εδώ.

Trick or treat!

Fivi Panopoulou

Fivi Panopoulou

Fivi is a Software Engineer specializing in SQL Development. Building data flows and transforming data to enable their meaningful business interpretation is her pursuit. She works with software and reporting systems, from analysis and design to implementation and maintenance.
She has been part of Microsoft technology oriented communities since an undergraduate student. SQL School has inspired her to work with data and become a SQL Server enthusiast from her early steps.

Tip

What's New in SQL Server 2022 - Episodes

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn


sqlschool.gr © 2010-2024 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.