KB2926217 - ΕΠΙΔΙΌΡΘΩΣΗ: Παρουσιάζονται προβλήματα επιδόσεων όταν αυξάνεται η δραστηριότητα κλειδώματος βάσης δεδομένων στο SQL Server

Ισχύει για
SQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2012 Express SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2008 Service Pack 3 SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Standard SQL Server 2008 R2 Service Pack 2 SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Standard

Από προεπιλογή, τα Service Pack 1 για SQL Server 2014 και Service Pack 3 για SQL Server 2012 περιλαμβάνουν αυτήν την ενημέρωση κώδικα και δεν χρειάζεται να προσθέσετε σημαίες παρακολούθησης για να ενεργοποιήσετε την επιδιόρθωση. Για να ενεργοποιήσετε την ενημέρωση κώδικα μετά την εγκατάσταση μίας από τις αθροιστικές ενημερωμένες εκδόσεις στην ενότητα Προτεινόμενη αντιμετώπιση, πρέπει να ξεκινήσετε το Microsoft SQL Server προσθέτοντας σημαία παρακολούθησης 1236 στις παραμέτρους εκκίνησης.

Συμπτώματα

Ας υποθέσουμε ότι εκτελείτε μια παρουσία του Microsoft SQL Server 2014, SQL Server 2012, SQL Server 2008 ή SQL Server 2008 R2 σε έναν υπολογιστή που περιέχει πολλούς επεξεργαστές. Όταν ο αριθμός των κλειδωμάτων (τύπος πόρου = ΒΑΣΙΚΗ ΒΑΣΗ) για μια συγκεκριμένη βάση δεδομένων υπερβαίνει ένα συγκεκριμένο όριο, αντιμετωπίζετε τα ακόλουθα προβλήματα επιδόσεων:

  • Εμφανίζονται αυξημένες τιμές για LOCK_HASH αριθμό αυξομείωσης.

    Σημείωση Ανατρέξτε στην ενότητα "Περισσότερες πληροφορίες" για πληροφορίες σχετικά με τον τρόπο παρακολούθησης αυτού του spinlock.

  • Ερωτήματα ή λειτουργίες που απαιτούν κλείδωμα βάσης δεδομένων καθυστερούν πολύ να ολοκληρωθούν. Για παράδειγμα, ενδέχεται να παρατηρήσετε τις ακόλουθες καθυστερήσεις επιδόσεων:

    • SQL Server συνδέσεων
    • Συνδεδεμένα ερωτήματα διακομιστή
    • sp_reset_connection
    • Συναλλαγές

Σημείωση Για να εντοπίσετε τη λίστα κλειδωμάτων (τύπος πόρου = DATABASE) σε μια δεδομένη βάση δεδομένων, ανατρέξτε στην ενότητα "Περισσότερες πληροφορίες". Η τιμή κατωφλίου διαφέρει ανάλογα με το περιβάλλον.

Επίλυση

Πληροφορίες αθροιστικής ενημέρωσης

Το πρόβλημα διορθώθηκε για πρώτη φορά στην ακόλουθη αθροιστική ενημερωμένη έκδοση του SQL Server.

Αθροιστική ενημερωμένη έκδοση 13 για SQL Server 2008 R2 SP2 /el-gr/help/2967540

Αθροιστική ενημερωμένη έκδοση 17 για SQL Server 2008 SP3 /el-gr/help/2958696

Αθροιστική ενημέρωση 1 για το SQL Server 2014 /el-gr/help/2931693

Αθροιστική ενημερωμένη έκδοση 9 για SQL Server 2012 SP1 /el-gr/help/2931078

Πληροφορίες σχετικά με τις αθροιστικές ενημερώσεις για SQL Server

Κάθε νέα αθροιστική ενημερωμένη έκδοση για SQL Server περιέχει όλες τις επείγουσες επιδιορθώσεις και όλες τις ενημερώσεις κώδικα ασφαλείας που συμπεριλήφθηκαν με την προηγούμενη αθροιστική ενημερωμένη έκδοση. Δείτε τις πιο πρόσφατες αθροιστικές ενημερώσεις για SQL Server:

      

