Το ερώτημα χρησιμοποιεί διαφορετικά σχέδια μαντείου. Κατανόηση των αποτελεσμάτων του Execute Explain Plan στο Oracle SQL Developer. Επισκόπηση σχεδίου εκτέλεσης

5 απαντήσεις

Η έξοδος EXPLAIN PLAN είναι έξοδος εντοπισμού σφαλμάτων από το Oracle Query Optimizer. Το COST είναι το τελικό αποτέλεσμα ενός εργαλείου βελτιστοποίησης κόστους (CBO) του οποίου ο στόχος είναι να επιλέξει ποιο από ένα σύνολο πιθανά σχέδιαπρέπει να χρησιμοποιηθεί για την έναρξη του αιτήματος. Το CBO υπολογίζει το σχετικό κόστος για κάθε πρόγραμμα και, στη συνέχεια, επιλέγει το πρόγραμμα με το χαμηλότερο κόστος.

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

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

Για παράδειγμα, ας υποθέσουμε ότι έχετε το ακόλουθο ερώτημα:

SELECT emp_id ΑΠΟ υπαλλήλους WHERE months_of_service = 6;

(Η στήλη months_of_service έχει έναν περιορισμό NOT NULL και ένα κανονικό ευρετήριο.)

Υπάρχουν δύο κύρια σχέδια που μπορεί να επιλέξει ο βελτιστοποιητής από εδώ:

  • Σχέδιο 1: Διαβάστε όλες τις σειρές από τον πίνακα "εργαζόμενοι", για κάθε έλεγχο εάν το κατηγόρημα είναι αληθές (months_of_service=6).
  • Σχέδιο 2: Διαβάστε το ευρετήριο όπου months_of_service=6 (αυτό έχει ως αποτέλεσμα ένα σύνολο ROWID) και, στη συνέχεια, αποκτήστε πρόσβαση στον πίνακα με βάση τα ROWID που επιστράφηκαν.

Ας υποθέσουμε ότι ο πίνακας "εργαζόμενοι" περιέχει 1.000.000 (1 εκατομμύριο) σειρές. Ας φανταστούμε περαιτέρω ότι οι τιμές για months_of_service κυμαίνονται από 1 έως 12 και για κάποιο λόγο είναι αρκετά ομοιόμορφα κατανεμημένες.

Τιμή Σχέδιο 1, που περιλαμβάνει ΠΛΗΡΗΣ ΣΑΡΩΣΗ, θα κοστίσει η ανάγνωση όλων των γραμμών στον πίνακα υπαλλήλων, που είναι περίπου 1.000.000. αλλά επειδή η Oracle μπορεί συχνά να διαβάζει μπλοκ χρησιμοποιώντας αναγνώσεις πολλαπλών μπλοκ, το πραγματικό κόστος θα είναι χαμηλότερο (ανάλογα με τον τρόπο διαμόρφωσης της βάσης δεδομένων σας) - για παράδειγμα, ας υποθέσουμε ότι ο αριθμός των δειγμάτων με πολλά μπλοκ είναι 10 - το εκτιμώμενο κόστος μιας πλήρους Η σάρωση θα ήταν 1.000.000/10. Συνολικό κόστος = 100.000.

Τιμή Σχέδιο 2, το οποίο περιλαμβάνει μια σάρωση εύρους ευρετηρίου και μια αναζήτηση πίνακα από το ROWID, θα κοστίσει τη σάρωση ευρετηρίου καθώς και το κόστος πρόσβασης στον πίνακα χρησιμοποιώντας το ROWID. Δεν θα μπω στο πώς θα κοστίσει μια σάρωση ευρετηρίου εύρους, αλλά ας φανταστούμε ότι το κόστος μιας σάρωσης ευρετηρίου εύρους είναι 1 ανά σειρά. αναμένουμε να βρούμε μια αντιστοιχία 1 στις 12 φορές, επομένως το κόστος σάρωσης του ευρετηρίου είναι 1.000.000/12 = 83.333. συν κόστος πρόσβασης πίνακα (υποθέστε 1 μπλοκ ανάγνωσης ανά πρόσβαση, δεν μπορούμε να χρησιμοποιήσουμε αναγνώσεις πολλαπλών μπλοκ εδώ) = 83.333; Συνολικό κόστος = 166.666.

Όπως μπορείτε να δείτε, το κόστος του σχεδίου είναι 1 ( πλήρης σάρωση) είναι μικρότερο από το κόστος του σχεδίου 2 (έλεγχος ευρετηρίου + πρόσβαση σε σειρά) - αυτό σημαίνει ότι το CBO θα επιλέξει FULL scan.

Εάν οι υποθέσεις που έγιναν εδώ από τον βελτιστοποιητή είναι σωστές, τότε στην πραγματικότητα το Σχέδιο 1 θα είναι προτιμότερο και πολύ πιο αποτελεσματικό από το Σχέδιο 2 - το οποίο καταρρίπτει τον μύθο ότι οι ΠΛΗΡΕΣ σαρώσεις είναι "πάντα κακές".

Τα αποτελέσματα θα ήταν αρκετά διαφορετικά εάν ο στόχος του βελτιστοποιητή ήταν FIRST_ROWS(n) αντί για ALL_ROWS - οπότε ο βελτιστοποιητής θα προτιμούσε το σχέδιο 2 επειδή συχνά επέστρεφε τις πρώτες λίγες σειρές πιο γρήγορα, με το κόστος να είναι λιγότερο αποτελεσματικό για ολόκληρο το ερώτημα .

Το CBO δημιουργεί ένα δέντρο αποφάσεων, υπολογίζοντας το κόστος του καθενός πιθανός τρόποςεκτέλεση, διαθέσιμη για κάθε αίτημα. Τα κόστη ορίζονται από την παράμετρο CPU_cost ή I/O_cost που έχει οριστεί στο στιγμιότυπο. Και το CBO εκτιμά το κόστος όσο καλύτερα μπορεί με τα υπάρχοντα στατιστικά στοιχεία των πινάκων και των ευρετηρίων που θα χρησιμοποιηθούν στο ερώτημα. Δεν πρέπει να προσαρμόσετε το αίτημά σας με βάση μόνο το κόστος. Το κόστος σάς επιτρέπει να κατανοήσετε ΓΙΑΤΙ ο βελτιστοποιητής κάνει αυτό που κάνει. Χωρίς το κόστος, θα μπορούσατε να καταλάβετε γιατί ο βελτιστοποιητής επέλεξε το σχέδιο που έκανε. Περισσότερο χαμηλό κόστοςδεν σημαίνει πιο γρήγορο αίτημα. Υπάρχουν φορές που αυτό είναι αλήθεια και θα υπάρξουν φορές που είναι λάθος. Το κόστος βασίζεται στον πίνακα στατιστικών στοιχείων σας και αν είναι λάθος το κόστος θα είναι λανθασμένο.

Όταν ρυθμίζετε ένα ερώτημα, θα πρέπει να εξετάζετε την ταυτότητα και τον αριθμό των σειρών κάθε βήματος. Έχουν νόημα; Θεωρείται σωστό το optimizer; Επιστράφηκαν σωστά οι χορδές; Εάν οι πληροφορίες δεν υπάρχουν σωστά, τότε πιθανότατα ο βελτιστοποιητής δεν έχει τις κατάλληλες πληροφορίες που απαιτούνται για τη λήψη της απόφασης. η σωστή απόφαση. Αυτό μπορεί να οφείλεται σε παρωχημένα ή ελλιπή στατιστικά στοιχεία στον πίνακα και στο ευρετήριο, καθώς και σε στατιστικά στοιχεία cpu. Είναι καλύτερο να ενημερώνετε τα στατιστικά στοιχεία όταν διαμορφώνετε το ερώτημά σας για να αξιοποιήσετε στο έπακρο το εργαλείο βελτιστοποίησης. Η γνώση του κυκλώματος σας βοηθά επίσης πολύ στη ρύθμιση. Γνωρίζοντας πότε ο βελτιστοποιητής έχει πραγματικά επιλέξει κακή απόφασηκαι το υπέδειξε ο σωστός τρόποςμε μια μικρή υπόδειξη, μπορείτε να εξοικονομήσετε χρόνο.

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

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

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

Έτσι, εάν η ανάγνωση ενός μπλοκ διαρκεί 2 ms και το κόστος εκφράζεται ως "250", το αίτημα μπορεί να χρειαστεί 500 ms για να ολοκληρωθεί.

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

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

  • Πόσος χρόνος χρειάζεται για να διαβάσετε ένα μπλοκ.
  • Πόσο χρόνο διαρκεί η ανάγνωση πολλαπλών εργασιών;
  • Πόσο μεγάλη είναι η ανάγνωση πολλαπλών μπλοκ (συχνά διαφορετική από τη μέγιστη δυνατή λόγω του μεγέθους του πίνακα που είναι μικρότερο από τη μέγιστη τιμή και για άλλους λόγους).
  • Απόδοση CPU

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

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

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

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

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

