Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 13898|Απάντηση: 0

[Πηγή] Κλειδώματα, βρώμικες αναγνώσεις, ανεπανάληπτες αναγνώσεις και ψευδείς αναγνώσεις στην SQL

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 20/7/2016 12:37:53 μ.μ. | | |
Επισκόπηση κλειδαριών
1. Γιατί να εισάγετε κλειδαριές
Όταν πολλοί χρήστες εκτελούν ταυτόχρονες λειτουργίες στη βάση δεδομένων ταυτόχρονα, προκύπτουν οι ακόλουθες ασυνέπειες δεδομένων:
Λείπουν ενημερώσεις
Δύο χρήστες, ο Α και ο Β, διαβάζουν τα ίδια δεδομένα και τα τροποποιούν και το αποτέλεσμα της τροποποίησης του ενός χρήστη καταστρέφει το αποτέλεσμα της άλλης τροποποίησης, όπως το σύστημα κρατήσεων εισιτηρίων
Βρώμικο διάβασμα
Ο χρήστης Α τροποποιεί τα δεδομένα και, στη συνέχεια, ο χρήστης Β διαβάζει τα δεδομένα, αλλά ο χρήστης Α ακυρώνει την τροποποίηση των δεδομένων για κάποιο λόγο και τα δεδομένα επιστρέφουν στην αρχική τους τιμή
Μην διαβάζετε επανειλημμένα
Ο χρήστης Α διαβάζει τα δεδομένα και, στη συνέχεια, ο χρήστης Β διαβάζει τα δεδομένα και τα τροποποιεί
Η κύρια μέθοδος ελέγχου συγχρονισμού είναι ο αποκλεισμός, ο οποίος απαγορεύει στους χρήστες να κάνουν ορισμένες λειτουργίες για ένα χρονικό διάστημα για να αποφύγουν ασυνέπειες στα δεδομένα

