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

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

[Πηγή] ADO.NET Εκμάθηση (5) Εξηγήστε λεπτομερώς τη δεξαμενή σύνδεσης βάσης δεδομένων

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 17/9/2016 3:41:28 μ.μ. | | | |
Περίληψη
Σήμερα θα μιλήσω για τις ομάδες σύνδεσης βάσεων δεδομένων. Για να είμαι ειλικρινής, είπα ότι το αχλάδι πάπιας είναι πολύ μεγάλο. Επειδή οι ομάδες σύνδεσης είναι σχετικά δύσκολο να κατανοηθούν σε σύγκριση με άλλα κεφάλαια. Θέλω να σας το εξηγήσω με τις πιο δημοφιλείς προτάσεις, αλλά δεν είναι εύκολη υπόθεση. Ωστόσο, οι χώροι συγκέντρωσης σύνδεσης είναι επίσης ένα πολύ σημαντικό σημείο γνώσης, ειδικά κατά την ανάπτυξη προγραμμάτων πολλών χρηστών. Επομένως, δεν πρέπει μόνο να μιλήσω αλλά και να μιλήσω διεξοδικά. Μέσα από αυτό το άρθρο, θα κατανοήσετε τις βασικές αρχές της συγκέντρωσης συνδέσεων και πώς έχει ήδη αξιοποιηθεί για τη βελτίωση της απόδοσης της εφαρμογής σας.

Πίνακας περιεχομένων
Τι είναι η ομάδα σύνδεσης;
Πώς λειτουργεί ο χώρος συγκέντρωσης συνδέσεων
Ας μιλήσουμε για μερικές πολύ σημαντικές ιδιότητες των δεξαμενών σύνδεσης
Εξαιρέσεις χώρου συγκέντρωσης συνδέσεων και μέθοδοι χειρισμού
Ένας τρόπος παρακολούθησης της κατάστασης της σύνδεσής σας
Βασικές αρχές για την αποδοτική χρήση των χώρων συγκέντρωσης συνδέσεων
1. Τι είναι η ομάδα σύνδεσης;
      Στο προηγούμενο άρθρο, "ADO.NET πρέπει να γνωρίζετε (4) αντικείμενα σύνδεσης γεύσης", τόνισα ότι η δημιουργία μιας σύνδεσης βάσης δεδομένων είναι κάτι πολύ χρονοβόρο (χρονοβόρο) και εντατικό (απαιτητικό σε πόρους). Αυτό συμβαίνει επειδή η σύνδεση σε έναν διακομιστή βάσης δεδομένων περιλαμβάνει πολλές χρονοβόρες διαδικασίες: δημιουργία ενός φυσικού καναλιού (όπως μια υποδοχή ή μια επώνυμη διοχέτευση), πραγματοποίηση μιας αρχικής χειραψίας με τον διακομιστή, ανάλυση των πληροφοριών συμβολοσειράς σύνδεσης, έλεγχος ταυτότητας της σύνδεσης από τον διακομιστή, εκτέλεση ελέγχου για εγγραφή στην τρέχουσα συναλλαγή και ούτω καθεξής. Ανεξάρτητα από το γιατί υπάρχει ένας τέτοιος μηχανισμός, υπάρχει πάντα ένας λόγος ύπαρξης. Δεδομένου ότι η δημιουργία μιας νέας σύνδεσης είναι τόσο επώδυνη, γιατί να μην επαναχρησιμοποιήσετε μια υπάρχουσα;

      Στην πραγματικότητα, ADO.NET μας δίνει ήδη μια μέθοδο βελτιστοποίησης που ονομάζεται συγκέντρωση συνδέσεων. Ένας χώρος συγκέντρωσης συνδέσεων είναι ένα τέτοιο κοντέινερ: φιλοξενεί έναν ορισμένο αριθμό φυσικών συνδέσεων με τον διακομιστή βάσης δεδομένων. Επομένως, όταν χρειάζεται να συνδεθούμε στον διακομιστή βάσης δεδομένων, χρειάζεται μόνο να βγάλουμε μια δωρεάν σύνδεση από το pool (container) αντί να δημιουργήσουμε μια νέα. Αυτό μειώνει σημαντικά την επιβάρυνση της σύνδεσης με τη βάση δεδομένων, γεγονός που βελτιώνει την απόδοση της εφαρμογής.

PS:本来做了2张图片来描述连接池的,无奈公司装有监控软件,不能上传,所以只能等下次有时间上传了。



