Dieses Blog durchsuchen

Mittwoch, 8. Juli 2015

Update Statistics und Statistikeinstellungen generell


Mittels dem Befehl UPDATE STATISTICS werden die Statistikwerte einer Tabelle aktualisiert. Dies wirkt sich auf den berechneten Zugriffsplan bei Abfragen aus. Sind die Statistiken nicht aktuell, kann es sein, dass mitunter ein (sehr) schlechter Zugriffsplan vom Optimizer errechnet wird, welcher zu massiv langsameren Abfragen führen kann.
Jedoch benötigt auch das Aktualisieren ebendieser Statistiken Zeit. Hier muss man selbst abwägen, ob der Zeitaufwand für die Statistikaktualisierung sich gegenüber der verbesserten Abfragezeit überhaupt rentiert. 

Syntax:

UPDATE STATISTICS table_or_indexed_view_name 
    [ 
        { 
            { index_or_statistics__name }
          | ( { index_or_statistics_name } [ ,...n ] ) 
                }
    ] 
    [    WITH 
        [ 
            FULLSCAN 
            | SAMPLE number { PERCENT | ROWS } 
            | RESAMPLE 
              [ ON PARTITIONS ( {  |  } [, …n] ) ]
            |  [ ,...n ]
        ] 
        [ [ , ] [ ALL | COLUMNS | INDEX ] 
        [ [ , ] NORECOMPUTE ] 
        [ [ , ] INCREMENTAL = { ON | OFF } ]
    ] ;

 ::=
    [ STATS_STREAM = stats_stream ]
    [ ROWCOUNT = numeric_constant ]
    [ PAGECOUNT = numeric_contant ]


Genaue Informationen gibt es im MSDN - Microsoft Developer Network
Update Statistics Information in MSDN


Standardmäßig werden Statistikupdates automatisch durchgeführt.  Dies wird über über die Tabelle sys.databases gesteuert.
Um die aktuellen Einstellungen zu prüfen, einfach folgendes Statement ausführen:


SELECT name, is_auto_update_stats_on, is_auto_update_stats_async_on 
FROM sys.databases

Die Option auto_update_stats_async_on beeinflusst, wie die Statistiken aktualisiert werden. Ist diese Option eingeschalten, wartet der Query Optimizer nicht auf aktuelle Statistikwerte, sondern führt die Query zuerst durch und aktualisiert die Statistiken erst anschließend. Die Query läuft somit mit den aktuell vorhandenen Werten, was natürlich zu suboptimalen Abfrageplänen führen kann. Mittels unten angeführten SQLs können die Einstellungen verändert werden.

ALTER DATABASE YourDBName 
SET AUTO_UPDATE_STATISTICS_ASYNC ON
--
ALTER DATABASE YourDBName 
SET AUTO_UPDATE_STATISTICS ON

Bei Online-Transaktions-Umgebungen wird empfohlen, das asynchrone updaten einzuschalten, im Bereich DataWarehouse nicht. Veränderungen an diesem Parameter können auch zu unvorhersehbaren Nachteilen führen - speziell wenn beide oben angeführte Bewirtschaftungstypen gemischt genutzt werden.

Keine Kommentare:

Kommentar veröffentlichen