2. Ταξινόμηση κλειδαριών
Υπάρχουν δύο υποδιαιρέσεις σε κατηγορίες κλειδαριών:
1 . Από την άποψη του συστήματος βάσης δεδομένων: χωρίζεται σε αποκλειστικές κλειδαριές (δηλαδή, αποκλειστικές κλειδαριές), κοινόχρηστες κλειδαριές και κλειδαριές ενημέρωσης
MS - Ο SQL Server χρησιμοποιεί τα ακόλουθα μοτίβα κλειδώματος πόρων.
Περιγραφή λειτουργίας κλειδώματος
Τα Share(s) χρησιμοποιούνται για λειτουργίες που δεν αλλάζουν ή ενημερώνουν δεδομένα (λειτουργίες μόνο για ανάγνωση), όπως προτάσεις SELECT.
Η ενημέρωση (U) χρησιμοποιείται σε πόρους με δυνατότητα ενημέρωσης. Αποτρέπει κοινές μορφές αδιεξόδων κατά την ανάγνωση, το κλείδωμα πολλών περιόδων λειτουργίας και πιθανώς μια ενημέρωση πόρων που μπορεί να προκύψει.
Το Αποκλειστικό (X) χρησιμοποιείται για λειτουργίες τροποποίησης δεδομένων, όπως INSERT, UPDATE ή DELETE. Βεβαιωθείτε ότι δεν εκτελούνται πολλές ενημερώσεις στον ίδιο πόρο ταυτόχρονα.
Τα Intent Locks χρησιμοποιούνται για τη δημιουργία μιας ιεραρχίας κλειδωμάτων. Οι τύποι κλειδωμάτων πρόθεσης είναι: Intent Shared (IS), Intent Exclusive (IX) και Intent Exclusive (SIX).
Τα κλειδώματα σχήματος χρησιμοποιούνται κατά την εκτέλεση λειτουργιών που εξαρτώνται από το σχήμα του πίνακα. Οι τύποι κλειδαριών σχήματος είναι: τροποποίηση σχήματος (Sch -M) και σταθερότητα σχήματος (Sch -S).
Οι μαζικές ενημερώσεις (BU) χρησιμοποιούνται όταν αντιγράφονται μεγάλοι όγκοι δεδομένων σε έναν πίνακα και καθορίζεται μια υπόδειξη TABLOCK.
Κοινόχρηστες κλειδαριές
Ένα κλείδωμα κοινόχρηστων συναλλαγών επιτρέπει στις ταυτόχρονες συναλλαγές να διαβάσουν (ΕΠΙΛΟΓΗ) έναν πόρο. Όταν υπάρχει ένα κοινόχρηστο κλείδωμα (S) σε έναν πόρο, καμία άλλη συναλλαγή δεν μπορεί να τροποποιήσει τα δεδομένα. Απελευθερώστε το κοινόχρηστο κλείδωμα (S) στον πόρο μόλις διαβαστούν τα δεδομένα, εκτός εάν το επίπεδο απομόνωσης συναλλαγής έχει οριστεί σε επαναλαμβανόμενο ή υψηλότερο ή εάν το κοινόχρηστο κλείδωμα (S) διατηρείται με μια υπόδειξη κλειδώματος για τη διάρκεια ζωής της συναλλαγής.
Κλείδωμα ενημέρωσης
Οι κλειδαριές ενημέρωσης (U) αποτρέπουν τα αδιέξοδα στη συνήθη μορφή τους. Ένα τυπικό μοτίβο ενημέρωσης αποτελείται από μια συναλλαγή που διαβάζει μια καρτέλα, λαμβάνει ένα κοινόχρηστο κλείδωμα (S) για έναν πόρο (σελίδα ή γραμμή) και, στη συνέχεια, τροποποιεί μια γραμμή, η οποία απαιτεί τη μετατροπή του κλειδώματος σε αποκλειστικό κλείδωμα (X). Εάν δύο συναλλαγές αποκτήσουν ένα κλείδωμα κοινόχρηστης λειτουργίας σε έναν πόρο και, στη συνέχεια, προσπαθήσουν να ενημερώσουν τα δεδομένα ταυτόχρονα, μία συναλλαγή επιχειρεί να μετατρέψει το κλείδωμα σε αποκλειστικό κλείδωμα (X). Η μετάβαση από την κοινόχρηστη λειτουργία στην αποκλειστική κλειδαριά πρέπει να περιμένει για λίγο, επειδή το αποκλειστικό κλείδωμα μιας συναλλαγής δεν είναι συμβατό με το κλείδωμα κοινής λειτουργίας μιας άλλης συναλλαγής. Εμφανίζεται μια αναμονή κλειδώματος. Η δεύτερη συναλλαγή επιχειρεί να αποκτήσει ένα αποκλειστικό κλείδωμα (X) για μια ενημέρωση. Προκύπτει αδιέξοδο επειδή και οι δύο συναλλαγές μετατρέπονται σε αποκλειστικές κλειδαριές (X) και κάθε συναλλαγή περιμένει την άλλη συναλλαγή να απελευθερώσει το κλείδωμα της κοινόχρηστης λειτουργίας.
Για να αποφύγετε αυτό το πιθανό πρόβλημα αδιεξόδου, χρησιμοποιήστε ένα ενημερωμένο κλείδωμα (U). Μόνο μία συναλλαγή κάθε φορά μπορεί να λάβει ένα ενημερωμένο κλείδωμα (U) για έναν πόρο. Εάν η συναλλαγή τροποποιήσει τον πόρο, το κλείδωμα ενημέρωσης (U) μετατρέπεται σε αποκλειστικό κλείδωμα (X). Διαφορετικά, η κλειδαριά μετατρέπεται σε κοινόχρηστη κλειδαριά.
Αποκλειστικές κλειδαριές
Οι αποκλειστικές κλειδαριές (X) εμποδίζουν τις ταυτόχρονες συναλλαγές να έχουν πρόσβαση σε πόρους. Άλλες συναλλαγές δεν μπορούν να διαβάσουν ή να τροποποιήσουν τα δεδομένα που κλειδώνονται από το αποκλειστικό κλείδωμα (X).
Κλείδωμα πρόθεσης
Ένα κλείδωμα πρόθεσης υποδεικνύει ότι ο SQL Server πρέπει να αποκτήσει ένα κοινόχρηστο κλείδωμα (S) ή ένα αποκλειστικό κλείδωμα (X) σε ορισμένους από τους υποκείμενους πόρους της ιεραρχίας. Για παράδειγμα, ένα κλείδωμα πρόθεσης κοινής χρήσης που τοποθετείται σε επίπεδο πίνακα υποδεικνύει ότι η συναλλαγή σκοπεύει να τοποθετήσει ένα κλείδωμα κοινής χρήσης σε μια σελίδα ή γραμμή στον πίνακα. Ο ορισμός ενός κλειδώματος πρόθεσης σε επίπεδο πίνακα αποτρέπει μια άλλη συναλλαγή από το να αποκτήσει στη συνέχεια ένα αποκλειστικό κλείδωμα (X) στον πίνακα που περιέχει αυτήν τη σελίδα. Τα κλειδώματα πρόθεσης μπορούν να βελτιώσουν τις επιδόσεις, επειδή ο SQL Server ελέγχει το κλείδωμα πρόθεσης μόνο σε επίπεδο πίνακα για να προσδιορίσει εάν μια συναλλαγή μπορεί να αποκτήσει με ασφάλεια ένα κλείδωμα σε αυτόν τον πίνακα. Αντί να ελέγχετε τα κλειδώματα σε κάθε γραμμή ή σελίδα του πίνακα για να προσδιορίσετε εάν μια συναλλαγή μπορεί να κλειδώσει ολόκληρο τον πίνακα.
Τα κλειδώματα πρόθεσης περιλαμβάνουν την Κοινή χρήση πρόθεσης (IS), την Αποκλειστική πρόθεση (IX) και την Αποκλειστική κοινή χρήση πρόθεσης (SIX).
Περιγραφή λειτουργίας κλειδώματος
Η κοινή χρήση πρόθεσης (IS) υποδεικνύει ότι η πρόθεση της συναλλαγής είναι ορισμένοι και όχι όλοι οι υποκείμενοι πόροι στην ιεραρχία ανάγνωσης, τοποθετώντας κλειδώματα S σε κάθε πόρο.
Το Intent Exclusive (IX) υποδεικνύει ότι η πρόθεση της συναλλαγής είναι να τροποποιήσει ορισμένους, αλλά όχι όλους, από τους υποκείμενους πόρους στην ιεραρχία τοποθετώντας ένα κλείδωμα X σε κάθε πόρο. Το IX είναι ένα υπερσύνολο του IS.
Η αποκλειστική κοινή χρήση με πρόθεση (SIX) υποδεικνύει ότι η πρόθεση της συναλλαγής είναι να διαβάσει όλους τους υποκείμενους πόρους στην ιεραρχία και να τροποποιήσει ορισμένους, αλλά όχι όλους, από τους υποκείμενους πόρους τοποθετώντας κλειδώματα IX σε κάθε πόρο. Να επιτρέπονται τα ταυτόχρονα κλειδώματα IS σε πόρους ανώτατου επιπέδου. Για παράδειγμα, το κλείδωμα SIX ενός πίνακα τοποθετεί ένα κλείδωμα SIX στον πίνακα (επιτρέποντας ταυτόχρονα κλειδώματα IS) και ένα κλείδωμα IX στην τρέχουσα τροποποιημένη σελίδα (ένα κλείδωμα X στην τροποποιημένη γραμμή). Ενώ κάθε πόρος μπορεί να έχει μόνο ένα κλείδωμα SIX για μια χρονική περίοδο για να αποτρέψει άλλες συναλλαγές από την ενημέρωση του πόρου, άλλες συναλλαγές μπορούν να διαβάσουν τους υποκείμενους πόρους στην ιεραρχία αποκτώντας κλειδώματα IS σε επίπεδο πίνακα.
Αποκλειστικό κλείδωμα: Μόνο το πρόγραμμα που εκτελεί τη λειτουργία κλειδώματος επιτρέπεται να το χρησιμοποιεί και οποιεσδήποτε άλλες λειτουργίες σε αυτό δεν θα γίνονται δεκτές. Όταν εκτελείτε μια εντολή ενημέρωσης δεδομένων, ο SQL Server χρησιμοποιεί αυτόματα ένα αποκλειστικό κλείδωμα. Όταν υπάρχουν άλλες κλειδαριές σε ένα αντικείμενο, δεν μπορείτε να προσθέσετε μια αποκλειστική κλειδαριά σε αυτό.
Κοινόχρηστο κλείδωμα: Ο πόρος που κλειδώνεται από το κοινόχρηστο κλείδωμα μπορεί να διαβαστεί από άλλους χρήστες, αλλά άλλοι χρήστες δεν μπορούν να τον τροποποιήσουν.
Κλείδωμα ενημέρωσης: Όταν ο SQL Server είναι έτοιμος να ενημερώσει δεδομένα, κλειδώνει πρώτα το αντικείμενο δεδομένων, έτσι ώστε τα δεδομένα να μην μπορούν να τροποποιηθούν αλλά να μπορούν να διαβαστούν. Όταν ο SQL Server διαπιστώσει ότι θέλει να ενημερώσει δεδομένα, θα αντικαταστήσει αυτόματα το κλείδωμα ενημέρωσης με ένα αποκλειστικό κλείδωμα και δεν μπορεί να προσθέσει ένα κλείδωμα ενημέρωσης σε αυτό όταν υπάρχουν άλλα κλειδώματα στο αντικείμενο.