2. Πώς λειτουργεί η πισίνα σύνδεσης
2.1 Δημιουργήστε μια ομάδα συνδέσεων
      Θα πρέπει να σημειωθεί ότι οι ομάδες σύνδεσης είναι ευαίσθητες στην κατηγορία. Δηλαδή, ο ίδιος τομέας εφαρμογής μπορεί να έχει πολλούς διαφορετικούς τύπους χώρων συγκέντρωσης σύνδεσης ταυτόχρονα. Λοιπόν, πώς αναγνωρίζονται οι ομάδες σύνδεσης; Αναλυτικά, διακρίνεται από την υπογραφή που σχηματίζει τη διαδικασία, τον τομέα της εφαρμογής, τη συμβολοσειρά σύνδεσης και την ταυτότητα των Windows (όταν χρησιμοποιείται ενσωματωμένη ασφάλεια). Ωστόσο, για τον ίδιο τομέα εφαρμογής, γενικά προσδιορίζεται μόνο από τη συμβολοσειρά σύνδεσης. Όταν ανοίγει μια σύνδεση, δημιουργείται ένας νέος χώρος συγκέντρωσης συνδέσεων εάν η υπογραφή τύπου της σύνδεσης λωρίδας δεν ταιριάζει με τον τύπο του υπάρχοντος χώρου συγκέντρωσης συνδέσεων. Διαφορετικά, δεν δημιουργείται νέος χώρος συγκέντρωσης συνδέσεων.

      Ένα τυπικό παράδειγμα δημιουργίας σύνδεσης:


Στην παραπάνω περίπτωση, δημιούργησα τρία αντικείμενα SqlConnection, αλλά χρειάζονταν μόνο δύο ομάδες σύνδεσης για τη διαχείρισή τους. Προσεκτικοί φίλοι, μπορεί να έχετε ήδη διαπιστώσει ότι το conn1 και το conn3 έχουν την ίδια συμβολοσειρά σύνδεσης, επομένως μπορούν να μοιράζονται ένα χώρο συγκέντρωσης συνδέσεων, ενώ το conn2 και το conn1 διαφέρουν από το conn3, επομένως πρέπει να δημιουργήσετε ένα νέο χώρο συγκέντρωσης συνδέσεων.

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

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

2.4 Ανακύκλωση χρησιμοποιημένων συνδέσεων
      Όταν ολοκληρώσουμε τη χρήση μιας σύνδεσης, θα πρέπει να την κλείσουμε ή να την απελευθερώσουμε εγκαίρως, ώστε η σύνδεση να επιστραφεί στην πισίνα για επαναχρησιμοποίηση. Μπορούμε να κλείσουμε τη σύνδεση μέσω της μεθόδου Κλείσιμο ή Απόρριψη του αντικειμένου Σύνδεση ή μέσω της δήλωσης χρήσης στη C#.



3. Πείτε μου για μερικά πολύ σημαντικά χαρακτηριστικά
Η συμπεριφορά του χώρου συγκέντρωσης συνδέσεων μπορεί να ελεγχθεί από συμβολοσειρές σύνδεσης και περιλαμβάνει κυρίως τέσσερις σημαντικές ιδιότητες:

Χρονικό όριο σύνδεσης: Ο χρόνος αναμονής του αιτήματος σύνδεσης για ένα χρονικό όριο. Η προεπιλογή είναι 15 δευτερόλεπτα σε δευτερόλεπτα.
Μέγιστο μέγεθος πισίνας: Ο μέγιστος αριθμός συνδέσεων στο χώρο συγκέντρωσης συνδέσεων. Η προεπιλογή είναι 100.
Ελάχιστο μέγεθος πισίνας: Ο ελάχιστος αριθμός συνδέσεων στο χώρο συγκέντρωσης συνδέσεων. Η προεπιλογή είναι 0.
Pooling: 是否启用连接池。ADO.NET默认是启用连接池的,因此,你需要手动设置Pooling=false来禁用连接池。
Ας πάρουμε ένα παράδειγμα για να κατανοήσουμε τις ιδιότητες του χώρου συγκέντρωσης συνδέσεων. Ο κωδικός έχει ως εξής:

