Τρόπος επίλυσης αποκλεισμού προβλήματα που προκαλούνται από κλείδωμα κλιμάκωσης στον SQL Server

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 323630 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

Κλείδωμα κλιμάκωση είναι η διαδικασία μετατροπής πολλά ακριβέστερα κλειδώματα (όπως τα κλειδώματα γραμμή ή σελίδα) σε πίνακα κλειδωμάτων. Microsoft SQL Διακομιστής δυναμικά καθορίζει πότε να πραγματοποιήσετε κλιμάκωση κλειδώματος. Όταν κάνετε αυτό απόφαση, SQL Server λαμβάνει υπόψη τον αριθμό των κλειδωμάτων που διατηρούνται σε ένα σάρωση ιδίως, τον αριθμό των κλειδωμάτων που κατέχει της όλης συναλλαγής και η μνήμη που χρησιμοποιείται για κλειδώματα του συστήματος ως σύνολο. Συνήθως, αποτέλεσμα παρουσιάζεται κλιμάκωση κλείδωμα προεπιλεγμένη συμπεριφορά του SQL Server μόνο σε αυτά τα σημεία όπου αυτό θα βελτιώσει τις επιδόσεις ή όταν πρέπει να μειώσετε μνήμη κλειδώματος συστήματος υπερβολική πιο εύλογο επίπεδο. Ωστόσο, ορισμένες εφαρμογή ή το ερώτημα σχέδια ενδέχεται να ενεργοποιήσει κλιμάκωση κλείδωμα στιγμή όταν είναι δεν ευκταίο και κλείδωμα escalated πίνακα ενδέχεται να αποκλείει άλλους χρήστες. Αυτό το άρθρο Ασχολείται με τον τρόπο προσδιορισμού εάν προκαλεί κλείδωμα κλιμάκωση αποκλεισμού και πώς Για να αντιμετωπιστούν κλιμάκωση ανεπιθύμητες κλειδώματος.

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

Τρόπος διαπίστωσης αν προκαλεί κλείδωμα κλιμάκωση αποκλεισμού

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

Εάν Εμφάνιση κλειδώματος κλιμάκωση, βεβαιωθείτε ότι αποκλείει το κλείδωμα escalated πίνακα άλλοι χρήστες.

Για περισσότερες πληροφορίες σχετικά με τον τρόπο προσδιορισμού της κεφαλής αποκλεισμού αναδυόμενων παραθύρων και πώς Για να προσδιορίσετε το κλείδωμα πόρων κατέχει κεφαλής αναδυόμενων παραθύρων που αποκλείει τους διεργασία διακομιστή αναγνωριστικά (SPID), κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
224453Κατανόηση και την επίλυση προβλημάτων αποκλεισμού 2000 ή SQL Server 7.0
Εάν είναι το κλείδωμα που αποκλείει άλλους χρήστες οτιδήποτε άλλο εκτός από ένα κλείδωμα ΚΑΡΤΈΛΑ (επίπεδο πίνακα) με μια κατάσταση κλειδώματος του S (κοινόχρηστο), ή X (αποκλειστική) κλιμάκωση lock δεν είναι το ζήτημα. Ειδικότερα, εάν η ΚΑΡΤΈΛΑ κλείδωμα είναι ένα κλείδωμα πρόθεσης (όπως μια κατάσταση κλειδώματος ΕΊΝΑΙ, IU ή IX), αυτό δεν είναι το αποτέλεσμα του κλειδώματος κλιμάκωση. Εάν τα προβλήματα αποκλεισμού δεν προκαλούνται από κλείδωμα κλιμάκωσης, ανατρέξτε στο άρθρο Q224453 για τα βήματα αντιμετώπισης προβλημάτων.

Πώς να αποτρέψετε την κλιμάκωση κλειδώματος