2 . Από την πλευρά του προγραμματιστή: χωρίζεται σε αισιόδοξο κλείδωμα και απαισιόδοξο κλείδωμα.
Κλείδωμα αισιοδοξίας: Βασίζεται εξ ολοκλήρου στη βάση δεδομένων για τη διαχείριση της εργασίας της κλειδαριάς.
Απαισιόδοξες κλειδαριές: Οι προγραμματιστές διαχειρίζονται οι ίδιοι τον χειρισμό κλειδαριών σε δεδομένα ή αντικείμενα.
Το MS - SQLSERVER χρησιμοποιεί κλειδώματα για την υλοποίηση απαισιόδοξου ελέγχου συγχρονισμού μεταξύ πολλών χρηστών που εκτελούν τροποποιήσεις στη βάση δεδομένων ταυτόχρονα

3. Το μέγεθος σωματιδίων της κλειδαριάς
Η ευαισθησία κλειδώματος είναι το μέγεθος του αποκλεισμένου στόχου, η μικρή ευαισθησία αποκλεισμού είναι υψηλή ταυτόχρονη, αλλά η γενική επιβάρυνση είναι μεγάλη και η μεγάλη ευαισθησία αποκλεισμού είναι χαμηλή ταυτόχρονη αλλά η γενική επιβάρυνση είναι μικρή
Ο SQL Server υποστηρίζει υποδιαίρεση κλειδώματος για γραμμές, σελίδες, κλειδιά, περιοχές κλειδιών, ευρετήρια, πίνακες ή βάσεις δεδομένων
Περιγραφή Πόρου
Αναγνωριστικό γραμμής RID. Χρησιμοποιείται για το κλείδωμα μιας σειράς σε έναν πίνακα μεμονωμένα.
Κλείδωμα γραμμής πλήκτρων στο ευρετήριο. Χρησιμοποιείται για την προστασία του εύρους των κλειδιών σε σειριακοποιήσιμες συναλλαγές.
8 kilobyte (KB) σελίδων δεδομένων ή σελίδων ευρετηρίου.
Εκτεταμένος δίσκος Ένα σύνολο οκτώ γειτονικών σελίδων δεδομένων ή σελίδων ευρετηρίου.
Πίνακας Ολόκληρος ο πίνακας, συμπεριλαμβανομένων όλων των δεδομένων και των ευρετηρίων.
Βάση δεδομένων DB.
4. Η διάρκεια του χρόνου κλειδώματος
Το χρονικό διάστημα διατήρησης ενός κλειδώματος είναι το χρονικό διάστημα που απαιτείται για την προστασία του πόρου στο ζητούμενο επίπεδο.
Ο χρόνος διατήρησης του κοινόχρηστου κλειδώματος που χρησιμοποιείται για την προστασία των λειτουργιών ανάγνωσης εξαρτάται από το επίπεδο απομόνωσης συναλλαγής. Με το προεπιλεγμένο επίπεδο απομόνωσης συναλλαγών ΔΕΣΜΕΥΜΕΝΗ ΑΝΑΓΝΩΣΗ, το κοινόχρηστο κλείδωμα ελέγχεται μόνο για τη διάρκεια της σελίδας ανάγνωσης. Σε μια σάρωση, το κλείδωμα δεν απελευθερώνεται μέχρι να ληφθεί το κλείδωμα στην επόμενη σελίδα της σάρωσης. Εάν καθορίσετε μια προτροπή HOLDLOCK ή ορίσετε το επίπεδο απομόνωσης συναλλαγής σε ΕΠΑΝΑΛΑΜΒΑΝΟΜΕΝΗ ΑΝΑΓΝΩΣΗ ή SERIALIZABLE, το κλείδωμα δεν απελευθερώνεται μέχρι να λήξει η συναλλαγή.
Ανάλογα με την επιλογή ταυτοχρονισμού που έχει οριστεί για το δρομέα, ο δρομέας μπορεί να αποκτήσει ένα κλείδωμα κύλισης σε κοινόχρηστη λειτουργία για την προστασία του αποσπάσματος. Όταν απαιτείται κλείδωμα κύλισης, το κλείδωμα κύλισης δεν απελευθερώνεται μέχρι την επόμενη φορά που θα εξαχθεί ή θα κλείσει ο δρομέας, όποιο από τα δύο συμβεί πρώτο. Ωστόσο, εάν καθορίσετε ένα HOLDLOCK, το κλείδωμα κύλισης δεν απελευθερώνεται μέχρι το τέλος της συναλλαγής.
Το αποκλειστικό κλείδωμα που χρησιμοποιείται για την προστασία της ενημέρωσης δεν θα αποδεσμευτεί μέχρι το τέλος της συναλλαγής.
Εάν μια σύνδεση προσπαθήσει να αποκτήσει ένα κλείδωμα που έρχεται σε διένεξη με ένα κλείδωμα που ελέγχεται από άλλη σύνδεση, η σύνδεση που επιχειρεί να αποκτήσει το κλείδωμα θα αποκλειστεί έως ότου:
Το κλείδωμα σε διένεξη απελευθερώνεται και η σύνδεση αποκτά το κλείδωμα που ζητήθηκε.
Το χρονικό όριο σύνδεσης έχει λήξει. Δεν υπάρχει χρονικό όριο από προεπιλογή, αλλά ορισμένες εφαρμογές ορίζουν διαστήματα χρονικού ορίου για να αποτρέψουν την αόριστη αναμονή

