Προγραμματισμός

Πώς να παρακολουθείτε την απόδοση της βάσης δεδομένων MongoDB

Ο Rick Golba είναι μηχανικός λύσεων στην Percona.

Το MongoDB είναι μια αγαπημένη βάση δεδομένων για προγραμματιστές. Ως επιλογή βάσης δεδομένων NoSQL, παρέχει στους προγραμματιστές ένα περιβάλλον βάσης δεδομένων που έχει ευέλικτο σχεδιασμό σχήματος, αυτοματοποιημένο failover και μια γλώσσα εισαγωγής γνωστή για προγραμματιστές, δηλαδή το JSON.

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

Το MongoDB είναι μια βάση δεδομένων προσανατολισμένη στα έγγραφα. Πρόκειται για μια βάση δεδομένων πολλαπλών πλατφορμών που κρατά δεδομένα σε έγγραφα σε μορφή JSON με δυαδική κωδικοποίηση (γνωστή ως δυαδική JSON ή BSON). Η δυαδική μορφή αυξάνει τόσο την ταχύτητα όσο και την ευελιξία του JSON και προσθέτει περισσότερους τύπους δεδομένων.

Οι μηχανισμοί αναπαραγωγής του MongoDB συμβάλλουν στην παροχή υψηλής διαθεσιμότητας και ο μηχανισμός θραύσης επιτρέπει οριζόντια επεκτασιμότητα. Πολλές κορυφαίες εταιρείες Διαδικτύου όπως το Facebook και το eBay χρησιμοποιούν το MongoDB στο περιβάλλον της βάσης δεδομένων τους.

Γιατί να παρακολουθείτε το MongoDB;

Το περιβάλλον βάσης δεδομένων MongoDB μπορεί να είναι απλό ή περίπλοκο, τοπικό ή διανεμημένο, εντός του χώρου ή στο cloud. Εάν θέλετε να διασφαλίσετε μια αποτελεσματική και διαθέσιμη βάση δεδομένων, θα πρέπει να παρακολουθείτε και να παρακολουθείτε αναλυτικά στοιχεία για να:

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

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

Τι πρέπει να παρακολουθούμε;

Υπάρχουν πολλά πράγματα που μπορείτε να παρακολουθήσετε σε ένα περιβάλλον MongoDB, αλλά μερικοί βασικοί τομείς θα σας ενημερώσουν γρήγορα αν κάτι δεν πάει καλά. Θα πρέπει να αναλύετε τις ακόλουθες μετρήσεις:

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

Ας δούμε μερικές από τις λεπτομέρειες.

Καθυστέρηση αναπαραγωγής

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

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

Σε ένα ομαλό σύνολο πρωτογενών και δευτερευόντων κόμβων (αναφέρεται ως «σύνολο αντιγράφων»), οι δευτερεύοντες αντιγράφουν γρήγορα τις αλλαγές στο πρωτεύον, επαναλαμβάνοντας κάθε ομάδα λειτουργιών από το oplog όσο πιο γρήγορα συμβαίνουν (ή όσο το δυνατόν πιο κοντά) . Ο στόχος είναι να διατηρηθεί η καθυστέρηση αναπαραγωγής κοντά στο μηδέν. Τα δεδομένα που διαβάζονται από οποιονδήποτε κόμβο πρέπει να είναι συνεπή. Εάν ο εκλεγμένος πρωτεύων κόμβος πέσει ή καθίσταται άλλως μη διαθέσιμος, ένας δευτερεύων μπορεί να αναλάβει τον κύριο ρόλο χωρίς να επηρεάζει την ακρίβεια των δεδομένων στους πελάτες. Τα αναπαραγόμενα δεδομένα θα πρέπει να είναι συνεπή με τα πρωτεύοντα δεδομένα πριν από την κατάργηση του πρωτεύοντος.

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

Υπάρχει μόνο ένας τρόπος για να αναλύσετε αυτήν τη μέτρηση: παρακολουθήστε την! Πρόκειται για μια μέτρηση που πρέπει να παρακολουθείται 24x7x365, οπότε γίνεται καλύτερα χρησιμοποιώντας αυτοματοποίηση και ενεργοποίηση προειδοποιήσεων για ειδοποίηση DBA ή διαχειριστών συστήματος απόκρισης μόλις φτάσει ένα ανεπιθύμητο όριο. Η διαμόρφωση αυτού του ορίου εξαρτάται από την ανοχή της εφαρμογής σας για καθυστέρηση αναπαραγωγής. Για να προσδιορίσετε το κατάλληλο όριο, χρησιμοποιήστε ένα εργαλείο που γράφει καθυστέρηση με την πάροδο του χρόνου, όπως Compass, MongoBooster, Studio 3T ή Percona Παρακολούθηση και διαχείριση (PMM).