Μπορείτε επίσης να ρωτήσετε τα v $sql και v $session για να λάβετε στατιστικά στοιχεία σχετικά με τις δηλώσεις SQL και αυτό θα έχει λεπτομερείς μετρήσεις για όλα τα είδη πόρων, χρονισμών και εκτελέσεων.

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

Λοιπόν, για ποιο λόγο είναι αυτό; Θα σας το περιγράψω συγκεκριμένο παράδειγμα, εξαιτίας του οποίου αναγκάστηκα να πραγματοποιήσω βελτιστοποίηση.

Ο στόχος είναι να φορτωθούν δεκάδες χιλιάδες σειρές δεδομένων στη βάση δεδομένων. Για κάθε σειρά, πρέπει πρώτα να βρείτε πρόσθετα δεδομένα στη βάση δεδομένων με ένα μάλλον δυσκίνητο ερώτημα (4 πίνακες μέσω συνδέσεων).
Το πρόβλημα είναι ότι η φόρτωση 15 χιλιάδων σειρών διαρκεί 8-9 ώρες. Αφού, σύμφωνα με τους όρους της εργασίας, είναι απαραίτητο να το φορτώνουμε συχνά, και όχι μια φορά κάθε πέντε χρόνια... Γενικά, πρέπει να φέρουμε τον χρόνο σε αποδεκτά επίπεδα.

Τι έκανα;
1. Ανακάλυψα ότι είναι η επιλογή που επιβραδύνεται (τα δεδομένα εισάγονται και ενημερώνονται σε πίνακες όπου υπάρχουν μια δέσμη σειρών και ορισμένοι πίνακες δεν έχουν ούτε ευρετήρια ούτε κλειδιά - εξ ου και οι αμφιβολίες για το σφάλμα της επιλογής) .
2. Έλεγξε την παρουσία ευρετηρίων στα πεδία που χρησιμοποιούνται από το αίτημα. Προστέθηκαν εκείνα που λείπουν.
3. Ζήτησε βοήθεια από όσους γνώριζαν. 🙂

Όσοι γνωρίζουν μας συμβούλεψαν να αναλύσουμε το σχέδιο εκτέλεσης ερωτημάτων και εξήγησαν πώς να το κάνουμε αυτό στο OraDev.
Δημιουργήστε ένα νέο παράθυρο ερωτήματος (Ctrl+N). Αντιγράφουμε το αίτημά μας σε αυτό. Πατήστε Alt+G. Επιλέξτε ένα υπάρχον ή δημιουργήστε ένα νέο τραπέζισχέδιο.
Μετά την εκτέλεση, θα εμφανιστεί το δέντρο του σχεδίου εκτέλεσης. Δεν είναι τόσο εύκολο να το καταλάβεις μόνος σου και χωρίς μισό λίτρο. 😉

Τι μας ενδιαφέρει για αυτό το δέντρο; Μας ενδιαφέρουν οι κόμβοι (βήματα) για τους οποίους υποδεικνύεται μεγάλο Κόστος του βήματος. Μπορείτε να δείτε την τιμή βήματος στις ιδιότητες βήματος (έχω πάντα ανοιχτό το παράθυρο ιδιοτήτων και επομένως χρειάζεται μόνο να επιλέξω το σωστό βήμα; μπορεί επίσης να χρειαστεί να επιλέξετε ιδιότητες κάνοντας δεξί κλικ στο βήμα). Αναζητούμε το αργό βήμα (δεν λαμβάνουμε υπόψη τον κορυφαίο κόμβο, τη ρίζα του δέντρου της κάτοψης - η συνολική τιμή του αιτήματος θα αναφέρεται εκεί και γνωρίζουμε ήδη ότι το πρόβλημα βρίσκεται σε αυτό το αίτημα). Το βρήκα; Τώρα εξετάζουμε ποιον πίνακα, ποια πεδία και με πόσες σειρές λειτουργεί το βήμα - αυτό είναι στις ιδιότητες και το όνομα του βήματος. Κοιτάμε και σκεφτόμαστε, γιατί είναι τόσο αργά εδώ;
Για παράδειγμα, ένα από τα βήματα λειτουργούσε με 4000 εγγραφές αντί για μία ή τρεις εγγραφές (όχι χιλιάδες). Αυτό δεν θα έπρεπε να έχει συμβεί κατ 'αρχήν - περιορίζω το δείγμα ακριβώς για να επιλέξω από το απαιτούμενο εύρος και όχι από ένα σωρό περιττών σκουπιδιών. Έχοντας κοιτάξει προσεκτικά την κατάσταση σύνδεσης, παρατήρησα ότι είχα χάσει ένα από τα χωράφια. Πρόσθεσα ένα πεδίο στο αίτημα και όλα μπήκαν στη θέση τους. Η τιμή αιτήματος (πλήρης) μειώθηκε από 531 σε 6. :)

Χάρη στους συντρόφους φωλιάζουν και ανιχνεύουν για τη βοήθειά τους.

ΥΣΤΕΡΟΓΡΑΦΟ. Συγγνώμη που δεν συμπεριλάβαμε στιγμιότυπα οθόνης. Θα ήταν πολύ πιο ξεκάθαρο μαζί τους, αλλά... Λόγω της εμπιστευτικότητας κάποιων πληροφοριών, το 80% θα έπρεπε να αποσιωπηθεί και μετά πάλι θα ήταν ασαφές.
Π.Π.Σ. Συνολικός χρόνοςοι λήψεις έχουν μειωθεί σημαντικά. Χρειάστηκαν 12 λεπτά για να φορτωθούν 17,5 χιλιάδες σειρές δεδομένων στη βάση δεδομένων. Σε σύγκριση με 8-9 ώρες... Λοιπόν, τα έχετε ήδη καταλάβει όλα μόνοι σας. 😉

Oracle Database 11g Performance Tuning.

Πώς να διαβάσετε σχέδια ερωτημάτων

Τι είναι ένα σχέδιο εκτέλεσης;

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

Η έκφραση EXPLAIN PLAN καταγράφει το σχέδιο εκτέλεσης που έχει επιλεγεί από το βελτιστοποιητή για την εκτέλεση παραστάσεων όπως SELECT, UPDATE, DELETE και INSERT. Τα βήματα του σχεδίου εκτέλεσης δεν εκτελούνται με τη σειρά που καθορίζονται στο σχέδιο. Υπάρχει μια σχέση γονέα-παιδιού μεταξύ των βημάτων. το δέντρο συμβολοσειράς πηγής είναι η βάση του σχεδίου εκτέλεσης. Περιέχει τις ακόλουθες πληροφορίες:

  • Ταξινόμηση των πινάκων που αναφέρονται στη δήλωση
  • Μέθοδος πρόσβασης για κάθε πίνακα που καθορίζεται στη δήλωση
  • Μέθοδος σύνδεσης για πίνακες, που χρησιμοποιείται από τελεστές σύνδεσης σε μια έκφραση
  • Λειτουργίες δεδομένων όπως φιλτράρισμα, ταξινόμηση ή συγκέντρωση
Εκτός από το δέντρο της γραμμής πηγής (ή το δέντρο ροής δεδομένων σε παράλληλες λειτουργίες), ο πίνακας σχεδίου περιέχει τα ακόλουθα δεδομένα:
  • Δεδομένα βελτιστοποίησης, όπως το κόστος και η βασικότητα κάθε λειτουργίας
  • Δεδομένα διαμερισμάτων, όπως το σύνολο των κατατμήσεων στα οποία έχετε πρόσβαση
  • Δεδομένα ταυτόχρονης χρήσης, όπως μέθοδος κατανομής λειτουργίας σύνδεσης
Τα αποτελέσματα του EXPLAIN PLAN μπορούν να σας βοηθήσουν να προσδιορίσετε εάν ο βελτιστοποιητής επιλέγει ένα συγκεκριμένο σχέδιο εκτέλεσης, όπως τη χρήση ένθετων βρόχων.