Πέντε προσαρμογές κλειδαριών στον SQL Server
1 Χειριστείτε τα αδιέξοδα και ορίστε προτεραιότητες αδιεξόδου
Αδιέξοδο είναι η ατέρμονη αναμονή που προκαλείται από πολλούς χρήστες που υποβάλλουν αίτηση για διαφορετικά μπλοκ, επειδή ο αιτών έχει ένα μέρος του δικαιώματος αποκλεισμού και περιμένει το μερικό φραγή που ανήκει σε άλλους χρήστες
Μπορείτε να χρησιμοποιήσετε τη DEADLOCK_PRIORITY SET για να ελέγξετε πώς αντιδρά η συνεδρία σε περίπτωση αδιεξόδου. Εάν και οι δύο διεργασίες κλειδώσουν τα δεδομένα και κάθε διεργασία δεν μπορεί να απελευθερώσει το δικό της κλείδωμα έως ότου η άλλη διεργασία απελευθερώσει το δικό της κλείδωμα, εμφανίζεται μια κατάσταση αδιεξόδου.

2 Χειριστείτε τα χρονικά όρια και ορίστε τη διάρκεια του χρονικού ορίου κλειδώματος.
@@LOCK_TIMEOUT Επιστρέφει την τρέχουσα ρύθμιση χρονικού ορίου κλειδώματος για την τρέχουσα περίοδο λειτουργίας σε χιλιοστά του δευτερολέπτου
Η ρύθμιση SET LOCK_TIMEOUT επιτρέπει στην εφαρμογή να ορίσει το μέγιστο χρονικό διάστημα αναμονής της πρότασης για τον αποκλεισμό του πόρου. Όταν ο χρόνος αναμονής της δήλωσης είναι μεγαλύτερος από τη ρύθμιση LOCK_TIMEOUT, το σύστημα ακυρώνει αυτόματα τη δήλωση αποκλεισμού και επιστρέφει στην εφαρμογή ένα μήνυμα σφάλματος 1222 ότι έχει ξεπεραστεί η περίοδος χρονικού ορίου του αιτήματος κλειδώματος