Κατάσταση ρεπλίκας

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

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

Κατάσταση κλειδώματος

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

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

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

Χρήση δίσκου

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

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

Χρήση μνήμης

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

Ο τρόπος με τον οποίο η βάση δεδομένων σας χρησιμοποιεί τη μνήμη μπορεί να είναι κάπως ασαφής. Ένα μεγάλο μέρος της μνήμης που χρησιμοποιεί ένας διακομιστής είναι για το buffer pool (δεδομένα). Μπορεί να είναι δύσκολο να μάθετε ποια βάση δεδομένων χρησιμοποιεί το μεγαλύτερο μέρος της μνήμης buffer pool, και ακόμη πιο δύσκολο να βρείτε ποιες συλλογές ή έγγραφα βρίσκονται στην μνήμη buffer pool. Η γνώση αυτών των πληροφοριών είναι χρήσιμη κατά την εξισορρόπηση της βάσης δεδομένων σας σε πολλούς διακομιστές (μέσω θραύσης) ή στον εντοπισμό δεδομένων που είναι βέλτιστα για ενοποίηση σε μία παρουσία διακομιστή.

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

Αριθμός συνδέσεων

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

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

Εργαλεία που παρέχονται με το MongoDB

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

mongostat

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

ο mongostat Το βοηθητικό πρόγραμμα σάς παρέχει μια επισκόπηση της παρουσίας διακομιστή MongoDB. Εάν εκτελείτε μια μοναδική παρουσία "mongod", θα σας δείξει τα στατιστικά στοιχεία για τη συγκεκριμένη παρουσία. Εάν εκτελείτε ένα περιβάλλον συμπλέγματος MongoDB, τότε επιστρέφει τα στατιστικά στοιχεία για την παρουσία "mongos". mongostat χρησιμοποιείται καλύτερα για την παρακολούθηση μιας μεμονωμένης παρουσίας για ένα συγκεκριμένο συμβάν (για παράδειγμα, τι συμβαίνει όταν εισέρχεται ένα συγκεκριμένο αίτημα εφαρμογής). Μπορείτε να χρησιμοποιήσετε αυτήν την εντολή για να παρακολουθείτε βασικά στατιστικά στοιχεία διακομιστή:

  • ΕΠΕΞΕΡΓΑΣΤΗΣ
  • Μνήμη
  • Δίσκος IO
  • Κυκλοφορία δικτύου

Δείτε την τεκμηρίωση MongoDB στο mongostat για λεπτομέρειες σχετικά με τη χρήση.

μογγότοπος

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

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

Όλες οι μετρήσεις ανά δευτερόλεπτο σχετίζονται με τη διαμόρφωση του διακομιστή σας, καθώς και με την αρχιτεκτονική συμπλέγματος. Για μεμονωμένες περιπτώσεις που εκτελούνται τοπικά και χρησιμοποιώντας την προεπιλεγμένη θύρα, το μόνο που χρειάζεται να κάνετε είναι να εισαγάγετε το μογγότοπος εντολή. Εάν εκτελείτε σε περιβάλλον συμπλέγματος με πολλές εμφανίσεις mongod και mongos, θα πρέπει να δώσετε την εντολή hostname και number port.

Δείτε την τεκμηρίωση MongoDB στο μογγότοπος για λεπτομέρειες σχετικά με τη χρήση.

rs.status ()

Αυτή η εντολή παρέχει την κατάσταση του συνόλου αντιγράφων.

Μπορείτε να χρησιμοποιήσετε το rs.status () εντολή για να λάβετε πληροφορίες σχετικά με ένα σετ ρεπλίκα που εκτελείται. Αυτή η εντολή μπορεί να εκτελεστεί από την κονσόλα οποιουδήποτε μέλους οποιουδήποτε συνόλου και θα επιστρέψει την κατάσταση του συνόλου αντιγράφων όπως φαίνεται από το εν λόγω μέλος.

Δείτε την τεκμηρίωση MongoDB στο rs.status () για λεπτομέρειες σχετικά με τη χρήση.