Ο απλούστερος και ασφαλέστερος τρόπος για να αποτρέψετε την κλιμάκωση lock είναι να διατηρήσετε Σύντομη συναλλαγές και να μειώσει έτσι αποτύπωμα κλείδωμα δαπανηρή ερωτημάτων ότι τα όρια κλιμάκωση κλείδωμα δεν υπέρβαση. Υπάρχουν πολλοί τρόποι για να Αποκτήστε αυτού του στόχου, πολλές από τις οποίες αναγράφονται:
  • Χωρίστε τις λειτουργίες δέσμης μεγάλο σε πολλά μικρότερα Οι λειτουργίες. Για παράδειγμα, ας υποθέσουμε ότι εκτελέσατε το παρακάτω ερώτημα για να καταργήσετε πολλά εκατό χιλιάδες παλιές εγγραφές από ένα πίνακα ελέγχου και στη συνέχεια βρέθηκε ότι προκαλείται ένα κλείδωμα κλιμάκωσης που αποκλείονται άλλους χρήστες:
    DELETE FROM LogMessages WHERE LogDate < '2/1/2002'						
    Καταργώντας τα μητρώα αυτά μερικές εκατοντάδες κάθε φορά, μπορείτε να δραματικά Μειώστε τον αριθμό των κλειδωμάτων που συσσωρεύονται ανά συναλλαγή και να αποτρέψετε το κλείδωμα κλιμάκωση. Για παράδειγμα:
    SET ROWCOUNT 500
    delete_more:
         DELETE FROM LogMessages WHERE LogDate < '2/1/2002'
    IF @@ROWCOUNT > 0 GOTO delete_more
    SET ROWCOUNT 0
  • Μείωση του αποτυπώματος κλείδωμα του ερωτήματος, κάνοντας το ερώτημα ως το δυνατόν πιο αποτελεσματική. Ίσως μεγάλο σαρώσεις ή μεγάλου αριθμού αναζητήσεις σελιδοδείκτη αυξάνουν την πιθανότητα κλειδώματος κλιμάκωση. Επιπλέον, αυξάνει την πιθανότητα προβλήματα, και γενικά αρνητικά συνταύτισης επηρεάζει και απόδοσης. Αφού βρείτε το ερώτημα που προκαλεί κλείδωμα κλιμάκωση, αναζητήστε ευκαιρίες για Δημιουργία νέων ευρετηρίων ή για να προσθέσετε στήλες σε ένα υπάρχον ευρετήριο για να καταργήσετε το ευρετήριο ή για τη μεγιστοποίηση της αποτελεσματικότητας του ευρετηρίου αναζητά και πίνακα σαρώσεις. Σκεφτείτε επικόλληση του ερώτημα σε ένα παράθυρο ερωτήματος Query Analyzer για να εκτελέσετε μια ανάλυση αυτόματο ευρετήριο σε αυτό. Για να το κάνετε αυτό, το Ερώτημα μενού, κάντε κλικ στο κουμπί Οδηγός ρύθμισης ευρετηρίου στο SQL Server 2000 ή κάντε κλικ Εκτέλεση ανάλυσης ευρετηρίου στον SQL Server 7.0.

    Ένας στόχος βελτιστοποίησης αυτής είναι να κάνετε ευρετήριο επιδιώκει επιστροφή ως γραμμές όσο το δυνατόν ελαχιστοποίηση του κόστους Αναζητήσεις (Μεγιστοποίηση της επιλεκτικότητας ευρετήριο για τη συγκεκριμένη σελιδοδείκτη ερώτημα). Εάν ο SQL Server εκτιμά ότι ένα λογικό τελεστή σελιδοδείκτη αναζήτησης μπορεί να επιστρέφει πολλές γραμμές, μπορεί να χρησιμοποιήσει ένα ΠΡΟΦΌΡΤΩΣΗΣ για την πραγματοποίηση αναζήτησης σελιδοδείκτη. Εάν SQL Διακομιστής χρησιμοποιούν ΠΡΟΦΌΡΤΩΣΗΣ για μια αναζήτηση σελιδοδείκτης, πρέπει να αυξήσετε το επίπεδο απομόνωσης συναλλαγής από ένα τμήμα του ερωτήματος για την επαναλαμβανόμενη ανάγνωση για ένα τμήμα του ερωτήματος. Αυτό σημαίνει ότι τι μπορεί να μοιάζει με μια ΕΠΙΛΟΓΉ δήλωση σε επίπεδο απομόνωσης που διαπράχθηκαν ανάγνωση μπορεί να αποκτά πολλών χιλιάδων κλειδί κλειδώματα (στον συγκεντρωτικό ευρετήριο και ένα μη συγκεντρωτικό ευρετήριο), στην οποία μπορεί να προκαλέσει τέτοια ένα ερώτημα για να υπερβαίνει τα κατώτατα όρια κλιμάκωση κλειδώματος. Αυτό είναι ιδιαίτερα Σημαντικό Εάν διαπιστώσετε ότι το κλείδωμα escalated είναι ένα κλείδωμα κοινόχρηστο πίνακα, Ωστόσο, δεν συνήθως εμφανίζεται στο προεπιλεγμένο επίπεδο απομόνωσης που διαπράχθηκαν ανάγνωση. Εάν έναν όρο αναζήτησης σελιδοδείκτη με ΠΡΟΦΌΡΤΩΣΗΣ προκαλεί την κλιμάκωση, σκεφτείτε Προσθήκη επιπλέον στήλες σε μη συγκεντρωτικό ευρετήριο που εμφανίζεται στο ευρετήριο Αναζήτηση ή το ευρετήριο σάρωση λογικό τελεστή παρακάτω λογικές αναζήτησης σελιδοδείκτη τελεστής στο σχέδιο ερωτήματος. Ενδέχεται να είναι δυνατή η δημιουργία ευρετηρίου που καλύπτουν (ένα ευρετήριο που περιλαμβάνει όλες τις στήλες σε έναν πίνακα που χρησιμοποιήθηκαν στο ερώτημα), ή τουλάχιστον ένα ευρετήριο που καλύπτει τις στήλες που χρησιμοποιήθηκαν για κριτήρια συνδέσμου ή στο WHERE εάν καθώς και όλα τα στοιχεία στη λίστα επιλέξτε τη στήλη είναι ανέφικτη.

    Μια ένωση βρόχος ένθετων μπορεί επίσης να χρησιμοποιήσετε ΠΡΟΦΌΡΤΩΣΗΣ και αυτό προκαλεί η ίδια συμπεριφορά κλειδώματος.

    Για περισσότερες πληροφορίες, κάντε κλικ στον αριθμό του άρθρου παρακάτω, για να προβάλετε το άρθρο της Γνωσιακής Βάσης της Microsoft:
    260652Βρόχος ένθετων συνδέσμου που χρησιμοποιεί ένα "ΣΕΛΙΔΟΔΕΊΚΤΗΣ ΑΝΑΖΉΤΗΣΗΣ...Μπορεί να με ΠΡΟΦΌΡΤΩΣΗΣ" Κρατήστε πατημένο το πλήκτρο κλειδώματα περισσότερο
  • Κλείδωμα κλιμάκωσης δεν είναι δυνατό να προκύψει, εάν είναι διαφορετική SPID αυτήν τη στιγμή κατέχει ένα πίνακα συμβατό κλείδωμα. Πάντα κλείδωμα κλιμάκωση μεταβαίνει κλείδωμα πίνακα και ποτέ δεν κλειδώνει τη σελίδα. Επιπλέον, εάν μια κλιμάκωση κλειδώματος προσπάθεια αποτύχει, επειδή μια άλλη SPID διατηρεί ένα μη συμβατό κλείδωμα ΚΑΡΤΈΛΑ ερώτημα που επιχειρήθηκε κλιμάκωση αποκλεισμός κατά την αναμονή για κλείδωμα ΚΑΡΤΈΛΑ. Αντίθετα, συνεχίζει να αποκτήσει κλειδώματα στο αρχικό, πιο λεπτομερή επίπεδο (γραμμών, κλειδί, ή σελίδα), επιχειρούν περιοδικά να κάνετε πρόσθετες κλιμάκωση. Επομένως, ένα η μέθοδος για να αποτρέψετε το κλείδωμα κλιμάκωση σε ένα συγκεκριμένο πίνακα είναι η απόκτηση και κρατήστε ένα κλείδωμα σε μια διαφορετική σύνδεση που δεν είναι συμβατό με το escalated Τύπος κλειδώματος. Ένα κλείδωμα IX (αποκλειστική πρόθεση) σε επίπεδο πίνακα κλείδωμα οποιαδήποτε γραμμές ή σελίδες, αλλά ακόμα δεν είναι συμβατό με μια escalated S (κοινόχρηστο) ή x (αποκλειστική) ΚΑΡΤΈΛΑ κλειδώματος. Για παράδειγμα, ας υποθέσουμε ότι πρέπει να εκτελέσετε μια μαζική εργασία που τροποποιεί ένα μεγάλο αριθμό γραμμών του η πίνακας και που προκάλεσε τον αποκλεισμό που παρουσιάζεται εξαιτίας του κλειδώματος κλιμάκωση. Εάν αυτή η εργασία ολοκληρώνεται πάντα σε λιγότερο από μία ώρα, μπορείτε να δημιουργήσετε μια εργασία Transact-SQL που περιέχει τον ακόλουθο κώδικα και Προγραμματισμός νέας εργασίας Για να ξεκινήσετε αρκετά λεπτά πριν από την ώρα έναρξης της μαζικής εργασίας:
    BEGIN TRAN
    SELECT * FROM mytable (UPDLOCK, HOLDLOCK) WHERE 1=0
    WAITFOR DELAY '1:00:00'
    COMMIT TRAN				
    Αυτό το ερώτημα αποκτά και διατηρεί ένα κλείδωμα IX η για μία ώρα, που αποτρέπει την κλιμάκωση κλειδώματος στον πίνακα κατά τη διάρκεια εκείνη τη στιγμή. Αυτή τη μαζική τροποποιείτε οποιαδήποτε δεδομένα ή αποκλεισμός άλλα ερωτήματα (εκτός εάν το άλλο ερώτημα επιβάλλει ένα κλείδωμα πίνακα με την υπόδειξη TABLOCK, ή εάν ένα ο διαχειριστής έχει απενεργοποιήσει κλειδώματα σελίδας ή γραμμή, χρησιμοποιώντας ένα sp_indexoption αποθηκευμένη διαδικασία).