Πού μπορώ να βρω σχέδια εκτέλεσης;

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

  • Η εντολή EXPLAIN PLAN σάς επιτρέπει να προβάλετε το σχέδιο εκτέλεσης που μπορεί να χρησιμοποιήσει ο βελτιστοποιητής για να εκτελέσει μια παράσταση. Αυτή η εντολή είναι πολύ χρήσιμη επειδή δημιουργεί ένα σχέδιο εκτέλεσης και το εγγράφει σε έναν πίνακα που ονομάζεται PLAN_TABLE χωρίς να αποθηκεύει την πρόταση SQL.
  • Το V$SQL_PLAN παρέχει τη δυνατότητα προβολής σχεδίων εκτέλεσης για δρομείς που έχουν εκτελεστεί πρόσφατα. Οι πληροφορίες που είναι αποθηκευμένες στο V$SQL_LAN είναι πολύ παρόμοιες με τις πληροφορίες που παράγονται από την εντολή EXPLAIN PLAN. Ωστόσο, το Explain Plan εμφανίζει ένα πιθανό σχέδιο εκτέλεσης και το V$SQL_PLAN αποθηκεύει τα σχέδια των ήδη εκτελεσμένων ερωτημάτων.
  • Το V$SQL_PLAN_MONITOR περιέχει στατιστικά στοιχεία παρακολούθησης σε επίπεδο σχεδίου για κάθε δήλωση SQL που βρίσκεται στο V$SQL_MONITOR. Κάθε γραμμή που περιέχεται στο V$SQL_PLAN_MONITOR αντιστοιχεί σε μια συγκεκριμένη λειτουργία σχεδίου εκτέλεσης.
  • Το πλαίσιο AWR και τα σχέδια εκτέλεσης αποθήκευσης Statspack για το SQL που ονομάζεται πιο συχνά. Τα σχέδια τοποθετούνται στην προβολή dBA_HIST_SQL_PLAN ή STATS$SQL_PLAN.
  • Τα σχέδια εκτέλεσης και οι πηγές σειρών γράφονται επίσης για τον εντοπισμό αρχείων που δημιουργούνται από το DBMS_MONITOR.
  • Η βάση διαχείρισης SQL είναι μέρος του λεξικού δεδομένων που είναι αποθηκευμένο στον πίνακα SYSAUX. Πληροφορίες καταγραφής σχετικά με λειτουργίες, ιστορικό σχεδίων εκτέλεσης και γραμμές αναφοράς αποθηκεύονται εδώ, καθώς και προφίλ για δηλώσεις SQL.
  • Το διαγνωστικό συμβάν 10053, που χρησιμοποιείται για την καταγραφή των υπολογισμών του εργαλείου βελτιστοποίησης κόστους, μπορεί επίσης να δημιουργήσει σχέδια εκτέλεσης ερωτημάτων.
  • Ξεκινώντας με την έκδοση 10.2, όταν απορρίπτετε μια κατάσταση διεργασίας, το σχέδιο εκτέλεσης περιλαμβάνεται επίσης στο αρχείο παρακολούθησης που δημιουργείται.

Προβολή σχεδίων εκτέλεσης

Εάν εκτελείτε την εντολή EXPLAIN PLAN στο SQL*Plus, μπορείτε στη συνέχεια να επιλέξετε δεδομένα από τον πίνακα PLAN_TABLE και να προβάλετε τα σχέδια εκτέλεσης που δημιουργούνται. Πλέον με απλό τρόποδείτε το σχέδιο εκτέλεσης είναι να χρησιμοποιήσετε το πακέτο DBMS_XPLAIN. Το πακέτο DBMS_XPLAIN περιέχει πέντε διαθέσιμες λειτουργίες:

  • DISPLAY: Χρησιμοποιείται για μορφοποιημένη έξοδο του σχεδίου εκτέλεσης.
  • DISPLAY_AWR: Χρησιμοποιείται για έξοδο μορφοποιημένου σχεδίου εκτέλεση SQLεκφράσεις που είναι αποθηκευμένες στο αποθετήριο AWR.
  • DISPLAY_CURSOR: Χρησιμοποιείται για μορφοποιημένη έξοδο του σχεδίου εκτέλεσης από οποιονδήποτε φορτωμένο δρομέα
  • DISPLAY_SQL_PLAN_BASELINE: Χρησιμοποιείται για μορφοποιημένη έξοδο ενός ή περισσότερων σχεδίων εκτέλεσης για δηλώσεις SQL που προσδιορίζονται από κεφαλίδες.
  • DISPLAY_SQLSET: Χρησιμοποιείται για μορφοποιημένη έξοδο του σχεδίου εκτέλεσης που είναι αποθηκευμένο στο σύνολο συντονισμού SQL.
Το πλεονέκτημα της χρήσης του πακέτου DBMS_XPLAIN είναι ότι σας επιτρέπει να προβάλετε το μορφοποιημένο σχέδιο εκτέλεσης μιας πρότασης SQL, ανεξάρτητα από την πηγή.

Εντολή EXPLAIN PLAN

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

Το PLAN TABLE δημιουργείται αυτόματα ως ένας καθολικός προσωρινός πίνακας, ο οποίος στη συνέχεια χρησιμοποιείται από όλους τους χρήστες για την αποθήκευση σχεδίων εκτέλεσης. Μπορείτε να δημιουργήσετε τον δικό σας ΠΙΝΑΚΑ ΣΧΕΔΙΟΥ χρησιμοποιώντας ένα σενάριο $ORACLE_HOME/rdbms/admin/utlxplan.sql εάν απαιτείται μακροπρόθεσμη αποθήκευση σχεδίων εκτέλεσης.


ΕΞΗΓΗΣΤΕ τη δομή εντολών ΣΧΕΔΙΟ


Η εντολή EXPLAIN PLAN εισάγει μια σειρά στον ΠΙΝΑΚΑ ΣΧΕΔΙΟΥ για κάθε βήμα του σχεδίου εκτέλεσης.

Παράδειγμα εντολής EXPLAIN PLAN

Αυτή η εντολήεισάγει το σχέδιο εκτέλεσης για την έκφραση στον ΠΙΝΑΚΑ ΣΧΕΔΙΑΣΜΟΥ και προσθέτει την ετικέτα demo01 για μελλοντική αναφορά.

Υπάρχουν πολλοί τρόποι για να αποκτήσετε ένα σχέδιο εκτέλεσης. Η παραπάνω μέθοδος χρησιμοποιεί την εντολή EXPLAIN PLAN. Αυτή η εντολή δημιουργεί ένα σχέδιο εκτέλεσης για μια πρόταση SQL χωρίς να την εκτελεί και τοποθετεί το αποτέλεσμα στον ΠΙΝΑΚΑ ΣΧΕΔΙΑΣΜΟΥ. Ο ΠΙΝΑΚΑΣ ΣΧΕΔΙΑΣΜΟΥ αντιπροσωπεύει μια δομή δέντρου με την οποία μπορείτε να επιστρέψετε το σχέδιο εκτέλεσης για μια παράσταση χρησιμοποιώντας τις στήλες ID και PARENT_ID και τον όρο CONNECT BY στοΕΠΙΛΟΓΗ έκφρασης.

Έξοδος των περιεχομένων του PLAN TABLE


Το παραπάνω παράδειγμα χρησιμοποιεί το πλήκτρο ALL για τη συνάρτηση DBMS_XPLAIN.DISPLAY, η οποία σας επιτρέπει να προβάλλετε όλα διαθέσιμες πληροφορίεςσχετικά με το σχέδιο εκτέλεσης, αποθηκευμένο στον ΠΙΝΑΚΑ ΣΧΕΔΙΑΣΜΟΥ. Αυτό το συμπέρασμαεκτός από τις τυπικές πληροφορίες, περιέχει Επιπλέον πληροφορίεςόπως πληροφορίες PROJECTION, ALIAS και REMOTE SQL, εάν η λειτουργία διανέμεται.

Για τον ακριβέστερο έλεγχο των πληροφοριών εξόδου, μπορούν να χρησιμοποιηθούν οι ακόλουθες βασικές παράμετροι. Καθε λέξη-κλειδίπροσθέτει ένα ξεχωριστό μπλοκ στην έξοδο πληροφοριών από τον ΠΙΝΑΚΑ ΣΧΕΔΙΑΣΜΟΥ. Οι λέξεις-κλειδιά πρέπει να χωρίζονται με κόμμα ή διάστημα:

  • Το ROWS, εάν χρειάζεται, δείχνει τον αριθμό των σειρών που αναμένεται να καταμετρηθούν από το βελτιστοποιητή.
  • Το ROWS, εάν χρειάζεται, δείχνει τον αριθμό των byte που αναμένεται να μετρηθούν από το βελτιστοποιητή.
  • ΚΟΣΤΟΣ εάν χρειάζεται, δείχνει το κόστος,πιθανώς υπολογίζεται από τον βελτιστοποιητή
  • ΧΩΡΙΣΜΑ εάν χρειάζεται, δείχνει τον πατρικίου να απορρίπτει από τον βελτιστοποιητή
  • PARALLEL ή είναι κατάλληλο, εμφανίζει πληροφορίες PX (μέθοδοςδιανομή πληροφοριών και πληροφορίες σχετικά με τις ουρές πρόσβασης στον πίνακα)
  • ΚΑΤΗΓΟΡΟΥΜΕΝΟή είναι κατάλληλο, εμφανίζει πληροφορίες για το κατηγόρημα
  • ΠΡΟΒΟΛΗ ή είναι κατάλληλο, δείχνει την ενότηταπροβολές

Χρήση του Explain Plan στο SQL Developer

AUTOTRACE

Όταν η έκφρασηεκτελούνται στο SQL*Plus ή στο SQL Developer, μπορείτε να αποκτήσετε αυτόματα το σχέδιο εκτέλεσης και τα στατιστικά στοιχεία εκτέλεσης μιας έκφρασης. Η αναφορά δημιουργείται αυτόματα μετά την εκτέλεση οποιουδήποτε τύπου λειτουργιών όπως SELECT, INSERT, UPDATE και DELETE. Αυτή η πληροφορίαμπορεί να χρησιμοποιηθεί για τη διάγνωση και τον συντονισμό της απόδοσης των δηλώσεων SQL.