4. Εξαιρέσεις πισίνας σύνδεσης και μέθοδοι χειρισμού
      Όταν ένας χρήστης ανοίγει μια σύνδεση χωρίς να την κλείσει σωστά ή έγκαιρα, συχνά προκαλεί το πρόβλημα "διαρροής σύνδεσης". Η σύνδεση που διέρρευσε παραμένει ανοιχτή μέχρι να κληθεί η μέθοδος απόρριψης και ο συλλέκτης απορριμμάτων (GC) κλείσει και απελευθερώσει τη σύνδεση. Σε αντίθεση με το ADO, ADO.NET πρέπει να κλείσετε με μη αυτόματο τρόπο τις χρησιμοποιημένες συνδέσεις. Ένας σημαντικός μύθος είναι ότι η σύνδεση κλείνει όταν το συνδεδεμένο αντικείμενο βρίσκεται εκτός του τοπικού πεδίου. Στην πραγματικότητα, όταν είναι εκτός πεδίου εφαρμογής, απελευθερώνεται μόνο το αντικείμενο σύνδεσης και όχι ο πόρος σύνδεσης. Λοιπόν, ας ρίξουμε μια ματιά σε ένα παράδειγμα πρώτα.

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


Από τα παραπάνω αποτελέσματα, είναι σαφές ότι υπάρχει μια ανωμαλία στη σύνδεση. Γνωρίζουμε ήδη ότι ο μέγιστος αριθμός συνδέσεων στο χώρο συγκέντρωσης συνδέσεων είναι 5 και όταν δημιουργηθεί η 6η σύνδεση, είναι απαραίτητο να περιμένετε τη σύνδεση μέχρι να λήξει, επειδή ο μέγιστος αριθμός συνδέσεων στο χώρο συγκέντρωσης συνδέσεων έχει φτάσει στον μέγιστο αριθμό και δεν υπάρχουν δωρεάν συνδέσεις. Όταν ξεπεραστεί ο χρόνος χρονικού ορίου, θα εμφανιστεί η εξαίρεση σύνδεσης που αναφέρεται παραπάνω. Επομένως, πρέπει να τονίσω για άλλη μια φορά ότι οι χρησιμοποιημένες συνδέσεις πρέπει να κλείνουν σωστά και να απελευθερώνονται το συντομότερο δυνατό.



5. Μέθοδοι παρακολούθησης της κατάστασης του SQL Server συνδέσεις
(1) Μέσω της παρακολούθησης δραστηριότητας
Βήμα 1: Ανοίξτε το MSSMS Manager και κάντε κλικ στο εικονίδιο "Activity Monitor".



Βήμα 2: Στην προβολή Open Activity Monitor, κάντε κλικ στην καρτέλα Διεργασίες.



Βήμα 3: Εκτελέστε το παράδειγμα στο #4 Εξαιρέσεις πισίνας σύνδεσης και μέθοδοι χειρισμού, μπορείτε να δείτε τις 5 ανοιχτές συνδέσεις όπως φαίνεται στο παρακάτω σχήμα.



(2) Χρησιμοποιήστε δηλώσεις T-SQL
Ομοίως, εκτελώντας την αποθηκευμένη διαδικασία του συστήματος sp_who μπορούμε επίσης να παρακολουθούμε την κατάσταση της σύνδεσης.






6. Βασικές αρχές για την αποδοτική χρήση των χώρων συγκέντρωσης σύνδεσης
      Η καλή χρήση του χώρου συγκέντρωσης συνδέσεων θα βελτιώσει σημαντικά την απόδοση της εφαρμογής σας. Αντίθετα, αν χρησιμοποιηθεί λανθασμένα, δεν θα βλάψει. Γενικά, πρέπει να τηρούνται οι ακόλουθες αρχές:

Ζητήστε σύνδεση την τελευταία στιγμή, απελευθερώστε τη σύνδεση το συντομότερο.
Όταν κλείσετε τη σύνδεση, κλείστε πρώτα τη σχετική συναλλαγή που ορίζεται από τον χρήστη.
Διασφαλίστε και διατηρήστε τουλάχιστον μία ανοιχτή σύνδεση στο χώρο συγκέντρωσης συνδέσεων.
Προσπαθήστε να αποφύγετε τα σκουπίδια της πισίνας. Αυτό περιλαμβάνει κυρίως τον κατακερματισμό του χώρου συγκέντρωσης που δημιουργείται από την ενσωματωμένη ασφάλεια και τον κατακερματισμό του χώρου συγκέντρωσης που δημιουργείται από τη χρήση πολλών βάσεων δεδομένων.
Συμβουλή: Ο κατακερματισμός του χώρου συγκέντρωσης είναι ένα κοινό πρόβλημα σε πολλές εφαρμογές web και οι εφαρμογές ενδέχεται να δημιουργήσουν μεγάλο αριθμό χώρων συγκέντρωσης που δεν απελευθερώνονται μέχρι να τερματιστεί η διαδικασία. Με αυτόν τον τρόπο θα ανοίξει μεγάλος αριθμός συνδέσεων, καταλαμβάνοντας πολλή μνήμη, με αποτέλεσμα μειωμένη απόδοση.





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

Mail To:help@itsvse.com