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

Άποψη: 2617|Απάντηση: 2

[Συμβουλές] Ο SQL Server χρησιμοποιεί εκτεταμένα συμβάντα για την παρακολούθηση ζητημάτων αδιεξόδου

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2/3/2024 7:13:04 μ.μ. | | | |
απαιτήσεις: Υπάρχουν πολλοί λόγοι για τους οποίους η βάση δεδομένων του SQL Server προκαλεί αδιέξοδα, στην παραγωγή, όλοι μπορεί να αντιμετωπίσουν προβλήματα αδιεξόδου και η συγκεκριμένη αιτία μπορεί να μην εντοπίζεται μόνο με βάση τις μη φυσιολογικές πληροφορίες των αδιεξόδων εφαρμογών, επομένως είναι απαραίτητο να χρησιμοποιείτε συμβάντα επέκτασης στον SQL Server για την παρακολούθηση προβλημάτων αδιεξόδου και την καταγραφή των συγκεκριμένων λεπτομερειών για το πότε συμβαίνουν αδιέξοδα.

Εκτεταμένη επισκόπηση συμβάντων

Το Extended Events είναι μια ελαφριά λειτουργία παρακολούθησης απόδοσης που επιτρέπει στους χρήστες να συλλέγουν τα δεδομένα που χρειάζονται για την παρακολούθηση και την επίλυση προβλημάτων. Αυτή η δυνατότητα σάς επιτρέπει να προβάλλετε λεπτομέρειες σχετικά με τις εσωτερικές λειτουργίες της μηχανής δεδομένων για σκοπούς παρακολούθησης απόδοσης και επίλυσης προβλημάτων.

Με την αρχιτεκτονική εκτεταμένων συμβάντων (XEvents), οι χρήστες μπορούν να χρησιμοποιούν όσα δεδομένα χρειάζονται για την παρακολούθηση, τον εντοπισμό ή την αντιμετώπιση προβλημάτων των επιδόσεων του SQL Server, της βάσης δεδομένων SQL Azure και της διαχειριζόμενης παρουσίας SQL Azure. Τα εκτεταμένα συμβάντα είναι εξαιρετικά διαμορφώσιμα, ελαφριά και επεκτάσιμα.

Αναφορά:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.


Αιτίες αδιεξόδων

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

  • Κλειδαριές: Οι κλειδαριές που περιμένουν να ανακτήσουν πόρους όπως αντικείμενα, σελίδες, σειρές, μεταδεδομένα και εφαρμογές μπορεί να προκαλέσουν αδιέξοδα. Για παράδειγμα, η συναλλαγή T1 έχει ένα κοινόχρηστο κλείδωμα (κλείδωμα S) στη γραμμή r1 και περιμένει να λάβει ένα αποκλειστικό κλείδωμα (κλείδωμα X) για τη γραμμή r2. Η συναλλαγή T2 έχει μια κοινή κλειδαριά (S lock) στη σειρά r2 και περιμένει να λάβει μια αποκλειστική κλειδαριά (X lock) για τη σειρά r1. Αυτό έχει ως αποτέλεσμα έναν βρόχο κλειδώματος όπου τόσο το T1 όσο και το T2 περιμένουν το ένα το άλλο να απελευθερώσει τον κλειδωμένο πόρο.
  • Νήματα εργασίας: Οι εργασίες που βρίσκονται σε ουρά για διαθέσιμα νήματα εργασίας μπορεί να προκαλέσουν αδιέξοδα. Εάν μια εργασία στην ουρά έχει έναν πόρο που αποκλείει όλα τα νήματα εργασίας, θα οδηγήσει σε αδιέξοδο. Για παράδειγμα, αφού η περίοδος λειτουργίας S1 ξεκινήσει μια συναλλαγή και αποκτήσει ένα κοινόχρηστο κλείδωμα (S-lock) για τη γραμμή r1, μεταβαίνει σε κατάσταση αναστολής λειτουργίας. Μια ενεργή συνεδρία που εκτελείται σε όλα τα διαθέσιμα νήματα εργασίας προσπαθεί να αποκτήσει ένα αποκλειστικό κλείδωμα (X-lock) για τη γραμμή r1. Επειδή η περίοδος λειτουργίας S1 δεν μπορεί να λάβει ένα νήμα εργασίας, δεν μπορεί να πραγματοποιήσει τη συναλλαγή και να απελευθερώσει το κλείδωμα στη γραμμή r1. Αυτό θα οδηγήσει σε αδιέξοδο.
  • Μνήμη: Ένα αδιέξοδο μπορεί να προκύψει όταν μια ταυτόχρονη αίτηση περιμένει να αποκτήσει μνήμη και η τρέχουσα διαθέσιμη μνήμη δεν επαρκεί για τις ανάγκες της. Για παράδειγμα, δύο ταυτόχρονα ερωτήματα (Q1 και Q2) εκτελούνται ως συναρτήσεις που ορίζονται από το χρήστη, αποκτώντας 10 MB και 20 MB μνήμης, αντίστοιχα. Εάν κάθε ερώτημα απαιτεί 30 MB και η συνολική διαθέσιμη μνήμη είναι 20 MB, το Q1 και το Q2 πρέπει να περιμένουν το ένα το άλλο για να ελευθερώσουν μνήμη, κάτι που θα οδηγήσει σε αδιέξοδο.
  • Παράλληλοι πόροι που σχετίζονται με ερωτήματα και εκτέλεση: Οι συντονιστές επεξεργασίας, οι γεννήτριες ή τα νήματα καταναλωτών που συνήθως σχετίζονται με θύρες μεταγωγής μπορούν να αποκλείσουν ο ένας τον άλλον όταν περιέχουν τουλάχιστον μία διεργασία που δεν αποτελεί μέρος ενός παράλληλου ερωτήματος, με αποτέλεσμα αδιέξοδα. Επιπλέον, όταν ξεκινά η εκτέλεση ενός παράλληλου ερωτήματος, ο SQL Server καθορίζει τον βαθμό παραλληλισμού ή τον αριθμό των νημάτων εργασίας με βάση τον τρέχοντα φόρτο εργασίας. Ένα αδιέξοδο μπορεί να προκύψει εάν υπάρχει μια απροσδόκητη αλλαγή στο φόρτο εργασίας του συστήματος, για παράδειγμα, όταν ένα νέο ερώτημα αρχίζει να εκτελείται στο διακομιστή ή όταν το σύστημα εξαντλείται από νήματα εργασίας.
  • Πόροι συνόλου αποτελεσμάτων πολλαπλών δραστηριοτήτων (MARS): Αυτοί οι πόροι χρησιμοποιούνται για τον έλεγχο της διασταυρούμενης εκτέλεσης πολλαπλών αιτήσεων δραστηριότητας στο πλαίσιο του MARS.