Για να χρησιμοποιήσετε το AUTOTRACE, πρέπει να δημιουργηθεί ένας ΠΙΝΑΚΑΣ ΣΧΕΔΙΑΣΜΟΥ στη βάση δεδομένων και στον χρήστη που εκτελεί το AUTOTRACE πρέπει να δοθεί ο ρόλος PLUSTRACE. ΡόλοςΤο PLUSTRACE δημιουργείται και εκδίδεται στον ρόλο DBA χρησιμοποιώντας ένα σενάριο$ORACLE_HOME/sqlplus/admin/plustrce.sql


Σύνταξη AUTOTRACE

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

  • OFF Απενεργοποιεί τη χρήση ανίχνευσης
  • ON Επιτρέπει τη χρήση της αυτόματης δρομολόγησης
  • TRACE Ενεργοποιεί την αυτόματη ανίχνευση και καταστέλλει την έξοδο SQL
  • EXPLAIN Εμφανίζει το σχέδιο εκτέλεσης αλλά δεν εμφανίζει στατιστικά στοιχεία
  • ΣΤΑΤΙΣΤΙΚΑ Εμφανίζει στατιστικά στοιχεία χωρίς σχέδιο εκτέλεσης

Παραδείγματα χρήσης AUTOTRACE




AUTOTRACE: ΣΤΑΤΙΣΤΙΚΗ


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

  • αναδρομικές κλήσεις- Ο αριθμός των αναδρομικών κλήσεων που δημιουργούνται από την πλευρά του πελάτη και του διακομιστή διατηρεί πίνακες που χρησιμοποιούνται για εσωτερική επεξεργασία. Όταν η Oracle Database χρειάζεται να κάνει αλλαγές σε αυτούς τους πίνακες, δημιουργεί μια εσωτερική δήλωση SQL, η οποία με τη σειρά της δημιουργεί μια αναδρομική κλήση.
  • μπλοκ db παίρνει- πόσες φορές ζητείται το CURRENT μπλοκ
  • συνεπής παίρνει- πόσες φορές ζητείται η λειτουργία της ολοκληρωμένης ανάγνωσης μπλοκ δεδομένων.
  • σωματικές αναγνώσεις- αριθμός μπλοκ δεδομένων που διαβάζονται από το δίσκο. Αυτός ο αριθμός αντιπροσωπεύει το άθροισμα των τιμών Η φυσική ανάγνωση γίνεται απευθείας και όλες οι αναγνώσεις από το bufferκρύπτη.
  • επαναλάβετε το μέγεθος- συνολικός αριθμός επαναλήψεων που δημιουργήθηκαν σε μπλοκ
  • byte που αποστέλλονται μέσω SQL*Net στον πελάτη- ο συνολικός αριθμός των byte που μεταφέρθηκαν στον πελάτη από τη διαδικασία παρασκηνίου.
  • byte που λαμβάνονται μέσω SQL*Net από τον πελάτη- συνολικός αριθμός byte που ελήφθησαν από τον πελάτη Oracle*Net
  • SQL*Net μετ' επιστροφής προς/από πελάτη- Ο συνολικός αριθμός των μηνυμάτων Oracle NET που αποστέλλονται και λαμβάνονται από τον πελάτη.
  • ταξινόμηση (μνήμη)- τον αριθμό των λειτουργιών ταξινόμησης που ολοκληρώθηκαν επιτυχώς στη μνήμη και δεν απαιτούσαν εγγραφή στο δίσκο.
  • ταξινόμηση (δίσκος)- τον αριθμό των λειτουργιών ταξινόμησης που απαιτούσαν τουλάχιστον μία λειτουργία δίσκου.
  • σειρά επεξεργασίας- τον αριθμό των σειρών που υποβλήθηκαν σε επεξεργασία κατά τη διάρκεια της λειτουργίας.

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

AUTO TRACE χρησιμοποιώντας SQL*Developer


Προβολή V$SQL_PLAN

Αυτή η προβολή εμφανίζει σχέδια εκτέλεσης για δρομείς που βρίσκονται ακόμα στη μνήμη cache της βιβλιοθήκης. Οι πληροφορίες που αποθηκεύονται σε αυτήν την προβολή είναι από πολλές απόψεις παρόμοιες με τις πληροφορίες από το PLAN TABLE. Ωστόσο, το V$SQL_PLAN περιέχει σχέδια εκτέλεσης για εκφράσεις που έχουν ήδη εκτελεστεί. Το σχέδιο εκτέλεσης που παράγεται από το EXPLAIN PLAN ενδέχεται να διαφέρει από το πραγματικό σχέδιο εκτέλεσης που είναι αποθηκευμένο στον κέρσορα. Αυτό συμβαίνει επειδή οι παράμετροι περιόδου λειτουργίας και οι τιμές μεταβλητής BIND ενδέχεται να διαφέρουν από τις τρέχουσες.

Μια άλλη χρήσιμη άποψη: V$SQL_PLAN_STATISTICSπου παρέχει στατιστικά στοιχεία εκτέλεσης για κάθε λειτουργία στο σχέδιο εκτέλεσης κάθε αποθηκευμένου δρομέα στην κρυφή μνήμη. Άλλη μια χρήσιμη ιδέα V$SQL_PLAN_STATISTIC_ALLσυνδυάζει πληροφορίες εκτέλεσης από V$SQL_PLAN_STATISTICSΚαι V$SQL_WORKAREA με αποθηκευμένο σχέδιο εκτέλεσης V$SQL_PLAN.


Περιγραφή των κύριων στηλών της προβολής V$SQL_PLAN


Η προβολή περιέχει τις ίδιες στήλες με το PLAN TABLE και μερικές επιπλέον στήλες. Στήλες που υπάρχουν στον PLAN TABLE και έχουν τις ίδιες τιμές:

  • ΔΙΕΥΘΥΝΣΗ
  • HASH_VALUE

Το PLAN_HASH_VALUE είναι μια στήλη που περιέχει αριθμητική αναπαράστασησχεδιάστε την έκφραση SQL για τον κέρσορα. Συγκρίνοντας τις τιμές της στήλης PLAN_HASH_VALUE, μπορείτε να προσδιορίσετε γρήγορα εάν το σχέδιο εκτέλεσης για την ίδια παράσταση αλλάζει χωρίς να τις συγκρίνετε σειρά προς σειρά.

Προβολή V$SQL_PLAN_STATISTICS

Η προβολή V$SQL_PLAN_STATISTICS παρέχει τρέχοντα στατιστικά στοιχείαμε εκτέλεση για κάθε πράξη στο σχέδιο εκτέλεσης, όπως ο αριθμός των σειρών που υποβλήθηκαν σε επεξεργασία ή ο χρόνος εκτέλεσης. Όλα τα στατιστικά στοιχεία, εκτός από τον αριθμό των σειρών, συγκεντρώνονται. Για παράδειγμα, τα στατιστικά στοιχεία σύνδεσης πίνακα μπορεί να περιλαμβάνουν 3 λειτουργίες σύνδεσης πίνακα. Τα στατιστικά στοιχεία που είναι αποθηκευμένα στο V$SQL_PLAN_STATISTICS είναι διαθέσιμα για δρομείς που έχουν μεταγλωττιστεί με την παράμετρο προετοιμασίας STATISTICS_LEVEL = ALL ή χρησιμοποιώντας την υπόδειξη βελτιστοποίησης GATHER_PLAN_STATISTICS.

Η προβολή V$SQL_STATISTICS_ALL περιέχει στατιστικά στοιχεία χρήσης μνήμης για όλες τις σειρές πηγής που χρησιμοποιούσαν μνήμη SQL (ταξινόμηση ή σύνδεση HASH Αυτή η προβολή συνδυάζει τις πληροφορίες που είναι αποθηκευμένες στην προβολή V$SQL_PLAN με τα στατιστικά στοιχεία εκτέλεσης από την προβολή V$SQL_PLAN_STATISTICS και V$SQL_WORKAREA). .

Σχέσεις μεταξύ σημαντικών δυναμικών προβολών απόδοσης



V$SQLAREAεμφανίζει στατιστικά στοιχεία για κοινόχρηστες περιοχές SQL και περιέχει μία γραμμή για καθεμία Συμβολοσειρές SQLεκφράσεις. Αυτή η προβολή παρέχει στατιστικά στοιχεία για δηλώσεις SQL που έχουν ήδη αναλυθεί, στη μνήμη και είναι έτοιμες να εκτελεστούν:

  • SQL_ID- Αναγνωριστικό SQL του γονικού δρομέα στην κρυφή μνήμη της βιβλιοθήκης
  • VERSION_COUNTαριθμός θυγατρικών δρομέων που υπάρχουν στην κρυφή μνήμη για έναν δεδομένο γονικό δρομέα