παράδειγμα
Στο παρακάτω παράδειγμα, η περίοδος χρονικού ορίου κλειδώματος ορίζεται σε 1.800 χιλιοστά του δευτερολέπτου.
ΣΕΤ LOCK_TIMEOUT1800

3) Ορίστε το επίπεδο απομόνωσης συναλλαγής.

4) Χρησιμοποιήστε υποδείξεις κλειδώματος σε επίπεδο πίνακα για δηλώσεις SELECT, INSERT, UPDATE και DELETE.

5) Διαμορφώστε την ευαισθησία κλειδώματος του ευρετηρίου
Μπορείτε να χρησιμοποιήσετε sp_indexoption αποθηκευμένες διαδικασίες του συστήματος για να ορίσετε την ευαισθησία κλειδώματος για ευρετηρίαση

6. Δείτε τις πληροφορίες της κλειδαριάς

1 Εκτελέστε το EXEC SP_LOCK αναφέρετε πληροφορίες σχετικά με την κλειδαριά
2 Πατήστε Ctrl + 2 στον αναλυτή ερωτημάτων για να δείτε τις πληροφορίες της κλειδαριάς

7. Προφυλάξεις κατά τη χρήση

Πώς να αποφύγετε τα αδιέξοδα
1. Όταν χρησιμοποιείτε συναλλαγές, προσπαθήστε να συντομεύσετε τη λογική διαδικασία επεξεργασίας των συναλλαγών και να υποβάλετε ή να επαναφέρετε τις συναλλαγές νωρίς.
2 Ρυθμίστε την παράμετρο χρονικού ορίου αδιεξόδου σε ένα εύλογο εύρος, όπως: 3 λεπτά - 10 λεπτά. Μετά από λίγο, η λειτουργία θα εγκαταλειφθεί αυτόματα για να αποφευχθεί η διακοπή της διαδικασίας.
3. Βελτιστοποιήστε το πρόγραμμα, ελέγξτε και αποφύγετε το φαινόμενο του αδιεξόδου.
4. Δοκιμάστε προσεκτικά όλα τα σενάρια και τα SP πριν από την ακριβή έκδοση.
5 Όλοι οι SP πρέπει να έχουν χειρισμό σφαλμάτων (μέσω @error)
6 Μην τροποποιείτε το προεπιλεγμένο επίπεδο των συναλλαγών του SQL SERVER. Δεν συνιστάται αναγκαστικό κλείδωμα