Πληροφορίες επείγουσας επιδιόρθωσης
 Μια υποστηριζόμενη επείγουσα επιδιόρθωση είναι διαθέσιμη από τη Microsoft. Ωστόσο, αυτή η επείγουσα επιδιόρθωση προορίζεται για τη διόρθωση μόνο του ζητήματος που περιγράφεται σε αυτό το άρθρο. Εφαρμόστε αυτήν την επείγουσα επιδιόρθωση μόνο σε συστήματα που αντιμετωπίζουν αυτό το συγκεκριμένο ζήτημα.

Εάν η επείγουσα επιδιόρθωση είναι διαθέσιμη για λήψη, υπάρχει η ενότητα "Διαθέσιμη λήψη επείγουσας επιδιόρθωσης" στο επάνω μέρος αυτού του άρθρου της Γνωσιακής βάσης. Εάν αυτή η ενότητα δεν εμφανίζεται, υποβάλετε αίτηση στην εξυπηρέτηση πελατών και υποστήριξη της Microsoft για να αποκτήσετε την επείγουσα επιδιόρθωση.

Σημείωση Εάν προκύψουν πρόσθετα προβλήματα ή εάν απαιτείται αντιμετώπιση προβλημάτων, ίσως χρειαστεί να δημιουργήσετε μια ξεχωριστή αίτηση εξυπηρέτησης. Το συνηθισμένο κόστος υποστήριξης θα ισχύει για πρόσθετες ερωτήσεις υποστήριξης και ζητήματα που δεν αφορούν τη συγκεκριμένη επείγουσα επιδιόρθωση. Για μια πλήρη λίστα αριθμών τηλεφώνου εξυπηρέτησης πελατών και υποστήριξης της Microsoft ή για να δημιουργήσετε μια ξεχωριστή αίτηση υπηρεσίας, επισκεφθείτε την ακόλουθη τοποθεσία της Microsoft στο Web:

/contactus/?ws=support Σημείωση Η φόρμα "Διαθέσιμη λήψη επείγουσας επιδιόρθωσης" εμφανίζει τις γλώσσες για τις οποίες είναι διαθέσιμη η επείγουσα επιδιόρθωση. Εάν δεν βλέπετε τη γλώσσα σας, αυτό συμβαίνει επειδή δεν υπάρχει διαθέσιμη επείγουσα επιδιόρθωση για αυτήν τη γλώσσα.

Κατάσταση

Η Microsoft έχει επιβεβαιώσει ότι πρόκειται για ένα ζήτημα που αφορά τα προϊόντα της Microsoft που παρατίθενται στην ενότητα "Ισχύει για".

Περισσότερες πληροφορίες

Όταν μια εφαρμογή δημιουργεί μια σύνδεση με SQL Server, δημιουργεί πρώτα ένα περιβάλλον βάσης δεδομένων. Από προεπιλογή, η σύνδεση θα προσπαθήσει να αποκτήσει κλείδωμα DATABASE σε λειτουργία SH. Το κλείδωμα SH-DATABASE θα απελευθερωθεί όταν διακοπεί η σύνδεση ή αλλάξει το περιβάλλον της βάσης δεδομένων κατά τη διάρκεια ζωής της σύνδεσης. Εάν έχετε πολλές ενεργές συνδέσεις που χρησιμοποιούν το ίδιο περιβάλλον βάσης δεδομένων, μπορείτε να έχετε πολλά κλειδώματα του τύπου πόρου DATABASE για τη συγκεκριμένη βάση δεδομένων.