V$SQLαποθηκεύει στατιστικά στοιχεία σε κοινόχρηστες περιοχές SQL και περιέχει μια σειρά για κάθε έκφραση SQL που προέρχεται από τη μητρική έκφραση SQL:

  • ΔΙΕΥΘΥΝΣΗαντιπροσωπεύει τη διεύθυνση κεφαλίδας του γονέα δρομέα για έναν δεδομένο δρομέα
  • HASH_VALUE-την τιμή της γονικής έκφρασης στη μνήμη cache της βιβλιοθήκης
  • SQL_ID- Αναγνωριστικό SQL του γονικού δρομέα στην κρυφή μνήμη της βιβλιοθήκης
  • PLAN_HASH_VALUE- αριθμητική αναπαράσταση του σχεδίου SQL για ένα δεδομένο δρομέα
  • CHILD_NUMBER- θυγατρικός αριθμός δρομέα

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

V$SQL_PLANπεριέχει πληροφορίες σχεδίου εκτέλεσης για κάθε θυγατρικό δρομέα που έχει φορτωθεί στη μνήμη cache της βιβλιοθήκης. Στήλες ΔΙΕΥΘΥΝΣΗ, HASH_VALUEΚαι CHILD_NUMBERμπορεί να χρησιμοποιηθεί για σύνδεση με V$SQLγια μεταγενέστερο ορισμό των θυγατρικών δρομέων.


V$SQL_PLAN_ΣΤΑΤΙΣΤΙΚΗπαρέχει στατιστικά στοιχεία εκτέλεσης σε επίπεδο γραμμής πηγής για κάθε θυγατρικό δρομέα.Στήλες ΔΙΕΥΘΥΝΣΗ, HASH_VALUE μπορεί να χρησιμοποιηθεί για συνδυασμό με θέα V$SQLAREAνα καθορίσει τον γονέαδρομέας.Στήλες ΔΙΕΥΘΥΝΣΗ, HASH_VALUEΚαι CHILD_NUMBERμπορεί να χρησιμοποιηθεί για σύνδεση μεV$SQLγια να ορίσετε θυγατρικούς δρομείς.

V$SQL_PLAN_ΣΤΑΤΙΣΤΙΚΑ_ΟΛΑ περιέχει στατιστικά στοιχεία χρήσης μνήμης για όλες τις σειρές πηγής που χρησιμοποιούσαν μνήμη SQL (ταξινόμηση ή σύνδεση HASH) Αυτή η προβολή συγκεντρώνει τις πληροφορίες που είναι αποθηκευμένες στην προβολή V$SQL_PLANμε στατιστικά εκτέλεσης από προβολές V$SQL_PLAN_STATISTICSΚαι V$SQL_WORKAREA.

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

V$SQL_WORKAREAμπορεί να συνδεθεί με V$SQLAREA (ADDRESS, HASH_VALUE)και με V$SQL ( ADDRESS, HASH_VALUE,CHILD_NUMBER).

Χρησιμοποιώντας αυτή την παρουσίασημπορείτε να λάβετε απαντήσεις στις ακόλουθες ερωτήσεις:

  • Top 10 τομείς εργασίας που απαιτούν τα περισσότεραποσότηταμνήμη για cache
  • Για χώρους εργασίας που εκτελούνται σε λειτουργία AUTO,ποιο ποσοστό των χώρων εργασίας εκτελούνται χρησιμοποιώντας μέγιστη ποσότηταμνήμη;

V$SQLSTATSεμφανίζει βασικά στατιστικά στοιχεία απόδοσης για δρομείς SQL, με κάθε σειρά να αντιπροσωπεύει δεδομένα που συνδυάζει κείμενο έκφρασης SQL και σχέδιο εκτέλεσης SQL (συνδυασμός SQL_IDΚαι PLAN_HASH_VALUE). Στήλες σε V$SQLSTATSπανομοιότυπο, V$SQLΚαι V$SQLAREA. Ωστόσο, η παρουσίαση V$SQLSTATSδιαφέρει από V$SQLΚαι V$SQLAREAταχύτητα επεξεργασίας, επεκτασιμότητα, μεγάλη περίοδος αποθήκευσης δεδομένων (τα στατιστικά δεδομένα μπορούν να αποθηκευτούν στην προβολή, ακόμη και μετά την εξαγωγή του δρομέα από την κοινόχρηστη πισίνα).

Παράδειγμα δεδομένων ερωτήματος από την προβολή V$SQL_PLAN


Μπορείτε να ρωτήσετε δεδομένα από μια προβολή V$SQL_PLANχρησιμοποιώντας τη συνάρτηση DBMS_XPLAIN.DISPLAY_CURSOR()για να εμφανίσετε την τρέχουσα ή την τελευταία εκτελεσθείσα έκφραση (όπως φαίνεται στο παράδειγμα). Μπορείτε να περάσετε την τιμή SQL_IDως παράμετρος για τη λήψη του σχεδίου εκτέλεσης για μια δεδομένη παράσταση. SQL_ID - SQL_IDεκφράσεις που είναι αποθηκευμένες στην κρυφή μνήμη του δρομέα. Μπορείς να πάρεις αντίστοιχη αξίαζητώντας πληροφορίες από μια στήλη SQL_ID V V$SQLΚαι V$SQLAREA. Εναλλακτικά, μπορείτε να επιλέξετε PREV_SQL_IDγια μια συγκεκριμένη συνεδρία από V$SESSION. Από προεπιλογή, αυτή η επιλογή δεν καθορίζεται, οπότε εμφανίζεται το σχέδιο που είναι αποθηκευμένο στον τελευταίο δρομέα που εκτελέστηκε.

  • ΙΟΣΤΑΤΕΣ: Υποθέτοντας ότι η διαδικασία εκτέλεσης SQL συλλέγει βασικά στατιστικά στοιχεία για σχέδια εκτέλεσης, το STATISTICS_LEVEL ορίζεται σε ALL ή χρησιμοποιείται HINT GATHER_PLAN_STATISTICS), αυτή η μορφή εμφανίζει στατιστικά I/O για όλους, όταν καθορίζει ALL (ή μόνο το τελευταίο, όταν καθορίζεται LAST) εκτελέσεις του δρομέα.
  • MEMSTATS: Υποθέτοντας ότι χρησιμοποιείται αυτόματη διαχείριση PGA (το pga_aggregate_target έχει οριστεί σε τιμή μη μηδενική), αυτή η μορφή σάς επιτρέπει να εμφανίζετε στατιστικά στοιχεία χρήσης μνήμης αυτός ο τύποςΤα στατιστικά στοιχεία ισχύουν μόνο για λειτουργίες έντασης μνήμης, όπως HASH Join, ταξινόμηση ή ορισμένους από τους τελεστές bitmap.
  • ΟΛΑ ΤΑ ΣΤΑΤΙΣΤΙΚΑ: Συνώνυμο του "IOSTATS MEMSTATS"
  • ΤΕΛΕΥΤΑΙΟΣ: Από προεπιλογή, τα στατιστικά του σχεδίου εκτέλεσης εμφανίζονται για όλες τις εκτελέσεις του δρομέα. Χρησιμοποιώντας τη λέξη-κλειδί ΤΕΛΕΥΤΑΙΑ, μπορείτε να προβάλετε στατιστικά στοιχεία σχεδίου που δημιουργήθηκαν από την τελευταία φορά που εκτελέστηκε.

Σημαντικές προβολές AWR

Μπορείτε να προβάλετε δεδομένα AWR στο Enterprise Manager ή δημιουργώντας μια αναφορά AWR και μπορείτε επιπλέον να αποκτήσετε πρόσβαση στις ακόλουθες προβολές δυναμικής απόδοσης που αποθηκεύουν δεδομένα AWR:

  • V$ACTIVE_SESSION_HISTORY- αυτή η προβολή εμφανίζει πληροφορίες σχετικά με την πιο πρόσφατη δραστηριότητα συνεδρίας, η οποία ενημερώνεται κάθε δευτερόλεπτο.
  • Οι μετρικές προβολές V$ παρουσιάζουν μετρικά δεδομένα για την παρακολούθηση της απόδοσης του συστήματος. Η λίστα των προβολών μετρήσεων μπορεί να προβληθεί με πρόσβαση στην προβολή V$METRICGROUP.
  • Οι προβολές DBA_HIST περιέχουν δεδομένα ιστορικού που είναι αποθηκευμένα στη βάση δεδομένων. Αυτή η ομάδα προβολών περιλαμβάνει:
  1. DBA_HIST_ACTIVE_SESS_HISTORYπεριέχει τα περιεχόμενα του ιστορικού που έχουν επιλεγεί από τη μνήμη ενεργή συνεδρίααπό πρόσφατη δραστηριότητα του συστήματος
  2. DBA_HIST_BASELINEπεριέχει πληροφορίες σχετικά με τις γραμμές αναφοράς που είναι αποθηκευμένες στη βάση δεδομένων.
  3. DBA_HIST_DATABASE_INSTANCEπεριέχει πληροφορίες για το περιβάλλον της βάσης δεδομένων
  4. DBA_HIST_SNAPSHOTπεριέχει πληροφορίες σχετικά με στιγμιότυπα που είναι αποθηκευμένα στο σύστημα
  5. DBA_HIST_SQL_PLANπεριέχει πληροφορίες σχετικά με τα σχέδια εκτέλεσης
  6. DBA_HIST_WR_CONTROLπεριέχει πληροφορίες σχετικά με τις ρυθμίσεις AWR
