Rychlost Helios Orange - Aktualizace statistik

PříspěvekNapsal: 16.10.2009 15:50
od jiri.dolezal
Aktualizace statistik (Helios Orange > Možnosti - Konfigurace... > Systémové konstanty > {pravá myš} > aktualizace statistik) je akce, při které se pro každou tabulku, view s clusterovaným indexem nebo hromadu (HEAP) (@id) spouští tento T-SQL příkaz:

Kód: Vybrat vše
DECLARE @e NVARCHAR(4000),@id INT
DECLARE c CURSOR LOCAL FAST_FORWARD FOR SELECT id FROM dbo.sysindexes WHERE indid<2 AND OBJECTPROPERTY(id,'TableIsFake')=0 AND OBJECTPROPERTY(id,'IsSystemTable')=0 ORDER BY rows DESC
OPEN c
WHILE 1=1 BEGIN
FETCH NEXT FROM c INTO @id
IF @@fetch_status<>0 BREAK
SET @e='UPDATE STATISTICS '+QUOTENAME(USER_NAME(OBJECTPROPERTY(@id,'OwnerId')))+'.'+QUOTENAME(OBJECT_NAME(@id))+' WITH FULLSCAN'
EXEC(@e)
END
DEALLOCATE c


Statistiky používá MS SQL Server ve svém vnitřním mechanismu (Query Optimizer) k vyhodnocení nejefektivnější cesty pro získání nebo aktualizaci dat.

Tato akce tedy může být jednou z cest, jak zlepšít odezvu SQL Serveru, potažmo jeho rychlost v případě aktuálních výkonnostních problémů (např. způsobeném hromadným importem / výmazem dat).

Má-li databáze nastavenu vlastnost Auto Create Statistics a Auto Update Statistcs není důvod ji spouštět pravidelně.

Je-li součástí údržbových operací pravidelná re-indexace (REBUILD) indexů - je aktualizace statistik indexů jeho součástí, tzn. není důvod ji duplicitně znovu spoustět.

Výborné informace ke statistikám formou otázka - odpověď lze nalézt zde.

Rychlost Helios Orange - Smazání statistik

PříspěvekNapsal: 30.10.2009 10:36
od jan.havranek
Pouhá aktualizace statistik nemusí mít za všech okolností stejný efekt. Pokud se zdá že samotná aktualizace příliš nepomohla, je možné všechny statistiky smazat a nechat je postupně (za chodu) nebo ad hoc (aktualizací) znovu vytvořit.
Statistiky ovlivňují Execution plan uložených procedur a tím i rychlost odezvy.

Následujícími kroky se statistiky smažou a poté se vytvoří nové podle aktuálního stavu databáze a nebudou nadále vycházet z původních nacashovaných hodnot.

1/ tento SELECT zobrazí všechny aktuální statistiky (včetně systémových)
Kód: Vybrat vše
/* zobraz statistiky */
SELECT name,id
FROM sysindexes
WHERE INDEXPROPERTY(id,name,'IsStatistics')=1

2/ tento skript smaže statistiky pro objekty Helios Orange
Kód: Vybrat vše
/* smaž statistiky */
DECLARE @name NVARCHAR(4000),@p INT
DECLARE c CURSOR LOCAL FOR
   SELECT name,id
   FROM sysindexes
   WHERE INDEXPROPERTY(id,name,'IsAutoStatistics')=1 AND OBJECTPROPERTY(id,'IsMSShipped')<>1
OPEN c
WHILE 1=1 BEGIN
  FETCH NEXT FROM c INTO @name,@p
  IF @@FETCH_STATUS<>0 BREAK
  SET @name=N'DROP STATISTICS '+QUOTENAME(USER_NAME(OBJECTPROPERTY(@p,'OwnerId')))+'.'+QUOTENAME(OBJECT_NAME(@p))+'.'+QUOTENAME(@name)
  EXEC(@name)
print @name
END
DEALLOCATE c