Ανοίξτε τη διαχείριση εργασιών διακομιστή και διαπιστώστε ότι η διαδικασία της CPU ήταν πάντα 99% και η προβολή καταλαμβάνεται από τη διαδικασία mysql, η οποία ήταν υψηλή.
Η έξοδος της εντολής processlist δείχνει ποια νήματα εκτελούνται και μπορείτε να ελέγξετε την τρέχουσα κατάσταση εκτέλεσης της βάσης δεδομένων.
1. Μεταβείτε στον κατάλογο mysql/bin και εισαγάγετε τη λίστα διεργασιών mysqladmin. 2. Ξεκινήστε τη mysql και εισαγάγετε την εμφάνιση λίστας διεργασιών. Εάν έχετε άδεια SUPER, μπορείτε να δείτε όλα τα νήματα, διαφορετικά, μπορείτε να δείτε μόνο τα νήματα του λογαριασμού σας.
Το νόημα και ο σκοπός κάθε στήλης
id: Ένα αναγνωριστικό user: εμφανίζει τον τρέχοντα χρήστη, εάν δεν είναι root, αυτή η εντολή θα εμφανίζει μόνο δηλώσεις SQL εντός των δικαιωμάτων σας. host: δείχνει από ποια IP προέρχεται αυτή η δήλωση και από ποια θύρα db: Εμφανίζει τη βάση δεδομένων στην οποία είναι συνδεδεμένη η διεργασία. command: Εμφανίζει τις εντολές που εκτελούνται από την τρέχουσα σύνδεση, συνήθως αναστολή λειτουργίας, ερώτημα και σύνδεση. time: Ο χρόνος που διαρκεί αυτή η κατάσταση, σε δευτερόλεπτα. κατάσταση: Εμφανίζει την κατάσταση της δήλωσης sql που χρησιμοποιεί την τρέχουσα σύνδεση, αλλά μόνο μια συγκεκριμένη κατάσταση στην εκτέλεση της δήλωσης, μια δήλωση sql, έχει ερωτηθεί, για παράδειγμα, μπορεί να χρειαστεί να περάσει από την αντιγραφή στον πίνακα tmp, το αποτέλεσμα ταξινόμησης, την αποστολή δεδομένων κ.λπ info: Εμφανίζει αυτήν τη δήλωση SQL, επειδή το μήκος είναι περιορισμένο, επομένως η μεγάλη δήλωση SQL δεν εμφανίζεται πλήρως, αλλά είναι μια σημαντική βάση για να κρίνουμε τη δήλωση προβλήματος.
Διαπιστώθηκε ότι υπάρχουν δύο δηλώσεις ερωτήματος SQL που χρειάζονται τον μεγαλύτερο χρόνο και δεν έχουν εκτελεστεί για περισσότερο από 1000 δευτερόλεπτα και οι δηλώσεις SQL που αντιγράψαμε από το πεδίο πληροφοριών είναι ένα κοινό ερώτημα, ως εξής:
επιλέξτε cast(count(*) as SIGNED) ως col_0_0_ από το ratedpasse0_ 'RatedPassenger', 'BaseInfoCompany' baseinfoco1_, 'OrderMatch' ordermatch2_ όπου baseinfoco1_. CompanyId=ratedpasse0_. CompanyId και ordermatch2_. OrderId=ratedpasse0_. ΚωδΠαραγγελίας Σκοτώνουμε τη διαδικασία αυτών των δύο δηλώσεων ερωτήματος
Αφού περίμενα 10 δευτερόλεπτα, διαπίστωσα ότι η CPU είχε πέσει πολύ, αλλά ήταν ακόμα πολύ υψηλή και θα συνεχίσω να ρωτάω τον λόγο!
Για τη δήλωση κοινού ερωτήματος, προσθέστε ένα ευρετήριο στο συσχετισμένο πεδίο ή τροποποιήστε τον κώδικα ερωτήματος του προγράμματος. Δημιουργία πρότασης SQL ευρετηρίου
Τέλος
|