Ζητώντας δεδομένα από το AWR


Δημιουργία αναφορών για ένα συγκεκριμένοSQLαπό το αποθετήριο AWR


Παρακολούθηση SQL


Εργαλείο Παρακολούθηση SQLδιαθέσιμο από προεπιλογή όταν η επιλογή STATISTICS_LEVELοριστεί σε τιμή ΤΥΠΙΚΟΣή ΟΛΑ. Για χρήση αυτού του οργάνουπρέπει επίσης να ορίσετε την τιμή της παραμέτρου CONTROL_MANAGEMENT_PACK_ACCESSστο νόημα ΔΙΑΓΝΩΣΤΙΚΟ+TUNINGγια να ενεργοποιήσετε το πακέτο διάγνωσης και διαμόρφωσης.

Από προεπιλογή, η παρακολούθηση SQL ενεργοποιείται αυτόματα όταν μια πρόταση SQL εκτελείται παράλληλα ή όταν καταναλώνει περισσότερα από πέντε δευτερόλεπτα χρόνου CPU ή I/O κατά τη διάρκεια μιας μεμονωμένης εκτέλεσης.

Υπάρχουν δύο συμβουλές βελτιστοποίησης για τη ρητή ενεργοποίηση ή απενεργοποίηση της παρακολούθησης SQL για μια έκφραση - ΟΘΟΝΗΚαι NO_MONITOR.

Μπορείτε να παρακολουθείτε στατιστικά στοιχεία εκτέλεσης δηλώσεων SQL χρησιμοποιώντας προβολές V$SQL_MONITORΚαι V$SQL_PLAN_MONITOR.

Μετά την ενεργοποίηση του SQL Statement Monitoring στην προβολή Dynamic Performance V$SQL_MONITORΠροσθέτει τις πληροφορίες που απαιτούνται για την παρακολούθηση βασικών μετρήσεων απόδοσης, όπως ο χρόνος εκτέλεσης, ο χρόνος CPU, ο αριθμός αναγνώσεων και εγγραφών, η καθυστέρηση εισόδου/εξόδου και άλλες μετρήσεις καθυστέρησης. Αυτό το στατιστικόενημερώνεται σε πραγματικό χρόνο κατά την εκτέλεση της SQL, από προεπιλογή - κάθε δευτερόλεπτο. Μετά την ολοκλήρωση της εκτέλεσης, οι πληροφορίες σχετικά με την εκτέλεση αποθηκεύονται στην προβολή V$SQL_MONITORάλλο ένα λεπτό, μετά το οποίο αφαιρείται.

Δείγμα αναφοράς παρακολούθησης SQL


Αυτό το παράδειγμα προϋποθέτει ότι επιλέγετε δεδομένα από τον πίνακα SALES και εκτελείτε την παρακολούθηση SQL σε άλλη περίοδο λειτουργίας.

Η συνάρτηση DBMS_SQLTUNE.REPORT_SQL_MONITOR μπορεί να δεχθεί πολλές παραμέτρους που περιορίζουν ή επεκτείνουν το επίπεδο λεπτομέρειας της αναφοράς, χρησιμοποιώντας πρόσθετες παραμέτρους μπορείτε επίσης να καθορίσετε τη μορφή εξόδου της αναφοράς (TEXT, HTML ή XML), από προεπιλογή η αναφορά δημιουργείται σε κείμενο μορφή.

Για τον μοναδικό προσδιορισμό δύο εκτελέσεων της ίδιας πρότασης SQL, δημιουργείται ένα σύνθετο κλειδί που ονομάζεται κλειδί εκτέλεσης. Αυτό το κλειδί αποτελείται από τρία χαρακτηριστικά, καθένα από τα οποία αναφέρεται σε μια στήλη στο V$SQL_MONITOR:

  • SQL_ID
  • Ένα αναγνωριστικό που δημιουργείται εσωτερικά για να διασφαλιστεί ότι το δεδομένο πρωτεύων κλειδίείναι πραγματικά μοναδικό (SQL_EXEC_ID)
  • Χρονική σήμανση έναρξης εκτέλεσης έκφρασης (SQL_EXEC_START)

Ερμηνεία σχεδίου εκτέλεσης



συμπέρασμα ΕΞΗΓΗΣΤΕ ΣΧΕΔΙΟείναι μια αναπαράσταση πίνακα της δενδρικής δομής του σχεδίου εκτέλεσης. Κάθε βήμα (μια γραμμή σε ένα σχέδιο εκτέλεσης ή ένας κόμβος σε ένα δέντρο) αντιπροσωπεύει μια πηγή γραμμής.
Η σειρά των κόμβων κάτω από το γονικό δείχνει τη σειρά εκτέλεσης των κόμβων σε αυτό το επίπεδο. Εάν δύο βήματα βρίσκονται στο ίδιο επίπεδο, το πρώτο κατά σειρά θα εκτελεστεί πρώτο.
Σε μια μορφή δέντρου, τα φύλλα στα αριστερά σε κάθε επίπεδο του δέντρου προσδιορίζουν το σημείο στο οποίο ξεκινά η εκτέλεση.
Τα βήματα του σχεδίου εκτέλεσης δεν εκτελούνται με τη σειρά με την οποία είναι αριθμημένα. Υπάρχει μια σχέση γονέα-παιδιού μεταξύ των βημάτων.
Σε PLAN_TABLE και V$SQL_PLAN σημαντικά στοιχείαγια να αποκτήσετε τη δομή δέντρου είναι οι στήλες ID, PARRENT_ID και POSITION. Στο αρχείο παρακολούθησης, αυτές οι στήλες αντιστοιχούν στα πεδία id, pid και pos, αντίστοιχα.
Ένας τρόπος για να διαβάσετε ένα σχέδιο εκτέλεσης είναι να το μετατρέψετε σε γράφημα που έχει δομή δέντρου. Μπορείτε να ξεκινήσετε από την κορυφή, η καταχώρηση με ID=1 είναι το επάνω σημείο του δέντρου. Αυτό ισχύει για πράξεις που έχουν τιμή parrent_id ή pid 1.
Για να αναπαραστήσετε το σχέδιο ως δέντρο, κάντε τα εξής:

  1. Πάρτε την ταυτότητα με τα περισσότερα χαμηλής αξίαςκαι τοποθετήστε το στην κορυφή του δέντρου.
  2. Προσδιορίστε σειρές που έχουν PID (αναγνωριστικό γονέα) ίσο με αυτήν την τιμή.
  3. Τοποθετήστε τα στο δέντρο κάτω από τη γονική καταχώριση σύμφωνα με τις τιμές POS τους από το χαμηλότερο προς το υψηλότερο από αριστερά προς τα δεξιά.
  4. Μόλις βρεθούν όλα τα γονικά αναγνωριστικά, μετακινηθείτε ένα επίπεδο προς τα κάτω στο επόμενο αναγνωριστικό και επαναλάβετε τη διαδικασία, βρίσκοντας νέες σειρές με το ίδιο PID.
Το πρώτο πράγμα που πρέπει να καθοριστεί στο σχέδιο εκτέλεσης είναι ποιος κόμβος εκτελείται πρώτος. Η μέθοδος που φαίνεται στο σχήμα εξηγεί πώς να το κάνετε αυτό, αλλά μερικές φορές σε πολύπλοκα σχέδια εκτέλεσης είναι δύσκολο να γίνει αυτό και επίσης δύσκολο να ακολουθήσετε όλα τα βήματα μέχρι το τέλος. Τα σύνθετα σχέδια δεν διαφέρουν στη σύνθεση από τα απλά εκτός από τον αριθμό των βημάτων. Το ίδιο ισχύει και για αυτούς απλούς κανόνες. Μπορείτε πάντα να αποκρύψετε βήματα στο σχέδιό σας που δεν καταναλώνουν σημαντικό ποσό πόρων.
Τυπική μέθοδος για την ερμηνεία ενός σχεδίου εκτέλεσης:
  1. Ξεκινήστε από την κορυφή
  2. Μετακινήστε τις λειτουργίες προς τα κάτω μέχρι να φτάσετε σε αυτήν που παράγει δεδομένα αλλά δεν καταναλώνει τίποτα. Αυτή είναι η αρχή της επιχείρησης.
  3. Κοιτάξτε τις παιδικές επεμβάσεις που έχει αυτός ο γονέας. Οι θυγατρικές λειτουργίες θα εκτελεστούν ως εξής
  4. Μετακινηθείτε επάνω στο δέντρο μέχρι να ελεγχθούν όλες οι συναλλαγές.

