Λειτουργία συντήρησης στατιστικών (autostats) στον SQL Server

ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.

Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:195565
Αυτό το αρχείο έχει αρχειοθετηθεί. Προσφέρεται “ως έχει” και δεν θα ενημερώνεται πια.
Περίληψη
Ενδέχεται η λειτουργικότητα νέες στατιστικές συντήρησης, AutoStat,Δημιουργία ανεπιθύμητων επιβάρυνση σε ένα σύστημα παραγωγής, εκτελώντας μία από τιςπαρακάτω ενέργειες:
  • Προετοιμασία στατιστικών ενημερώσεις κατά τη διάρκεια περιόδων βαρύ παραγωγής.

    - ή -
  • Προετοιμασία ένα υπερβολικά μεγάλο αριθμό ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ διαδικασιών σε ένα δεδομένο σημείο στο χρόνο.
Ο σκοπός αυτού του άρθρου είναι να περιγράφονται λεπτομερώς οι προϋποθέσεις υπό τις οποίες μπορείτε νααναμένετε να δείτε autostats δημιουργία και ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ που εκτελείται έναντιπίνακες σε μια βάση δεδομένων.

Για πληροφορίες σχετικά με autostats στον SQL Server 2000, ανατρέξτε στο θέμα "Στατιστικά στοιχεία χρησιμοποιούνται από τη βελτιστοποίηση ερωτήματος στον Microsoft SQL Server 2000" στην ακόλουθη τοποθεσία του MSDN στο Web:

ΣημείωσηΕάν χρησιμοποιείτε το Microsoft SQL Server 2005, ανατρέξτε την ακόλουθη λευκή βίβλο της Microsoft για πληροφορίες σχετικά με τον τρόπο χρήσης των στατιστικών στοιχείων από τη βελτιστοποίηση ερωτήματος σε SQL Server 2005:
Περισσότερες πληροφορίες

Γενικές πληροφορίες

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

Στατιστικά στοιχεία που διατηρούνται σε κάθε πίνακα του SQL Server για να βοηθήσει τη βελτιστοποίησηστην απόφαση βασίζεται στο κόστος κάνει περιλαμβάνουν τα:
  • Αριθμός γραμμών στον πίνακα.
  • Αριθμός σελίδων που χρησιμοποιείται από τον πίνακα.
  • Αριθμός των τροποποιήσεων που έγιναν στα κλειδιά του πίνακα από την τελευταία ενημέρωση για τα στατιστικά στοιχεία.
Πρόσθετες πληροφορίες αποθηκεύονται για ευρετήρια, συμπεριλαμβανομένων (για κάθε ευρετήριο):
  • Ένα ιστόγραμμα ισο-ύψος στην πρώτη στήλη.
  • Πυκνότητες σε όλα τα προθέματα στήλης.
  • Μέσο μήκος κλειδιού.
Στατιστικά στοιχεία σχετικά με τα ευρετήρια δημιουργούνται αυτόματα κάθε φορά που ένα νέο ευρετήριο είναιενσωματωμένη. Επιπλέον, τώρα είναι δυνατό να δημιουργήσετε και να διατηρήσετε τα στατιστικά στοιχεία σχετικά μεάλλες στήλες καθώς.

Για να διατηρήσετε τις στατιστικές πληροφορίες κατά τρόπο ενημερωμένο ωςείναι δυνατόν, SQL Server παρουσιάζει AutoStat, που, μέσω του SQL Serverπαρακολούθηση των τροποποιήσεων του πίνακα, έχει τη δυνατότητα Αυτόματη ενημέρωση τουΣτατιστικά στοιχεία για τον πίνακα όταν έχει επιτευχθεί ένα συγκεκριμένο όριο αλλαγή.Επιπλέον, ο SQL Server παρουσιάζει auto-δημιουργία-στατιστικών, όπουδίνει εντολή στο διακομιστή για να δημιουργήσετε αυτόματα όλα τα στατιστικά στοιχεία που απαιτούνται για τηνακριβής βελτιστοποίηση ενός συγκεκριμένου ερωτήματος.