Αναφορά:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Εκτεταμένη καταγραφή συμβάντων αδιεξόδου

Δημιουργήστε ένα συμβάν επέκτασης για να καταγράψετε τις πληροφορίες αδιεξόδου με την ακόλουθη εντολή:


Έναρξη συνεδρίας συμβάντος αδιεξόδου

Διακοπή συνεδρίας συμβάντος

Διαγραφή περιόδου λειτουργίας συμβάντος

Υποβολή ερωτήματος σε δεδομένα περιόδου σύνδεσης συμβάντος


Αδιέξοδα δοκιμών

Δημιουργήστε έναν νέο πίνακα Tab1 για δοκιμή και δημιουργήστε δύο νέα παράθυρα εκτέλεσης και εκτελέστε τις ακόλουθες εντολές αντίστοιχα:

Το αδιέξοδο προκύπτει ως εξής:

Μια συναλλαγή (αναγνωριστικό διεργασίας 68) με μια άλλη διεργασία βρίσκεται σε αδιέξοδο σε έναν κλειδωμένο πόρο και έχει επιλεγεί ως θύμα αδιεξόδου. Επαναλάβετε τη συναλλαγή.
Η συναλλαγή (Αναγνωριστικό διαδικασίας 68) ήταν αδιέξοδη σε πόρους κλειδώματος με άλλη διεργασία και έχει επιλεγεί ως θύμα αδιεξόδου. Εκτελέστε ξανά τη συναλλαγή.


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



Τα αναλυτικά δεδομένα XML είναι τα εξής:


(Τέλος)





Προηγούμενος:Βελτιστοποίηση απόδοσης .NET/C# με χρήση παράλληλου ερωτήματος PLINQ
Επόμενος:Εκτέλεση κώδικα στο Visual Studio χρησιμοποιώντας το διαδραστικό παράθυρο C#
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2/3/2024 7:14:35 μ.μ. |
Επεκτείνετε την προεπιλεγμένη διαδρομή του αρχείου συμβάντος:

C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\deadlock_monitor_0_133538477770860000.xel
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 2/3/2024 7:16:54 μ.μ. |
Δημιουργήστε έναν νέο πίνακα tab1 για να δοκιμάσετε τη δέσμη ενεργειών SQL

Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com