Η τυπική μέθοδος για την ερμηνεία του δέντρου του σχεδίου εκτέλεσης είναι:

  1. Ξεκινήστε από την κορυφή
  2. Μετακινηθείτε προς τα κάτω και αριστερά κατά μήκος του δέντρου μέχρι να φτάσετε στον αριστερό κόμβο, εκτελείται πρώτα
  3. Κοιτάξτε τα παιδιά αυτού του κόμβου. αυτά τα παιδιά θα εκτελεστούν περαιτέρω.
  4. Μετά την εκτέλεση των παιδιών, η λειτουργία γονέα θα συνεχίσει να εκτελείται.
  5. Τώρα, αφού ολοκληρωθεί αυτή η λειτουργία και όλοι οι απόγονοί της, ανεβείτε στο δέντρο και δείτε τους απογόνους της αρχικής σειράς πράξεων και τους γονείς της. Εκτελείται σύμφωνα με την ίδια αρχή.
  6. Πλοηγηθείτε στο δέντρο μέχρι να ελεγχθούν όλες οι συναλλαγές

Ερμηνεία σχεδίου εκτέλεσης: Παράδειγμα 1

Το παραπάνω σχήμα δείχνει την ερμηνεία του σχεδίου εκτέλεσης για την έκφραση. Το ερώτημα που φαίνεται στο σχήμα προσπαθεί να βρει υπαλλήλους των οποίων οι μισθοί είναι διαφορετικοί από το πλέγμα μισθών. Το ερώτημα επιλέγει δεδομένα από δύο πίνακες και περιλαμβάνει ένα δευτερεύον ερώτημα που βασίζεται σε μια επιλογή από έναν άλλο πίνακα για να ελέγξει τα επίπεδα μισθών.
Ας δούμε τη σειρά εκτέλεσης αυτού του αιτήματος. Με βάση αυτό και το προηγούμενο σχήμα, η σειρά εκτέλεσης θα είναι η εξής: 3-5-4-2-6-1:

  • 3: η εκτέλεση του σχεδίου θα ξεκινήσει με πλήρη σάρωση του πίνακα EMP (ID=3)
  • 5: οι σειρές περνούν στο βήμα που ελέγχει τον ένθετο βρόχο (ID=2), το οποίο τις χρησιμοποιεί για να αναζητήσει τις σειρές στο ευρετήριο PK_DEPT (ID=5)
  • 4: Τα ROWID των σειρών που λαμβάνονται μετά τη σάρωση του PK_DEPT χρησιμοποιούνται για τη λήψη των υπόλοιπων πληροφοριών από τον πίνακα DEPT (ID=4)
  • 2: ID=2, η διαδικασία συγχώνευσης ένθετου βρόχου θα συνεχιστεί μέχρι να ολοκληρωθεί
  • 6: Αφού το ID=2 επεξεργαστεί όλες τις σειρές πηγής για την ένωση, θα πραγματοποιηθεί μια πλήρης σάρωση του πίνακα SALGRADE (ID=6).
  • 1: Τα δεδομένα που λαμβάνονται μετά την εκτέλεση του ID=6 θα χρησιμοποιηθούν για το φιλτράρισμα σειρών από το ID=2 και το ID=6
Οι θυγατρικές διεργασίες εκτελούνται πριν από τις γονικές διεργασίες, αν και οι δομές σύνδεσης πρέπει να διαμορφωθούν πριν από την εκτέλεση των θυγατρικών διεργασιών. Ίσως ο απλούστερος τρόπος για να εξηγήσετε τη σειρά εκτέλεσης είναι ότι για να εκτελέσετε μια πράξη σύνδεσης NESTED BLOPS με ID=2, τα δύο παιδιά (ID=3 και ID=4 (μαζί με τα παιδιά τους)) πρέπει να ολοκληρώσουν την εκτέλεσή τους πριν το ID=2 εκτελούνται.

Ερμηνεία σχεδίου εκτέλεσης: Παράδειγμα 2


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

Για ευκολία μορφοποίησης, έχει προστεθεί άλλη αρίθμηση στο σχήμα. Η στήλη στα αριστερά αντιπροσωπεύει το αναγνωριστικό και η στήλη στα δεξιά αντιπροσωπεύει το PID. Το σχέδιο εκτέλεσης ερωτήματος εμφανίζει δύο λειτουργίες NESTED LOOP JOIN. Ερμηνεύουμε το σχέδιο εκτέλεσης σύμφωνα με τη μέθοδο που παρουσιάστηκε παραπάνω:

  1. Ας ξεκινήσουμε από την κορυφή. ID=0
  2. Κατεβαίνουμε τις πράξεις μέχρι να φτάσουμε σε αυτόν που παράγει δεδομένα αλλά δεν καταναλώνει τίποτα. ΣΕ σε αυτήν την περίπτωσηΤα ,ID 0,1,2 και 3 καταναλώνουν δεδομένα. Το ID=4 είναι η πρώτη λειτουργία από την κορυφή που δεν καταναλώνει πόρους, αλλά παράγει δεδομένα. Αυτή είναι η πρώτη πηγή δεδομένων. Το INDEX RANGE SCAN θα επιστρέψει το ROWID των σειρών που θα χρησιμοποιηθούν για την επιστροφή δεδομένων από τον πίνακα LOCATIONS (ID=3)
  3. Ας δούμε τα αδέρφια αυτής της πηγής σειράς που βρίσκονται στο ίδιο επίπεδο με αυτό στο δέντρο. Τα αδέρφια και οι αδερφές στο ίδιο επίπεδο έχουν ID=3 και ID=5. Το ID = 5 έχει ένα παιδί - ID = 6, το οποίο θα εκτελεστεί πριν από αυτό. Αυτή είναι μια λειτουργία ΣΑΡΩΣΗΣ ΠΕΡΙΒΑΛΛΟΝΤΟΣ INDEX σε άλλο ευρετήριο, επιστρέφοντας ένα ROWID που θα χρησιμοποιηθεί αργότερα για την ανάκτηση δεδομένων από τον πίνακα DEPARTMENTS κατά την εκτέλεση ID=5.
  4. Μετά την εκτέλεση μιας θυγατρικής λειτουργίας, ο έλεγχος μεταφέρεται στον πρόγονό της. Η επόμενη λειτουργία θα είναι NESTED BOOPS με ID=2 για συνδυασμό των δεδομένων που ελήφθησαν προηγουμένως.
  5. Τώρα που η γονική λειτουργία και όλοι οι απόγονοί της έχουν ολοκληρωθεί, ανεβαίνουμε στο δέντρο και βλέπουμε αν η γονική λειτουργία έχει αδέρφια και αδερφές που βρίσκονται στο ίδιο επίπεδο με αυτήν. Το ID=2 βρίσκεται στο ίδιο επίπεδο με την πράξη ID=7 που έχει θυγατρικό ID=8. Αυτό το παιδί θα εκτελεστεί πρώτα. Θα πραγματοποιηθεί ένα INDEX UNIQUE SCAN για να ληφθούν τα ROWID των σειρών, τα οποία στη συνέχεια θα χρησιμοποιηθούν για την ανάκτηση δεδομένων από τον πίνακα ΕΜΠΛΟΙΕΣ στην πράξη ID=7.
  6. μεταβαίνουμε σε υψηλότερο επίπεδο αφού έχουν υποβληθεί σε επεξεργασία όλες οι λειτουργίες στο τρέχον επίπεδο και οι απόγονοί τους. Η τελευταία λειτουργία που θα εκτελεστεί θα είναι η συγχώνευση NESTED BOOPS με ID=1, μετά την οποία το αποτέλεσμα θα μεταφερθεί στο ID=0.
  7. Η σειρά της επέμβασης έχει ως εξής: 4-3-6-5-2-8-7-1-0

Παρακάτω είναι Λεπτομερής περιγραφήσχέδιο εκτέλεσης:

Αρχικά, εκτελείται ένας εσωτερικός ένθετος βρόχος χρησιμοποιώντας τις ΤΟΠΟΘΕΣΙΕΣ ως τον πρώτο πίνακα, χρησιμοποιώντας την πρόσβαση ευρετηρίου στη στήλη CITY. Η λειτουργία λειτουργεί επειδή ψάχνετε μόνο για τμήματα στο Σιάτλ.

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

