Wie oft sollten wir Update Statistcs verwenden (häufiger oder nicht)


7

Normalerweise verwenden wir die Lösung von Ola Hallengren, die sich um die Aktualisierung der Statistiken kümmert, die sich im Indexoptimierungsjob befinden, den wir haben. Wir haben es für jeden Sonntag Mitternacht auf allen Servern (1500+) als Standardpraxis geplant.

Jetzt gibt es einige Server, auf denen Mitte der Woche viele Leistungsprobleme auftreten, und wir führen sp_updatestats für diese bestimmte Datenbank aus, wenn ein Vorfall aufgrund von Leistungsproblemen ausgelöst wird. Wir haben eine riesige Umgebung mit allen verwendeten Versionen, 2000 bis 2016. In den Versionen 2012 und 2014 haben wir die Aktualisierungsstatistiken für bestimmte Datenbanken Mitte der Woche manuell ausgeführt.

Vor kurzem mussten wir aufgrund wiederkehrender Probleme auch sp_updatestats für jeden Tag für einige sehr aktive Datenbanken planen.

Meine Fragen :

  1. Wie oft sollten wir es geplant haben?
  2. Was sind die Nachteile, wenn man es zu oft plant?
  3. Gibt es eine Möglichkeit, die Nachteile zu umgehen, wenn die regelmäßigen Updates so häufig ausgeführt werden, wie ich gehört habe, dass das Kompilieren länger dauert und die Leistung für einige Zeit beeinträchtigt werden kann?

Bitte helfen Sie mir mit den Erfahrungen, die Sie damit gemacht haben.

Antworten:


5

Wie oft sollten wir es geplant haben?

Sie müssen dies selbst entscheiden.

  • Dies hängt von der Änderung (Einfügen, Aktualisieren, Löschen) Ihrer Spalten ab, die sich auf die betreffende Statistik beziehen. Sie können mein Skript TSQL verwenden, um den Status von SQL Server-Statistiken zu ermitteln und die Anzahl der Zeilen zu ermitteln, die seit der letzten Aktualisierung der Statistiken geändert wurden.
  • Ist Ihre Statistik für die automatische Aktualisierung aktiviert?
  • Größe Ihrer Tabelle aufgrund des Schwellenwerts, wenn Statistiken zur automatischen Aktualisierung ausgelöst werden. Das Verständnis, wann Statistiken von Erin Stellato automatisch aktualisiert werden, wird ausführlich erläutert.
  • Wenn Sie feststellen, dass Ihre Statistiken zur automatischen Aktualisierung nicht gut genug sind, sollten Sie die Statistiken manuell aktualisieren.
  • Wenn Sie große Tabellen für die Version vor 2014 haben, ziehen Sie das Trace-Flag 2371 in Betracht. Beachten Sie, dass dies in SQL 2016 die Standardeinstellung ist. Erik Darling spricht in Änderungen an Schwellenwerten für die automatische Aktualisierung von Statistiken in SQL Server 2016 darüber .

Was sind die Nachteile, wenn man es zu oft plant?

Kendra Little erklärt in UPDATE STATISTICS: Die geheime IO-Explosion mit einigen Tipps, wie Sie dasselbe effizienter machen können.

Gibt es eine Möglichkeit, die Nachteile zu umgehen, wenn die regelmäßigen Updates parallel ausgeführt werden?

Wenn Sie Update-Statistiken parallel ausführen möchten, empfehle ich zwei Dinge, die Sie beachten sollten.

  1. Führen Sie keine Statistiken aus derselben Tabelle parallel aus, da dies zu Blockierungen führen kann. Dies hat sich seit SQL 2014 verbessert. Weitere Informationen finden Sie unter Verbesserte Unterstützung für die Neuerstellung paralleler Statistiken von Jonathan Kehayias und unter Verbessern der Leistung von Aktualisierungsstatistiken mit SQL 2014 und SQL 2016 von Parikshit Savjani vom Microsoft Tiger Team.
  2. Die Scanphase der Aktualisierungsstatistik verläuft parallel und wurde in SQL 2016 verbessert. Seien Sie vorsichtig mit der Anzahl der parallel ausgeführten Sitzungen. Dies kann dazu führen, dass andere Sitzungen auf verfügbare Scheduler warten. Weitere Informationen finden Sie im entsprechenden Update zur parallelen Statistik für Fragen und Antworten .

Basierend auf der Bearbeitung Ihrer Frage Nummer 3 schlage ich vor, dass Sie Auto Update Stats Async Enabled lesen .

Zusätzliche Ressourcen:


1

Index-Reorgs (ALTER INDEX REORG) aktualisieren Statistiken nicht wie Index-Neuerstellungen, und einzelne Index-Neuerstellungen (ALTER INDEX myIndex REBUILD) aktualisieren nur die Statistiken für diesen Index.

Wenn Sie Index-Reorgs durchführen (basierend auf dem Fragmentierungsprozentsatz usw.), sollten Sie dies mit einem Aktualisierungsstatistikprozess kombinieren, zumindest für Indizes mit Statistiken, die in der Index-Reorg nicht aktualisiert wurden (überprüfen Sie sys. dm_db_stats_properties):

declare @tablename sysname = 'myTable';
select t.object_id, t.name, s.stats_id, p.last_updated
from sys.tables t
join sys.stats s
  on t.object_id = s.object_id
cross apply sys.dm_db_stats_properties(s.object_id, s.stats_id) p
where t.name = @tablename;

Vielen Dank, John, aber ich verwende die Ola Hellengren-Lösung und sie führt die Aktualisierungsstatistik genau so aus, wie sie sein sollte. Es aktualisiert Statistiken für alle Datenbanken oder die ausgewählten Datenbanken, je nachdem, wie Sie sie ändern. ola.hallengren.com/…
Ramakant Dadhichi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.