Gibt es einen Grund, die Statistiken manuell zu aktualisieren?

19

In SQL Server werden Statistiken automatisch aktualisiert , wenn Auto Update Statisticsin True(das ist die Standardeinstellung). Gibt es einen Grund, die Statistiken manuell zu aktualisieren und unter welchen Umständen?

jrara
quelle

Antworten:

21

Sicher, wenn sich Ihre Daten häufiger ändern als die Rate der automatischen Statistiken (oder Sie beispielsweise <20% der Zeilen häufig aktualisieren, z. B. Status- oder Datums- / Zeitstempel). Oder wenn Ihre Tabelle sehr groß ist und sich nicht genug ändert, um automatische Statistikaktualisierungen auszulösen. Oder wenn Sie Indizes gefiltert haben ( da der Schwellenwert für die automatische Statistik immer noch auf dem Prozentsatz der Änderung in der gesamten Tabelle basiert, nicht auf dem Prozentsatz der Änderung der Teilmenge der Zeilen im gefilterten Index ).

Aaron Bertrand
quelle
+1 für gefilterte Indizes. Ich denke, das ist der Hauptgrund, oder bei SEHR großen Datenmengen. Ich habe Tabellen, in die ich monatlich 30 Millionen Zeilen einfüge, aber das ist ein kleiner Prozentsatz, damit die Statistiken normalerweise nicht aktualisiert werden, es sei denn, ich starte sie manuell.
JNK,
+1 Wenn Sie die Zähler nach einem Zeitplan zurücksetzen, haben Sie weniger Chancen außerhalb Ihres Wartungsfensters.
11.02.12
7

Noch ein paar (oberflächliche) Gründe:

Auto-Update-Statistiken blockieren die Abfrage, die das Update ausgelöst hat, bis die neuen Statistiken fertig sind.

... es sei denn, Sie aktivieren die automatische Aktualisierung von Statistiken asynchron. Dann wartet die Abfrage, die das Update ausgelöst hat, nicht auf die neuen Statistiken, sondern wird möglicherweise mit den alten, falschen Statistiken ausgeführt.

Ich hatte auch einige seltsame Blockierungsprobleme, als eine Datenbank mit relativ großen Tabellen (44 MB Zeilen, 8,5 GB) anfing, Statistiken zu aktualisieren. Wir haben diese Anwendung stillgelegt, bevor ich wirklich nachvollziehen konnte, was los war.

db2
quelle
1
+1 Das ist ein großartiger Punkt in Bezug auf das Blockieren und die asynchrone Option.
Aaron Bertrand