Ich habe mich kürzlich mit der Pflege einer Reihe von Datenbanken mit einigen interessanten Indexproblemen befasst. Einer der Gründe, die mich am meisten erschweren, sind die Unterschiede in den Indizes zwischen Entwicklungs-, Test-, Modell- und Produktionsmaschinen. Da die Unterschiede das Synchronisieren von Abfragen ziemlich schwierig machen, ist dies eines meiner ersten Projekte.
Beim Vergleich der Test- und Modellumgebungen habe ich festgestellt, dass die meisten Indizes in der Modellumgebung auf STATISTICS_NORECOMPUTE
eingestellt sind, ON
während dies bei den Testindizes nicht der Fall ist . In allen Umgebungen gibt es einen nächtlichen Job, der die Statistiken aller Datenbanken aktualisiert.
Ich habe mich noch nie damit befasst. STATISTICS_NORECOMPUTE
Hier sind meine Fragen. Gibt es Best Practices für den Umgang mit dieser Einstellung? Wenn ich am Ende des Tages Statistikaktualisierungen durchführe, ist es am besten, STATISTICS_NORECOMPUTE
alle Umgebungen in allen Indizes einzuschalten? Oder gibt es einen guten Grund, dies nicht zu tun?
EDIT: Ich habe hier einen von Kimberly Tripps Blogs zu diesem Thema gefunden , der darauf hindeutet, dass er STATISTICS_NORECOMPUTE
bestenfalls sparsam verwendet werden sollte. Aber ich bin immer noch besorgt darüber, es global auszuschalten. Hat jemand dies versucht und was haben sie erlebt?
quelle
Antworten:
Es ist wirklich eine situative Sache, die Sie pro Tabelle oder pro Index betrachten möchten, und Sie müssen wirklich herausfinden, was in der Produktion ist, bevor Sie Maßnahmen ergreifen. Verwenden Sie im Zweifelsfall die Produktion auch in anderen Umgebungen, auch wenn dies eine Reihe verrückter Einstellungen bedeutet. Man kann einfach kein gutes Gefühl dafür bekommen, wie sich die Produktion verhält, wenn die Dinge in Test oder Entwicklung anders sind.
Wie auch immer, die allgemeine Empfehlung, die Statistiken für die automatische Aktualisierung
STATISTICS_NORECOMPUTE = OFF
aktiviert zu lassen ( dies ist die Standardeinstellung), gilt aus Sicherheitsgründen. Wenn diese Option deaktiviert ist und die Statistiken nicht manuell aktualisiert werden, kann dies zu wirklich schrecklichen Ausführungsplänen führen, die sich nie ändern nachdem sie zum ersten Mal erstellt wurden (und später aus anderen Gründen nicht ungültig werden).Sie sagten, dass die Statistiken für die automatische Aktualisierung für die meisten Indizes deaktiviert sind (ich glaube, ich habe das ursprünglich wie alle falsch verstanden , nicht die meisten ). Ist diese Einstellung für die Indizes mit noch aktivierten Statistiken für die automatische Aktualisierung angesichts der Aktivität in diesen Tabellen sinnvoll? Ich würde erwarten, dass dies Tabellen mit höherer Aktivität sind. Es ist möglich, dass viel Arbeit darauf verwendet wurde, dies herauszufinden, und es kann sich lohnen, diese Einstellungen beizubehalten (oder stark zu berücksichtigen). Notieren Sie sich zumindest, um welche Statistiken es sich handelt, da diese Informationen später nützlich sein können.
Wenn ich mehr darüber nachdenke, werde ich sagen, dass die aktuelle Strategie Sinn macht. Ist es besser, als die Statistiken für die automatische Aktualisierung für alles aktiviert zu lassen? Es scheint, dass jemand dies so gedacht hat, dass es sich gelohnt hat, einen einfachen SQL Agent-Job zu haben.
Wenn die Idee bestand, neue Statistiken verfügbar zu haben, ohne Abfragen zu blockieren (wie diese ), können Sie die automatische Aktualisierung für alles wieder aktivieren und dann auch aktivieren
AUTO_UPDATE_STATISTICS_ASYNC
. Ändern Sie dann wahrscheinlich den Jobplan so, dass er einmal pro Woche statt täglich ausgeführt wird, da die Statistiken weiterhinWITH FULLSCAN
regelmäßig aktualisiert werden sollen.Ich könnte es jedoch einfach belassen, da Sie wahrscheinlich größere Fische zum Braten haben, wenn die Indizes selbst zwischen den Umgebungen unterschiedlich sind und die Neuerstellungen der Statistiken nicht zu schmerzhaft sind. Was jetzt da ist, macht Sinn; Sie müssen nur die Dinge in allen Umgebungen konsistent machen. Es ist wahrscheinlich geringfügig besser als die einfacheren Einstellungen, die ich vorgeschlagen habe, auf Kosten von mehr Arbeit. Aber finden Sie heraus, was in der Produktion ist, nutzen Sie dies und gehen Sie zu wichtigeren Dingen über. Wiederholen Sie diesen Vorgang, wenn Sie die Leistung genauer einstellen müssen. Die besten Statistiken der Welt speichern keine Abfrage, bei der ein kritischer Index fehlt.
quelle