Συμπτώματα
Εξετάστε το ακόλουθο σενάριο:
-
Έχετε μια βάση δεδομένων του Microsoft SQL Server 2012 που έχει ενεργοποιημένες τις επιλογές ALLOW_SNAPSHOT_ISOLATION και READ_COMMITTED_SNAPSHOT .
-
Έχετε τουλάχιστον τρία ταυτόχρονα ερωτήματα που εκτελούνται στον ίδιο πίνακα.
-
Τα ερωτήματα χρησιμοποιούν την υπόδειξη ερωτήματος (TABLOCK, UPDLOCK) .
-
Κάθε ερώτημα αναδιπλώνεται σε μια ρητή πρόταση BEGIN TRAN , αλλά η πρόταση ολοκλήρωσης του TRAN δεν εκτελείται.
Όταν το πρώτο ερώτημα έχει δεσμευτεί σε αυτό το σενάριο, ένα από τα άλλα ερωτήματα θα βρίσκεται σε αδιέξοδο. Όταν είναι ενεργοποιημένη η READ_COMMITTED_SNAPSHOT μαζί με τις υποδείξεις ερωτήματος TABLOCK και UPDLOCK , οι περίοδοι λειτουργίας λαμβάνουν ΙΧ κλειδώματα στον πίνακα. Το αδιέξοδο παρουσιάζεται όταν οι δύο ταυτόχρονες περίοδοι λειτουργίας επιχειρούν να μετατρέψουν τα κλειδώματα IX σε X κλειδώματα ταυτόχρονα. Εάν το READ_COMMITTED_SNAPSHOT είναι απενεργοποιημένο, οι περίοδοι λειτουργίας θα λάβουν έξι κλειδώματα που δεν θα βρίσκονται σε αδιέξοδο όταν μετατρέπονται σε κλειδώματα X. Η επείγουσα επιδιόρθωση αντιμετωπίζει αυτή τη συμπεριφορά, χορηγώντας LCK_M_SCH_S κλειδώματα αντί για τα κλειδώματα IX όταν χρησιμοποιείται READ_COMMITTED_SNAPSHOT με τις υποδείξεις TABLOCK και UPDLOCK .Σημείωση Αυτό το πρόβλημα παρουσιάζεται επίσης στον Microsoft SQL Server 2008 R2. Σύντομα θα κυκλοφορήσει μια επείγουσα επιδιόρθωση για τον SQL Server 2008 R2.
Επίλυση
Το πρόβλημα διορθώθηκε για πρώτη φορά με την ακόλουθη αθροιστική ενημέρωση του SQL Server.
Αθροιστική ενημερωμένη έκδοση 8 για SQL Server 2012 SP1 /en-us/help/2917531
Κάθε νέα αθροιστική ενημέρωση για τον SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις επιδιορθώσεις ασφαλείας που συμπεριλήφθηκαν στην προηγούμενη αθροιστική ενημέρωση. Ανάληψη ελέγχου των πιο πρόσφατων αθροιστικών ενημερώσεων για τον SQL Server:
Κατάσταση
Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα πρόβλημα στα προϊόντα της Microsoft που παρατίθενται στην ενότητα "ισχύει για".