Αναγν. άρθρου: 195565 - Τελευταία αναθεώρηση: Πέμπτη, 27 Ιανουαρίου 2011 - Αναθεώρηση: 2.0 Λειτουργία συντήρησης στατιστικών (autostats) στον SQL Server
Σε αυτήν τη σελίδαΠερίληψηΕνδέχεται η λειτουργικότητα νέες στατιστικές συντήρησης, AutoStat,
Δημιουργία ανεπιθύμητων επιβάρυνση σε ένα σύστημα παραγωγής, εκτελώντας μία από τις
παρακάτω ενέργειες:
Για πληροφορίες σχετικά με autostats στον SQL Server 2000, ανατρέξτε στο θέμα "Στατιστικά στοιχεία χρησιμοποιούνται από τη βελτιστοποίηση ερωτήματος στον Microsoft SQL Server 2000" στην ακόλουθη τοποθεσία του MSDN στο Web: .aspx http://msdn2.Microsoft.com/en-us/library/aa902688 (SQL.80)
(http://msdn2.microsoft.com/en-us/library/aa902688(SQL.80).aspx)
ΣημείωσηΕάν χρησιμοποιείτε το Microsoft SQL Server 2005, ανατρέξτε την ακόλουθη λευκή βίβλο της Microsoft για πληροφορίες σχετικά με τον τρόπο χρήσης των στατιστικών στοιχείων από τη βελτιστοποίηση ερωτήματος σε SQL Server 2005: http://technet.Microsoft.com/en-us/library/cc966419.aspx
(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 επανέρχεται στο 0 και ενημερώνεται η έκδοση της διάταξης του πίνακα στατιστικών στοιχείων. Περαιτέρω, στις περιπτώσεις στις οποίες είναι σχεδίου εκτέλεσης μιας αποθηκευμένης διαδικασίας λαμβάνονται από το χώρο προσωρινής αποθήκευσης και το σχέδιο αυτό είναι ευαίσθητα στις στατιστικές, τα στατιστικά στοιχεία η έκδοση της διάταξης θα συγκριθεί με την τρέχουσα έκδοση. Εάν υπάρχουν νέα Στατιστικά στοιχεία είναι διαθέσιμα, το σχέδιο για την αποθηκευμένη διαδικασία θα να μεταγλωττιστούν ξανά. Ο βασικός αλγόριθμος για αυτόματη ενημέρωση στατιστικών είναι:
ΣΗΜΕΊΩΣΗ: Εκτός από την προτεραιότητα, της επιλεκτικότητας των το κατηγόρημα επηρεάζει επίσης γενιάς 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 πίνακα και να προσδιορίσετε όταν προσεγγίζετε πίνακα τροποποιήσεις της σημείο εκκίνησης. Το ακόλουθο είναι ένα βασικό αλγόριθμο για αυτόν τον τρόπο:Αργότερα θα μπορούσε να προγραμματίζετε μια εργασία να κάνετε τα εξής:
Έλεγχος αν ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ εκτελούνται σε έναν πίνακαΗ πιο προφανής λύση σε αυτήν την ερώτηση, όταν AutoStat έχει αποδείξει ότι είναι Είναι Problematic, για να απενεργοποιήσετε την αυτόματη δημιουργία στατιστικής, αφήνοντας κατά συνέπεια το να προγραμματίσετε ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ κατά τη διάρκεια μικρότερη διαχειριστές βάσεων δεδομένων ξεκίνησε φορές. Μπορείτε να το κάνετε είτε χρησιμοποιώντας τα στατιστικά ΣΤΟΙΧΕΊΑ της ενημερωμένης ΈΚΔΟΣΗΣ δήλωση ή το sp_autostats αποθηκευμένη διαδικασία. Η σύνταξη για την ενημερωμένη ΈΚΔΟΣΗ ΣΤΑΤΙΣΤΙΚΆ πρόταση είναι:Η σύνταξη για την 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 Αλλαγή σχήματος του 1998-10-15 11:38:43.68 spid8: Tbl Dbid: 7 Objid: 133575514 RowModCnt: 60500 RowModLimit: 60499 Είναι επίσης δυνατό να ενεργοποιήσετε τη σημαία παρακολούθησης 8721, τα οποία θα αποτύπωση πληροφοριών στο αρχείο καταγραφής σφαλμάτων του κατά την εκτέλεση AutoStat. Το ακόλουθο είναι ένα παράδειγμα του τύπου μηνύματος που περιμένατε να δείτε: 1998-10-14 16:22:13.21 spid13 AUTOSTATS: ΕΝΗΜΈΡΩΣΗ Tbl: [συντάκτες] 23 Πρόκειται γραμμών: για λειτουργικές μονάδες: 501 όριο: 500 διάρκεια: 47ms UpdCount: 2 Μπορείτε επίσης να χρησιμοποιήσετε το Profiler του SQL Server για να προσδιορίσετε πότε ΕΝΗΜΈΡΩΣΗ ΣΤΑΤΙΣΤΙΚΏΝ Οι προτάσεις που εκτελούνται. Για να το κάνετε αυτό, ακολουθήστε τα παρακάτω βήματα:
Κλειδώματα σχήματος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. Οι πληροφορίες σε αυτό το άρθρο ισχύουν για:
Μηχανικά μεταφρασμένοΣΗΜΑΝΤΙΚΟ: Αυτό το άρθρο είναι προϊόν λογισμικού μηχανικής μετάφρασης της Microsoft και όχι ανθρώπινης μετάφρασης. Η Microsoft σάς προσφέρει άρθρα που είναι προϊόντα ανθρώπινης αλλά και μηχανικής μετάφρασης έτσι ώστε να έχετε πρόσβαση σε όλα τα άρθρα της Γνωσιακής Βάσης μας στη δική σας γλώσσα. Ωστόσο, ένα άρθρο που έχει προκύψει από μηχανική μετάφραση δεν είναι πάντα άριστης ποιότητας. Ενδέχεται να περιέχει λεξιλογικά, συντακτικά ή γραμματικά λάθη, όπως ακριβώς τα λάθη που θα έκανε ένας μη φυσικός ομιλητής επιχειρώντας να μιλήσει τη γλώσσα σας. Η Microsoft δεν φέρει καμία ευθύνη για τυχόν ανακρίβειες, σφάλματα ή ζημίες που προκύψουν λόγω τυχόν παρερμηνειών στη μετάφραση του περιεχομένου ή χρήσης του από τους πελάτες της. Επίσης, η Microsoft πραγματοποιεί συχνά ενημερώσεις στο λογισμικό μηχανικής μετάφρασης. Η αγγλική έκδοση αυτού του άρθρου είναι η ακόλουθη:195565
(http://support.microsoft.com/kb/195565/en-us/
)
| Άλλοι πόροι Tοποθεσίες υποστήριξης
ΚοινότηταΆμεση λήψη βοήθειαςΜεταφράσεις άρθρων
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


Επιστροφή στην αρχή