Επιπλέον, μπορείτε να απενεργοποιήσετε την κλιμάκωση lock με την ενεργοποίηση της παρακολούθησης σημαία 1211. Ωστόσο, αυτή η σημαία παρακολούθησης απενεργοποιεί όλα τα κλείδωμα κλιμάκωση καθολικά στο η παρουσία του SQL Server. Κλείδωμα κλιμάκωση εξυπηρετεί ένα πολύ χρήσιμο σκοπό στην SQL Διακομιστής από τη μεγιστοποίηση της αποτελεσματικότητας των ερωτημάτων που διαφορετικά επιβραδυνθούν προς τα κάτω από την επιβάρυνση απόκτηση και αφήνοντας αρκετές χιλιάδες κλειδωμάτων. Κλείδωμα κλιμάκωση βοηθά επίσης να ελαχιστοποιήσετε την απαιτούμενη μνήμη για την παρακολούθηση των κλειδωμάτων. Η μνήμη που μπορεί να εκχωρήσει δυναμικά το SQL Server για κλείδωμα δομές finite, έτσι εάν απενεργοποιήσετε το κλείδωμα κλιμάκωσης και μνήμη κλείδωμα μεγαλώνει μεγάλο αρκετά, επιχειρεί να εκχωρήσει πρόσθετα κλειδώματα για οποιοδήποτε ερώτημα ενδέχεται να αποτύχει και το παρουσιάζεται το παρακάτω σφάλμα:

Σφάλμα: 1204, σοβαρότητας: 19, Κατάσταση: 1
Ο SQL Server δεν μπορεί να αποκτήσει ΚΛΕΊΔΩΜΑ πόρου αυτήν τη στιγμή. Επανεκτέλεση δήλωση σας όταν υπάρχουν λιγότερα ενεργοί χρήστες ή ζητήστε από το σύστημα ο διαχειριστής για να ελέγξετε τις παραμέτρους SQL Server κλείδωμα και μνήμης.
Σημείωση Όταν παρουσιάζεται ένα σφάλμα "1204", διακόπτει την επεξεργασία της τρέχουσα πρόταση και προκαλεί την επαναφορά των ενεργών συναλλαγών. Η επαναφορά ίδια ενδέχεται να εμποδίσει τους χρήστες ή να οδηγήσει σε μια μεγάλη βάση δεδομένων χρόνου αποκατάστασης εάν κάνετε επανεκκίνηση η υπηρεσία SQL Server.

Χρήση μια υπόδειξη κλείδωμα όπως κλείδωμα ΓΡΑΜΜΏΝ αλλάζει μόνο το σχέδιο αρχικής κλειδώματος. Κλείδωμα υποδείξεις Αποτροπή κλιμάκωση κλειδώματος.

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

Για να προσθέσετε μια παράμετρο εκκίνησης του διακομιστή, κάντε δεξιό κλικ του Κάντε κλικ στο διακομιστή SQL Enterprise Manager, Ιδιότητες, και στη συνέχεια το Γενικά καρτέλα, κάντε κλικ στο Παράμετροι εκκίνησης, και στη συνέχεια, προσθέστε την ακόλουθη παράμετρο (ακριβώς όπως εμφανίζεται):
-T1211
Πρέπει να μετακινηθείτε στην υπηρεσία SQL Server για νέα παράμετρο εκκίνησης να τεθούν σε ισχύ. Εάν εκτελέσετε το παρακάτω ερώτημα στο Query Analyzer σημαία παρακολούθησης τίθεται σε ισχύ αμέσως:
DBCC TRACEON (1211, -1)				
Ωστόσο, εάν δεν προσθέσετε το -T1211 παράμετρος εκκίνησης, το αποτέλεσμα του ενός traceon εντολή χάνεται όταν υπόκειται στην υπηρεσία SQL Server. Ενεργοποίηση σημαία παρακολούθησης αποτρέπει τυχόν μελλοντικές κλείδωμα διαλεύκανσης αλλά δεν αναιρεί οποιαδήποτε διαλεύκανσης κλειδώματος που έχουν ήδη πραγματοποιηθεί σε ένα ενεργό συναλλαγή.

Ιδιότητες

Αναγν. άρθρου: 323630 - Τελευταία αναθεώρηση: Κυριακή, 29 Μαΐου 2011 - Αναθεώρηση: 4.0
Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Λέξεις-κλειδιά: 
kbsqlsetup kbinfo kbmt KB323630 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:323630

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com