Select the product you need help with
INF: Funktionsweise der automatischen Statistikaktualisierung von SQL Server 7.0Artikel-ID: 195565 - Produkte anzeigen, auf die sich dieser Artikel bezieht Dieser Artikel wurde zuvor veröffentlicht unter D195565 Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base: 195565
(http://support.microsoft.com/kb/195565/en-us/
)
INF: How SQL Server 7.0 Autostats WorkAuf dieser SeiteZusammenfassung
Die neu eingeführte Funktionalität für die Wartung statistischer Werte, die AutoStats-Prozedur, erzeugt möglicherweise nicht erwünschten Zusatzaufwand auf einem Produktionssystem, indem eine der folgenden Aktionen ausgeführt wird:
Weitere InformationenAllgemeine InformationenSQL Server verwendet einen kostenbasierten Optimierer, der möglicherweise sehr sensibel auf statistische Informationen zu Tabellen und Indizes reagiert. Ohne korrekte und aktuelle statistische Informationen geht SQL Server eventuell davon aus, der beste Plan für die Ausführung einer bestimmten Abfrage müsse bestimmt werden.Zu den Statistiken, die in jeder Tabelle in SQL Server 7.0 gewartet werden, um den Optimierer bei der kostenbasierten Entscheidungsfindung zu unterstützen, gehören Folgende:
Um die statistischen Informationen so aktuell wie möglich zu halten, enthält SQL Server 7.0 die Prozedur AutoStats, die über die SQL Server-Überwachungsfunktion für Tabellenänderungen die Statistik für eine Tabelle automatisch aktualisieren kann, wenn ein bestimmter Änderungsschwellenwert erreicht wurde. Zusätzlich wird mit SQL Server 7.0 die automatische Statistikerstellung eingeführt, die den Server veranlasst, automatisch alle für die akkurate Optimierung einer bestimmten Abfrage erforderlichen Statistiken zu erzeugen. Bestimmen bevorstehender automatischer StatistikaktualisierungenWie bereits erwähnt, aktualisiert die AutoStats-Prozedur automatisch die Statistik für eine bestimmte Tabelle, wenn ein Änderungsschwellenwert erreicht wurde. Die Spalte Sysindexes.rowmodctr verwaltet eine laufende Summe aller Änderungen in einer Tabelle, die sich mit der Zeit nachteilig auf den Entscheidungsprozess des Abfrageprozessors auswirken können. Dieser Zähler wird aktualisiert, wenn eines der folgenden Ereignisse auftritt:
Nach dem Aktualisieren der Tabellenstatistik wird der Wert rowmodctr auf 0 zurückgesetzt, und die Schemaversion der Tabellenstatistik wird aktualisiert. Darüber hinaus wird in Situationen, in denen ein leicht auf Statistiken reagierender Ausführungsplan für eine gespeicherte Prozedur aus dem Cache entnommen wird, die Schemaversion der Statistik mit der aktuellen Version verglichen. Wenn eine neue Statistik verfügbar ist, wird der Plan für die gespeicherte Prozedur erneut kompiliert. Der Basisalgorithmus für die automatische Statistikaktualisierung lautet wie folgt:
Die beiden folgenden Beispiele sollen dieses Konzept veranschaulichen: Beispiel 1Betrachten Sie die Tabelle Authors in der Datenbank Pubs, die 23 Zeilen und zwei Indizes enthält. Der eindeutige gruppierte Index UPKCL_auidind wird für die Spalte au_id indiziert, und der zusammengesetze, nicht gruppierte Index aunmind wird in den Spalten au_lname und au_fname erstellt. Da diese Tabelle weniger als 500 Zeilen enthält, beginnt die AutoStat-Prozedur nach 500 Änderungen an den Tabellendaten. Bei den Änderungen kann es sich um eine von mehr als 500 Einfüge-, Lösch- oder Änderungsaktionen in einer indizierten Spalte wie au_lname handeln, jedoch auch um eine Kombination mehrerer Aktionen.Sie können daher vorhersagen, wann UPDATE STATISTICS initiiert wird, indem Sie den Wert sysindexes.rowmodctr überwachen, der bei jeder Aktualisierung steigt. Erreicht oder übersteigt der Wert 500, können Sie damit rechnen, dass UPDATE STATISTICS beginnt. Beispiel 2Nehmen Sie jetzt eine zweite Tabelle T2 an, die eine Kardinalität von 1.000 hat. Bei Tabellen mit mehr als 500 Zeilen beginnt SQL Server 7.0 den UPDATE STATISTICS-Vorgang nach (500 + 20%) Änderungen. Da sich als 20% von 1.000 der Wert 200 ergibt, können Sie davon ausgehen, dass die AutoStats-Prozedur nach etwa 700 Änderungen in der Tabelle begonnen wird.Automatisieren der Zeitpunktbestimmung automatischer StatistikaktualisierungenUm das Bestimmen des Zeitpunkts zu automatisieren, an dem die AutoStats-Prozedur ausgeführt wird, können Sie die Tabelle Sysindexes abrufen und festlegen, wann Tabellenänderungen den Startpunkt erreichen. Dies ist ein entsprechender Basisalgorithmus:Sie können zu einem späteren Zeitpunkt einen Auftrag planen, der Folgendes ausführt:
Steuern der Ausführung von UPDATE STATISTICS für eine TabelleWenn sich die AutoStats-Prozedur als problematisch erwiesen hat, besteht die nahe liegendste Lösung für diese Frage im Deaktivieren der automatischer Statistikerzeugung, so dass der Datenbankadministrator die Möglichkeit hat, UPDATE STATISTICS-Prozesse für ruhigere Zeiten zu planen. Sie können dazu die UPDATE STATISTICS-Anweisung oder die gespeicherte Prozedur sp_autostats verwenden. Die Syntax für die UPDATE STATISTICS-Anweisung lautet:Die Syntax für die gespeicherte Prozedur sp_autostats lautet: sp_autostats <Tabellenname>, <stats_flag>, <Indexname> wobei <stats_flag> entweder "on" oder "off" sein kann. Sie können auch sp_dboption verwenden, um das automatische Auftreten von UPDATE STATISTICS oder CREATE STATISTICS für einzelne Datenbanken zu deaktivieren: sp_dboption <Datenbankname>,'auto update statistics', <on | off> - Oder - sp_dboption <Datenbankname>,'auto create statistics', <on | off> Steuern der Anzahl gleichzeitiger UPDATE STATISTICS-ProzesseDerzeit ist es außer durch Deaktivieren der automatischen Statistikaktualisierung für bestimmte Tabellen nicht möglich, die Anzahl der automatischen UPDATE STATISTICS-Anweisungen zu konfigurieren, die gleichzeitig ausgeführt werden (dies wurde in DCR 51539 aufgenommen). Der Server beschränkt jedoch die Anzahl gleichzeitiger UPDATE STATISTICS-Prozesse auf vier pro Prozessor.Festlegen der Ausführungszeitpunkte automatischer StatistikaktualisierungenSie können Ablaufverfolgungsflag 205 verwenden, um zu berichten, wenn eine von der Statistik abhängige gespeicherte Prozedur infolge einer automatischen Statistikaktualisierung erneut kompiliert wird. Dieses Ablaufverfolgungsflag schreibt folgende Meldung in das Fehlerprotokoll:1998-10-15 11:10:51.98 spid9 Recompile issued : ProcName: sp_helpindex LineNo: 75 StmtNo: 29 Wenn Ablaufverfolgungsflag 205 deaktiviert ist, wird die von 8721 erstellte Meldung der automatischen Statistikaktualisierung auch von dieser Meldung umgeben, wenn die Statistiken aktualisiert werden. Die vorangestellte Nachricht kann am Wert RowModCnt erkannt werden, der größer als 0 ist. Die nachgestellte Nachricht nach UPDATE STATISTICS hat einen RowModCnt-Wert von 0: 1998-10-15 11:38:43.68 spid8 Schema Change: Tbl Dbid: 7 Objid: 133575514 RowModCnt: 60500 RowModLimit: 60499 In dieser Meldung steht "RowModCnt" für die Gesamtanzahl der Änderungen in der Tabelle. "RowModLimit" ist der Schwellenwert, bei dessen Überschreiten die Anweisung UPDATE STATISTICS für die Tabelle ausgeführt wird. Es ist auch möglich, den Ablaufverfolgungsflag 8721 zu aktivieren, der Informationen im Fehlerprotokoll abbildet, wenn eine automatische Statistikaktualisierung ausgeführt wurde. Folgendes ist ein Beispiel des zu erwartenden Meldungstyps: 1998-10-14 16:22:13.21 spid13 AUTOSTATS: UPDATED Tbl: [authors] Rows: 23 Mods: 501 Bound: 500 Duration: 47ms UpdCount: 2 In dieser Meldung steht "Mods" für die Gesamtanzahl der Änderungen in der Tabelle. "Bound" ist der Änderungsschwellenwert, "Duration" ist die zum Abschließen der UPDATE STATISTICS-Anweisung erforderliche Dauer, und "UpdCount" ist die Anzahl der aktualisierten Statistikwerte. Sie können auch SQL Server Profiler dazu verwenden, den Ausführungszeitpunkt der UPDATE STATISTICS-Anweisungen festzustellen. Führen Sie dazu die folgenden Schritte aus:
SchemasperrenSQL Server 7.0 verwendet zwei Typen von Schemasperren, die beide bei der Aktualisierung einer Statistik für eine Tabelle verwendet werden werden:Sch-S: Schemastabilitätssperre ---------------------------- Diese Sperre stellt sicher, dass ein Schemaelement wie eine Tabelle oder ein Index nicht abgelegt wird, während eine Sitzung eine Schemastabilitätssperre auf das Schemaelement anwendet. Sch-M-UPD-STATS: Schemaänderungssperre ----------------------------------------- Diese Sperre hat keine Blockierungsfunktion und wird vom System verwendet, um sicherzustellen, dass für eine Tabelle nur ein automatischer UPDATE STATISTICS-Prozess zur Zeit ausgeführt wird. Die gespeicherte Prozedur sp_lock meldet diese Sperre, als sei sie vom Typ = TAB, Ressource = UPD-STATS und Modus = SCH-M. Sie können diese Sperren anzeigen, indem Sie sp_lock ausführen oder sie in der Syslockinfo-Tabelle auswählen. Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung. EigenschaftenArtikel-ID: 195565 - Geändert am: Montag, 24. Juli 2000 - Version: 1.0
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.
| SPRACHE AUSWÄHLEN
|


Zum Anfang