Επίλυση του προβλήματος Τρόπος κλειδώματος μιας βάσης δεδομένων πίνακα γραμμών

8. Αρκετές ερωτήσεις σχετικά με τις κλειδαριές

1 Πώς να κλειδώσετε μια σειρά ενός πίνακα
ΟΡΙΣΜΌΣ ΕΠΙΠΈΔΟΥ ΑΠΟΜΌΝΩΣΗΣ ΣΥΝΑΛΛΑΓΏΝ READUNCOMMITTED
SELECT *FROM table ROWLOCKWHERE id = 1

2 Κλείδωμα πίνακα στη βάση δεδομένων
ΕΠΙΛΟΓΗ *ΑΠΟ τραπέζι ΜΕ( HOLDLOCK )

Δήλωση κλειδώματος:
sybase:
ενημέρωση συνόλου πίνακα col1 = col1 όπου1= 0 ;
MSSQL:
επιλέξτε col1από τον πίνακα (tablockx)όπου 1= 0 ;
oracle:
ΚΛΕΊΔΩΜΑ ΤΡΑΠΕΖΙΟΎ ΤΡΑΠΕΖΙΟΎ ΣΕ ΑΠΟΚΛΕΙΣΤΙΚΉ ΛΕΙΤΟΥΡΓΊΑ.
Αφού κλειδωθεί η κλειδαριά, κανείς άλλος δεν μπορεί να τη χειριστεί μέχρι να την ξεκλειδώσει ο κλειδωμένος χρήστης και να ξεκλειδωθεί με δέσμευση ή επαναφορά