Τον καθορισμό όταν AutoStat γενιά είναι επικείμενη

Όπως αναφέρθηκε παραπάνω, η AutoStat θα ενημερώσει αυτόματα τα στατιστικά στοιχείαένα συγκεκριμένο πίνακα όταν έχει επιτευχθεί μια "Κατώφλι αλλαγής". Τοστήλη sysindexes.rowmodctr διατηρεί το τρέχον σύνολο όλους τροποποιήσεωνσε έναν πίνακα, με τον καιρό, μπορεί να επηρεάσει αρνητικά τον επεξεργαστή ερωτήματοςκάνουν διαδικασία λήψης απόφασης. Αυτός ο μετρητής ενημερώνεται κάθε φορά που κάποιο από ταμετά από συμβάντα προκύπτει:
  • Γίνεται μια εισαγωγή μίας γραμμής.
  • Γίνεται διαγραφή μια μεμονωμένη γραμμή.
  • Γίνεται ενημέρωση σε μια στήλη με ευρετήριο.
ΣΗΜΕΊΩΣΗ: ΠΕΡΙΚΟΠΉ ΠΊΝΑΚΑ ενημερωμένη έκδοση rowmodctr.

Μετά την ενημέρωση των στατιστικών στοιχείων του πίνακα, η τιμή rowmodctr επανέρχεται στο 0και ενημερώνεται η έκδοση της διάταξης του πίνακα στατιστικών στοιχείων.

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

Ο βασικός αλγόριθμος για αυτόματη ενημέρωση στατιστικών είναι:
  • Εάν η προτεραιότητα για έναν πίνακα είναι μικρότερη των έξι και ο πίνακας βρίσκεται στη βάση δεδομένων tempdb, αυτόματη ενημέρωση με κάθε έξι τροποποιήσεις στον πίνακα.
  • Εάν η προτεραιότητα για έναν πίνακα είναι μεγαλύτερη από 6, αλλά κατώτερη ή ίση με 500, ενημέρωση κατάστασης κάθε 500 τροποποιήσεις.
  • Εάν η προτεραιότητα για έναν πίνακα είναι μεγαλύτερη από 500, ενημέρωση στατιστικών όταν (500 + 20 τοις εκατό του πίνακα) έχουν γίνει μεταβολές.
  • Για τις μεταβλητές του πίνακα, προτεραιότητα αλλαγές δεν προκαλεί αυτόματη ενημέρωση στατιστικών.
ΣΗΜΕΊΩΣΗ: Υπό την έννοια αυτή αυστηρά, SQL Server αποδίδει προτεραιότητα ως τον αριθμό των γραμμών του πίνακα.

ΣΗΜΕΊΩΣΗ: Εκτός από την προτεραιότητα, της επιλεκτικότητας των το κατηγόρημα επηρεάζει επίσης γενιάς AutoStats. Αυτό σημαίνει ότι στατιστικά στοιχεία μπορεί να μην είναι ενημερωμένο afer κάθε 500 τροποποιήσεις εάν προτεραιότητα < 500="" or="" for="" every="" 20%="" of="" changes="" if="" cardinality="" were=""> 500. Δημιουργείται μια κλίμακα μέχρι συντελεστής (τιμή κυμαίνεται από 1 έως 4, 1 και 4 έως) ανάλογα με την επιλεκτικότητα και ενός προϊόντος, του συντελεστή αυτό και τον αριθμό των αλλαγών που λαμβάνονται από τον αλγόριθμο θα είναι ο πραγματικός αριθμός των τροποποιήσεων που απαιτείται για την παραγωγή AutoStats.

Ο αλγόριθμος παραπάνω δύνανται να συνοψιστούν σε μορφή πίνακα:
_________________________________________________________________________________ Table Type | Empty Condition | Threshold When Empty |Threshold When Not Empty _________________________________________________________________________________ Permanent  | < 500 rows      | # of Changes >= 500  | # of Changes >= 500 + (20% of Cardinality)___________________________________________________________________________ Temporary  | < 6 rows        | # of Changes >= 6    | # of Changes >= 500 + (20% of Cardinality)___________________________________________________________________________TableVariables   | Change in cardinality does not affect AutoStats generation.___________________________________________________________________________
Ακολουθούν δύο παραδείγματα για να καταδειχθεί η έννοια αυτή:

Παράδειγμα 1

Εξετάστε τον πίνακα συντακτών της βάσης δεδομένων pubs, που περιέχει γραμμές 23 καιέχει δύο ευρετήρια. Το μοναδικό ευρετήριο συμπλέγματος, UPKCL_auidind, μπαίνει σεέχει μία στήλη, au_id και σύνθετο ότι ένα άλλο ευρετήριο, aunmind,Δημιουργία τις στήλες au_lname και au_fname. Επειδή ο πίνακας αυτός περιέχειλιγότερα από 500 γραμμές, AutoStat θα ξεκινήσει μετά από 500 αλλάζει στον πίνακαΠαρουσιάστηκαν δεδομένα. Οι αλλαγές μπορεί να είναι μία από 500 ή περισσότερα εισάγει, διαγράφει,αλλαγές σε μια στήλη με ευρετήριο όπως au_lname ή οποιονδήποτε συνδυασμό αυτών.

Μπορεί, επομένως, να προβλέψει κατά την ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ κινείται απόπαρακολούθηση της τιμής του sysindexes.rowmodctr, που θα αυξάνεται κατάκάθε ενημερωμένη έκδοση. Όταν φτάνει ή υπερβαίνει τα 500, μπορείτε να περιμένετε την ενημερωμένη ΈΚΔΟΣΗΣτατιστικά ΣΤΟΙΧΕΊΑ για να ξεκινήσετε.

Παράδειγμα 2

Σκεφθείτε έναν δεύτερο πίνακα, t2, που έχει μια προτεραιότητα των 1.000. Για πίνακεςμε μεγαλύτερη από 500 γραμμές, ο SQL Server θα ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ όταν (500+ 20 τοις εκατό) έχουν γίνει αλλαγές. Με τις μαθηματικές, 20 τοις εκατό των 1.000είναι 200, οπότε θα πρέπει να δείτε AutoStat ξεκινήσει μετά από περίπου 700έχουν γίνει τροποποιήσεις στον πίνακα.

Αυτοματοποίηση προσδιορισμό Autostats

Για να αυτοματοποιήσετε τον προσδιορισμό του πότε θα εκτελεστεί AutoStat, να κάνει σταθμοσκόπησητο sysindexes πίνακα και να προσδιορίσετε όταν προσεγγίζετε πίνακα τροποποιήσεις τηςσημείο εκκίνησης. Το ακόλουθο είναι ένα βασικό αλγόριθμο για αυτόν τον τρόπο:
   if (sysindexes.rows > 500)      if (sysindexes.rows * 0.20 >= sysindexes.rowmodctr && production      hours) //500 change leeway         begin            disable autostats            log autostats disable         end      else         begin            stats ok         end   else      if (sysindexes.rowmodctr >= 425) //75 change leeway         begin            disable autostats            log autostats disable         end				

Αργότερα θα μπορούσε να προγραμματίζετε μια εργασία να κάνετε τα εξής:
  • Εκτέλεση ΣΤΑΤΙΣΤΙΚΏΝ ενημερωμένη ΈΚΔΟΣΗ σε όλους τους πίνακες για τα οποία θα ήταν υποχρεωμένοι να απενεργοποιήσετε τους στη διάρκεια της ημέρας.

    - και -
  • Ενεργοποιήστε εκ νέου AutoStat, επειδή κάθε πίνακα τροποποίηση μετρητή θα έχει γίνει επαναφορά σε 0 κατά την εκτέλεση ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ.

Έλεγχος αν ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ εκτελούνται σε έναν πίνακα

Η πιο προφανής λύση σε αυτήν την ερώτηση, όταν AutoStat έχει αποδείξει ότι είναιΕίναι Problematic, για να απενεργοποιήσετε την αυτόματη δημιουργία στατιστικής, αφήνοντας κατά συνέπεια τονα προγραμματίσετε ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ κατά τη διάρκεια μικρότερη διαχειριστές βάσεων δεδομένωνξεκίνησε φορές. Μπορείτε να το κάνετε είτε χρησιμοποιώντας τα στατιστικά ΣΤΟΙΧΕΊΑ της ενημερωμένης ΈΚΔΟΣΗΣδήλωση ή το sp_autostats αποθηκευμένη διαδικασία. Η σύνταξη για την ενημερωμένη ΈΚΔΟΣΗΣΤΑΤΙΣΤΙΚΆ πρόταση είναι:
   UPDATE STATISTICS <table>...with NORECOMPUTE				

Η σύνταξη για την sp_autostats αποθηκευμένη διαδικασία είναι:
sp_autostats <table_name><stats_flag>, <index_name></index_name></stats_flag></table_name>
όπου <stats_flag>είναι είτε "on" ή "off".</stats_flag>

Μπορείτε επίσης να χρησιμοποιήσετε το sp_dboption για να απενεργοποιήσετε την αυτόματη εμφάνιση της ενημερωμένης ΈΚΔΟΣΗΣΣΤΑΤΙΣΤΙΚΆ ή ΔΗΜΙΟΥΡΓΊΑ στατιστικών ΣΤΟΙΧΕΊΩΝ σε επίπεδο ανά βάσης δεδομένων:
sp_dboption <dbname>«Αυτόματη ενημέρωση στατιστικών», <on |="" off=""> </on></dbname>

- ή -

sp_dboption <dbname>, «αυτόματη δημιουργία στατιστικών», <on |="" off=""></on></dbname>

Ελέγχει τον αριθμό των ταυτόχρονων ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ διαδικασιών

Αυτήν τη στιγμή, από απενεργοποίηση AutoStat για συγκεκριμένους πίνακες, δεν είναιείναι δυνατό να ρυθμίσετε τον αριθμό των καταστάσεων αυτόματη ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝπου εκτελούνται ταυτόχρονα (DCR 51539 έχει αρχειοθετηθεί για αυτό). ΤοServer, ωστόσο, να περιορίζουν τον αριθμό των ταυτόχρονων ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝδιαδικασίες για τέσσερις ανά επεξεργαστή.

Τον προσδιορισμό του κατά την εκτέλεση Autostats

Μπορείτε να χρησιμοποιήσετε τη σημαία παρακολούθησης 205 την αναφορά όταν αποθηκεύεται ένα εξαρτώμενο στατιστικά στοιχείαδιαδικασία είναι να μεταγλωττιστούν ξανά ως αποτέλεσμα της AutoStat. Αυτή η σημαία παρακολούθησηςθα γράψει τα ακόλουθα μηνύματα του αρχείου καταγραφής σφαλμάτων:
Μεταγλωττίστε εξέδωσε το 1998-10-15 11:10:51.98 spid9: ProcName: sp_helpindex
75 LineNo: StmtNo: 29
Όταν είναι ενεργοποιημένη η σημαία παρακολούθησης 205, το ακόλουθο μήνυμα θα αγκύλη επίσης τοAutoStat μήνυμα από το 8721 όταν ενημερώνονται οι στατιστικές. Το άνοιγματο μήνυμα η δόση μπορεί να διακριθεί από την τιμή RowModCnt, όπουθα είναι μεγαλύτερο από 0. Δεξιά αγκύλη, μετά την ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ,θα έχει την τιμή 0 RowModCnt:
Αλλαγή σχήματος του 1998-10-15 11:38:43.68 spid8: Tbl Dbid: 7 Objid:
133575514 RowModCnt: 60500 RowModLimit: 60499
Για αυτό το μήνυμα, "rowmodcnt" είναι ο συνολικός αριθμός των τροποποιήσεων τουστον πίνακα. "rowmodlimit" είναι το όριο που, κατά την υπέρβαση του, οδηγεί σε έναΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ εκτέλεση δήλωση για τον πίνακα.

Είναι επίσης δυνατό να ενεργοποιήσετε τη σημαία παρακολούθησης 8721, τα οποία θα αποτύπωση πληροφοριώνστο αρχείο καταγραφής σφαλμάτων του κατά την εκτέλεση AutoStat. Το ακόλουθο είναι έναπαράδειγμα του τύπου μηνύματος που περιμένατε να δείτε:
1998-10-14 16:22:13.21 spid13 AUTOSTATS: ΕΝΗΜΈΡΩΣΗ Tbl: [συντάκτες]
23 Πρόκειται γραμμών: για λειτουργικές μονάδες: 501 όριο: 500 διάρκεια: 47ms UpdCount: 2
Για αυτό το μήνυμα, "Πρόκειται για λειτουργικές μονάδες" είναι ο συνολικός αριθμός των τροποποιήσεων στον πίνακα."Δεσμευμένο" είναι το όριο τροποποίηση, "Διάρκεια" είναι το χρονικό διάστημαπου η πρόταση ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ που απαιτείται για την ολοκλήρωση και "updcount"είναι ο αριθμός των ενημερωμένα στατιστικά στοιχεία.

Μπορείτε επίσης να χρησιμοποιήσετε το Profiler του SQL Server για να προσδιορίσετε πότε ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝΟι προτάσεις που εκτελούνται. Για να το κάνετε αυτό, ακολουθήστε τα παρακάτω βήματα:
  1. Σχετικά με τηνΔημιουργία προφίλμενού, κάντε κλικ στο κουμπίΕργαλεία, και στη συνέχεια κάντε κλικ στο κουμπίΕπιλογές.
  2. Σχετικά με τηνΓενικάμεταβείτε στην καρτέλαΣυμβάντα, και στη συνέχεια επιλέξτεΌλες τις κλάσεις συμβάντων.
  3. Ορισμός μιας νέας παρακολούθησης, και κάτωΣυμβάντα, επιλέξτεΔιάφορα, επιλέξτε τοStats αυτόματη ενημέρωσηSub-Event.
ΣΗΜΕΊΩΣΗ: Εάν πολλά στατιστικά στοιχεία ενημερώνονται από AutoStat, ένα μεγάλο αριθμόμηνύματα μπορούν να εγγραφούν στο αρχείο καταγραφής σφαλμάτων. Καλά να πειραματιστείτε με αυτέςΣημαίες εντοπισμού πριν από τη χρήση τους στην παραγωγή ή διαφορετικά κρίσιμηο διακομιστής.

Κλειδώματα σχήματος

SQL Server χρησιμοποιεί δύο τύπους κλειδωμάτων σχήματος, τα οποία έχουν ληφθείΌταν ενημερώνει τα στατιστικά στοιχεία ενός πίνακα:
   Sch-S: Schema Stability Lock   ----------------------------   This lock ensures that a schema element, such as a table or index, will   not be dropped while any session holds a schema stability lock on the   schema element.   Sch-M-UPD-STATS: Schema Modification Lock   -----------------------------------------   This is a non-blocking lock that is used by the system to ensure that   only one automatic UPDATE STATISTICS process is run against a table at   any given point in time. The sp_lock stored procedure will report this   lock has having a type = TAB, resouce = UPD-STATS and mode = SCH-M.				
Μπορείτε να προβάλετε αυτά τα κλειδώματα εκτελώντας το sp_lock ή επιλέγοντας από τηστον πίνακα syslockinfo.
prodsql δείκτες χωρίς σύμπλεγμα stat εκτινάσσουν off errorlog Profiler διακομιστή SQL

Προειδοποίηση: Αυτό το άρθρο έχει μεταφραστεί αυτόματα

Ιδιότητες

Αναγνωριστικό άρθρου: 195565 - Τελευταία αναθεώρηση: 12/05/2015 09:38:51 - Αναθεώρηση: 2.0

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Workgroup Edition

  • kbnosurvey kbarchive kbinfo kbmt KB195565 KbMtel
Σχόλια