Στον υπολογιστή που έχει 16 ή περισσότερες CPU, μόνο τα αντικείμενα πίνακα χρησιμοποιούν ένα συνδυασμό κλειδώματος με διαμερίσματα. Ωστόσο, τα κλειδώματα της βάσης δεδομένων δεν έχουν χωριστεί. Επομένως, όσο μεγαλύτερος είναι ο αριθμός κλειδωμάτων της βάσης δεδομένων, τόσο περισσότερο χρόνο χρειάζεται για να SQL Server να αποκτήσετε κλείδωμα στη βάση δεδομένων. Οι περισσότερες εφαρμογές δεν αντιμετωπίζουν προβλήματα που προκαλούνται από αυτόν τον σχεδιασμό. Αλλά μόλις ο αριθμός υπερβεί ένα ορισμένο όριο, απαιτείται πρόσθετη εργασία και χρόνος για την απόκτηση της κλειδαριάς. Αν και το κόστος είναι μόνο μικροδευτερόλεπτα για κάθε πρόσθετη κλειδαριά, ο συνολικός χρόνος μπορεί γρήγορα να αυξηθεί επειδή οι κάδοι κατακερματισμού κλειδώματος προστατεύονται χρησιμοποιώντας ένα spinlock. Αυτό προκαλεί πρόσθετους κύκλους CPU και περιμένει επιπλέον εργαζόμενους να αποκτήσουν το κλείδωμα.

Αυτή η επείγουσα επιδιόρθωση εισάγει τη δημιουργία διαμερισμάτων κλειδώματος βάσης δεδομένων όταν ενεργοποιείται η σημαία παρακολούθησης T1236 κατά την εκκίνηση. Η διαμέριση του κλειδώματος DATABASE διατηρεί το βάθος της λίστας κλειδώματος διαχειρίσιμο σε κάθε τοπικό διαμέρισμα. Αυτό βελτιστοποιεί σημαντικά τη διαδρομή πρόσβασης που χρησιμοποιείται για την απόκτηση κλειδώματος DATABASE

Για την παρακολούθηση του LOCK_HASH spinlock, μπορείτε να χρησιμοποιήσετε το ακόλουθο ερώτημα. ΟΡΙΣΜΌΣ NOCOUNT ΣΤΙΣ
CREATE TABLE #spinlock_stats([CaptureTime] datetime,[όνομα] nvarchar(512),[collisions] bigint,
[περιστροφές] bigint,[spins_per_collision] πραγματικό,[sleep_time] bigint,[backoffs] int)
ΔΗΛΩΣΗ @counter int = 1
ΕΝΏ @counter< 100
      BEGIN
            INSERT INTO #spinlock_stats SELECT GETDATE() as "CaptureTime" , * FROM sys.dm_os_spinlock_stats WHERE [όνομα] = 'LOCK_HASH'
            ΑΝΑΜΟΝΉ ΚΑΘΥΣΤΈΡΗΣΗΣ '00:00:05'
            ΣΥΝΟΛΟ @counter +=1
      END
SELECT * FROM #spinlock_stats ORDER BY [CaptureTime]
DROP TABLE #spinlock_stats Για περισσότερες πληροφορίες σχετικά με τη διάγνωση και την επίλυση διένεξης spinlock σε SQL Server, μεταβείτε στο ακόλουθο έγγραφο:

Διάγνωση και επίλυση διένεξης Spinlock στο SQL Server Note Παρόλο που αυτό το έγγραφο έχει συνταχθεί για το SQL Server 2008 R2, οι πληροφορίες εξακολουθούν να ισχύουν για το SQL Server 2012.

Παραπομπές

Για περισσότερες πληροφορίες σχετικά με τις σημαίες παρακολούθησης στο SQL Server 2012, επισκεφθείτε την ακόλουθη τοποθεσία Web του TechNet:

Πληροφορίες σχετικά με τις σημαίες παρακολούθησης στο SQL Server 2012
Για περισσότερες πληροφορίες σχετικά με τον τρόπο εύρεσης του αριθμού κλειδωμάτων βάσης δεδομένων στον χρήστη ανά βάση δεδομένων, χρησιμοποιήστε το ακόλουθο ερώτημα για να υπολογίσετε αυτήν την τιμή:επιλέξτε Resource_database_id, resource_type, request_mode, request_status,
count (*) 'LockCount' από sys.dm_tran_locks
Ομαδοποίηση κατά Resource_database_id, resource_type, request_mode request_status