Μερικά παραδείγματα σάς βοηθούν να εμβαθύνετε την εντύπωσή σας
Πίνακας σετ1 (A,B,C)
Α Β Γ
Α1 Β1 Γ1
Α2 Β2 Γ2
Α3 Β3 Γ3

1) Αποκλειστική κλειδαριά
Δημιουργία δύο νέων συνδέσεων
Εκτελέστε την ακόλουθη πρόταση στην πρώτη σύνδεση
έναρξη tran
Ενημέρωση πίνακα 1
σύνολο Α= ' αα '
όπου Β= ' β2 '
Αναμονή για καθυστέρηση' 00:00:30' --Αναμονή 30 δευτερόλεπτα
commit tran
Εκτελέστε την ακόλουθη πρόταση στη δεύτερη σύνδεση
έναρξη tran
Επιλέξτε *από τον Πίνακα 1
όπου Β= ' β2 '
commit tran

Εάν οι δύο παραπάνω προτάσεις εκτελούνται ταυτόχρονα, το ερώτημα επιλογής πρέπει να περιμένει να εκτελεστεί η ενημέρωση, δηλαδή να περιμένει 30 δευτερόλεπτα

2) Κοινόχρηστη κλειδαριά
Εκτελέστε την ακόλουθη πρόταση στην πρώτη σύνδεση
έναρξη tran
select *from table1 holdlock - Το κλείδωμα κράτησης προστίθεται τεχνητά στην κλειδαριά
όπου Β= ' β2 '
Αναμονή για καθυστέρηση' 00:00:30' --Αναμονή 30 δευτερόλεπτα
commit tran

Εκτελέστε την ακόλουθη πρόταση στη δεύτερη σύνδεση
έναρξη tran
επιλέξτε A,C από τον πίνακα 1
όπου Β= ' β2 '
Ενημέρωση πίνακα 1
σύνολο Α= ' αα '
όπου Β= ' β2 '
commit tran

Εάν οι δύο παραπάνω προτάσεις εκτελούνται ταυτόχρονα, το ερώτημα επιλογής στη δεύτερη σύνδεση μπορεί να εκτελεστεί
Η ενημέρωση πρέπει να περιμένει την πρώτη συναλλαγή για να απελευθερώσει το κοινόχρηστο κλείδωμα και να το μετατρέψει σε αποκλειστικό κλείδωμα για να μπορέσει να εκτελεστεί, δηλαδή να περιμένει 30 δευτερόλεπτα