Η δεύτερη λειτουργία ένωσης εξετάζει το ευρετήριο στη στήλη EMPLOYEE_ID του πίνακα EMPLOYEES. Αυτή η λειτουργία μπορεί να εκτελεστεί επειδή το σύστημα γνωρίζει (από την πρώτη λειτουργία σύνδεσης) τα αναγνωριστικά όλων των διευθυντών τμημάτων στο Σιάτλ. Σε αυτήν την περίπτωση, εκτελείται ΜΟΝΑΔΙΚΗ ΣΑΡΩΣΗ επειδή η σάρωση εκτελείται στο ευρετήριο του πρωτεύοντος κλειδιού.

  • Πρώτον, το σύστημα κατακερματίζει τον πίνακα T3 στη μνήμη (ID=3)
  • Στη συνέχεια, το σύστημα κατακερματίζει τον πίνακα T1 στη μνήμη (ID=5)
  • Στη συνέχεια ξεκινά η σάρωση του πίνακα T2 (ID-6).
  • Το σύστημα παίρνει μια σειρά από το T2 και εξετάζει το T1 (T1.i=T2.i)
  • Εάν η γραμμή επιβιώσει, το σύστημα την αναζητά στο T3 (T1.i=T3.i)
  • Εάν η σειρά επιβιώσει, το σύστημα τη μεταβιβάζει στην επόμενη λειτουργία.
  • Τα προβλήματα του συστήματος μέγιστη αξίααπό το προηγούμενο σύνολο αποτελεσμάτων.
  • Η σειρά εκτέλεσης έχει ως εξής: 3-5-6-4-2-1

    Σειρά συγχώνευσης: T1-T2-T3

    Διαβάστε περισσότερα ολοκληρωμένα σχέδια εκτέλεσης


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

    Μπορείτε να συντομεύσετε το περίγραμμα για να το κάνετε πιο ευανάγνωστο. Το σχήμα στα δεξιά δείχνει το ίδιο σχέδιο εκτέλεσης, μόνο συντομευμένο. Όπως φαίνεται στο σχήμα, αυτό είναι εύκολο να γίνει χρησιμοποιώντας το Enterprise manager ή το SQL*Developer. Όπως φαίνεται στο σχήμα, το σχέδιο περιλαμβάνει τη λειτουργία της συγχώνευσης δύο κλάδων. Η γνώση του λεξικού δεδομένων μας επιτρέπει να κατανοήσουμε ότι οι δύο κλάδοι αντιστοιχούν σε επιτραπέζιους χώρους που διαχειρίζονται από λεξικό και τοπικά διαχειριζόμενους. Οι γνώσεις σχετικά με τη βάση δεδομένων σάς επιτρέπουν να κατανοήσετε ότι η βάση δεδομένων δεν διαθέτει χώρους πινάκων που διαχειρίζονται από λεξικό. Έτσι, αν υπάρχει πρόβλημα, είναι στον δεύτερο κλάδο. Για να επιβεβαιώσετε τις υποθέσεις σας, πρέπει να δείτε τις πληροφορίες σχεδίου και τα στατιστικά στοιχεία εκτέλεσης κάθε πηγής σειράς για να προσδιορίσετε το τμήμα του σχεδίου που καταναλώνει τους περισσότερους πόρους. Στη συνέχεια, πρέπει να επεκτείνετε τον κλάδο στον οποίο εντοπίζονται προβλήματα. Για χρήση αυτή τη μέθοδοπρέπει επιπλέον να χρησιμοποιήσετε στατιστικά στοιχεία εκτέλεσης, τα οποία βρίσκονται στην προβολή V$SQL_PLAN_STATISTICS ή στην αναφορά tkprof που δημιουργείται από το αρχείο παρακολούθησης. Για παράδειγμα, το tkprof αθροίζει τον χρόνο που χρειάζεται για να εκτελεστεί κάθε γονική λειτουργία συν τον χρόνο εκτέλεσης όλων των θυγατρικών λειτουργιών.

    Επισκόπηση σχεδίου εκτέλεσης

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

    • Το σχέδιο είναι σχεδιασμένο με τέτοιο τρόπο ώστε το καλύτερο φίλτροεφαρμόζεται στον κορυφαίο πίνακα
    • Η σειρά σύνδεσης έχει σχεδιαστεί έτσι ώστε ο ελάχιστος αριθμός σειρών να περνά στο επόμενο βήμα (δηλαδή, η σειρά σύνδεσης πρέπει να πηγαίνει στα καλύτερα φίλτρα που δεν έχουν χρησιμοποιηθεί ακόμη)
    • Η μέθοδος σύνδεσης ταιριάζει με τον αριθμό των σειρών που μεταβιβάζονται σε αυτήν για σύνδεση. Για παράδειγμα, μια ένωση NESTED LOOP χρησιμοποιώντας ένα ευρετήριο μπορεί να μην είναι βέλτιστη όταν επιστρέφονται πολλές σειρές.
    • Οι απόψεις χρησιμοποιούνται αποτελεσματικά. Κυτάζω Λίστα ΕΠΙΛΟΓΗΣγια να προσδιορίσετε πού χρειάζεται πρόσβαση στην προβολή.
    • Δεν υπάρχουν καρτεσιανές λειτουργίες προϊόντων σε τραπέζια (ακόμα και με μικρά τραπέζια).
    • Κάθε πίνακας διαβάζεται αποτελεσματικά: εξετάστε τις κατηγόριες των παραστάσεων SQL σε σχέση με τον αριθμό των γραμμών στον πίνακα. Δείτε λεπτομερώς τις ύποπτες λειτουργίες, για παράδειγμα πλήρη σάρωση πίνακα για πίνακες με μεγάλο ποσόσυμβολοσειρές που υπάρχουν στο κατηγόρημα.

    Οι σαρώσεις πλήρους πίνακα μπορούν να χρησιμοποιηθούν αποτελεσματικά για μικρούς πίνακες ή για την εφαρμογή ενός συγκεκριμένου τύπου ένωσης (όπως HASH JOIN) στις σειρές που επιστρέφονται.

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

    Το ίδιο το σχέδιο εκτέλεσης δεν μπορεί να παρέχει πληροφορίες σχετικά με την αποτελεσματικότητα της εκτέλεσης ερωτημάτων. Για παράδειγμα, η έξοδος του EXPLAIN PLAN μπορεί να δείχνει χρήση ευρετηρίου, αλλά αυτό δεν σημαίνει ότι η έκφραση είναι αποτελεσματική. Μερικές φορές η χρήση ενός ευρετηρίου μπορεί να είναι πολύ αναποτελεσματική.

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

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

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

    Πρόσφατα έτυχε να επικοινωνήσω με έναν από τους κορυφαίους επαγγελματίες Oracle DBMS. Είπε πολλά ενδιαφέροντα πράγματα σχετικά με την εργασία με σχέδια εκτέλεσης ερωτημάτων διαφορετικές εκδόσειςαυτό το DBMS και δεν δίστασε να πει σε όλους για τα εργαλεία και τις τεχνικές που χρησιμοποιεί και να δώσει μερικές χρήσιμες μικρές συμβουλές. Μετάφρασα ένα από τα άρθρα στο ιστολόγιό του και θα ήθελα να το επιστήσω υπόψη του Khabravchan. Παρά το γεγονός ότι η περιγραφείσα τεχνική χρησιμοποιήθηκε για εργασία με την Oracle, τώρα χρησιμοποιώ με επιτυχία την ίδια προσέγγιση για το MS SQL και το Sybase.

    Εκτελέστε ένα ερώτημα εκτέλεσης και θα εμφανιστεί η καρτέλα Σχέδιο ερωτήματος, γεμάτη με το σχέδιο εκτέλεσης.


    Τοποθετήστε το ποντίκι σας πάνω από οποιονδήποτε από τους κόμβους στο διάγραμμα και θα εμφανιστούν πρόσθετες χρήσιμες πληροφορίες σχετικά με αυτό το βήμα εκτέλεσης από το σχέδιο ερωτήματος!
    Από προεπιλογή, το Rapid SQL εμφανίζει το σχέδιο εκτέλεσης γραφικά. Βγήκα από τον παλιό κόσμο της βελτιστοποίησης…. προτιμώ έκδοση κειμένου, οπότε πατάω δεξί κουμπίτο ποντίκι στο παράθυρο με το σχέδιο και επιλέξτε «Προβολή ως κείμενο».
    Προτιμώ να βλέπω το κείμενο της αίτησης και το σχέδιο ταυτόχρονα.


    Είναι εύκολο να γίνει. Βλέπετε τις καρτέλες του παραθύρου ISQL στο κάτω μέρος του κύριου παραθύρου; Αρχικά, πρέπει να ρυθμίσουμε το Rapid SQL έτσι ώστε να εμφανίζει το σχέδιο σε ξεχωριστό παράθυρο.


    Κάντε κλικ στο κουμπί Επιλογές (αριστερός κόκκινος κύκλος) και, στη συνέχεια, ορίστε την επιλογή του παραθύρου Αποτέλεσμα σε «Μη επισυναπτόμενο». Αυτό θα δημιουργήσει δύο μεμονωμένους σελιδοδείκτεςστο κάτω μέρος του Rapid SQL, μετά την εκτέλεση του ερωτήματος εκτέλεσης. Απλώς σύρετε αυτό το παράθυρο λίγο από την καρτέλα και θα εμφανιστεί ένα ορθογώνιο όπου μπορείτε να μετακινήσετε αυτό το παράθυρο.
    Ή μπορείτε να χρησιμοποιήσετε το στοιχείο Tile windows από το κύριο μενού του προγράμματος

    Και κάτι ακόμα: όλα αυτά λειτουργούν και στο DBArtisan - μια λύση για διαχειριστές βάσεων δεδομένων.



    Έχετε ερωτήσεις;

    Αναφέρετε ένα τυπογραφικό λάθος

    Κείμενο που θα σταλεί στους συντάκτες μας: