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

Μεταφράσεις άρθρων Μεταφράσεις άρθρων
Αναγν. άρθρου: 195565 - Δείτε τα προϊόντα στα οποία αναφέρεται το συγκεκριμένο άρθρο.
Ανάπτυξη όλων | Σύμπτυξη όλων

Σε αυτήν τη σελίδα

Περίληψη

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

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

Για πληροφορίες σχετικά με autostats στον SQL Server 2000, ανατρέξτε στο θέμα "Στατιστικά στοιχεία χρησιμοποιούνται από τη βελτιστοποίηση ερωτήματος στον Microsoft SQL Server 2000" στην ακόλουθη τοποθεσία του MSDN στο Web:
.aspx http://msdn2.Microsoft.com/en-us/library/aa902688 (SQL.80)


ΣημείωσηΕάν χρησιμοποιείτε το Microsoft SQL Server 2005, ανατρέξτε την ακόλουθη λευκή βίβλο της Microsoft για πληροφορίες σχετικά με τον τρόπο χρήσης των στατιστικών στοιχείων από τη βελτιστοποίηση ερωτήματος σε SQL Server 2005:
http://technet.Microsoft.com/en-us/library/cc966419.aspx

Περισσότερες πληροφορίες

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

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)
___________________________________________________________________________
Table
Variables   | 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.

Ιδιότητες

Αναγν. άρθρου: 195565 - Τελευταία αναθεώρηση: Πέμπτη, 27 Ιανουαρίου 2011 - Αναθεώρηση: 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
Λέξεις-κλειδιά: 
kbinfo kbmt KB195565 KbMtel
Μηχανικά μεταφρασμένο
ΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης.
Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:195565

Αποστολή σχολίων

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com