3) Αδιέξοδο
Προστέθηκε πίνακας2(Δ,Ε)
Δ Ε
Δ1 Ε1
Δ2 Ε2
Εκτελέστε την ακόλουθη πρόταση στην πρώτη σύνδεση
έναρξη tran
Ενημέρωση πίνακα 1
σύνολο Α= ' αα '
όπου Β= ' β2 '
Αναμονή για καθυστέρηση' 00:00:30'
Ενημέρωση πίνακα2
σύνολο D= ' d5 '
όπου E= ' e1 '
commit tran

Εκτελέστε την ακόλουθη πρόταση στη δεύτερη σύνδεση
έναρξη tran
Ενημέρωση πίνακα2
σύνολο D= ' d5 '
όπου E= ' e1 '
Αναμονή για καθυστέρηση' 00:00:10'
Ενημέρωση πίνακα 1
σύνολο Α= ' αα '
όπου Β= ' β2 '
commit tran

Ταυτόχρονα, το σύστημα εντοπίζει το αδιέξοδο και ματαιώνει τη διαδικασία

Για να προσθέσετε:
Υποδείξεις κλειδώματος σε επίπεδο πίνακα που υποστηρίζονται από τον SQL Server 2000

Το HOLDLOCK διατηρεί το κοινόχρηστο κλείδωμα μέχρι να ολοκληρωθεί ολόκληρη η συναλλαγή και θα πρέπει να αποδεσμευτεί μόλις δεν χρειάζεται το κλειδωμένο αντικείμενο, ίσο με το επίπεδο απομόνωσης συναλλαγής SERIALIZABLE
Η δήλωση NOLOCK εκτελείται χωρίς την έκδοση κοινόχρηστου κλειδώματος, επιτρέποντας βρώμικες αναγνώσεις, το οποίο ισούται με το επίπεδο απομόνωσης συναλλαγής READ UNCOMMITTED
Το PAGLOCK χρησιμοποιεί πολλαπλά κλειδώματα σελίδων όπου χρησιμοποιείται ένα κλείδωμα πίνακα
Το READPAST επιτρέπει στον sql server να παραλείπει τυχόν κλειδωμένες γραμμές και να εκτελεί συναλλαγές και για τα επίπεδα απομόνωσης συναλλαγών READ UNMITTED, να παραλείπει μόνο τα κλειδώματα RID και όχι τα κλειδώματα σελίδας, ζώνης και πίνακα
Το ROWLOCK επιβάλλει τη χρήση κλειδαριών σειρών
Το TABLOCKX επιβάλλει τη χρήση ενός αποκλειστικού κλειδώματος σε επίπεδο πίνακα, το οποίο εμποδίζει οποιαδήποτε άλλη συναλλαγή να χρησιμοποιήσει τον πίνακα κατά τη διάρκεια της συναλλαγής
Το UPLOCK επιβάλλει τη χρήση ενημερώσεων κατά την ανάγνωση ενός πίνακα χωρίς κοινόχρηστο κλείδωμα

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

Δύο διαδικασίες για το χειρισμό κλειδαριών εφαρμογών
sp_getapplock Κλείδωμα πόρων εφαρμογής
sp_releaseapplock Ξεκλειδώστε τους πόρους της εφαρμογής

Σημείωση: Η διαφορά μεταξύ του κλειδώματος ενός πίνακα σε μια βάση δεδομένων

SELECT *FROM table WITH( HOLDLOCK ) Άλλες συναλλαγές μπορούν να διαβάσουν τον πίνακα, αλλά δεν μπορούν να ενημερώσουν και να διαγράψουν
ΕΠΙΛΟΓΗ *ΑΠΟ πίνακα ΜΕ(TABLOCKX) Άλλες συναλλαγές δεν μπορούν να διαβάσουν, να ενημερώσουν και να διαγράψουν τον πίνακα





Προηγούμενος:Δεν υπήρχε τελικό σημείο ακρόασης στο http://localhost:111/xxx.svc αυτό το γ...
Επόμενος:Κλειδαριές SQL NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com