Postanowiłem rozpocząć cykl kilku wpisów na temat skryptów utrzymaniowych stworzonych przez Ola Hallengrana. Od kilku lat używam je i stwierdzam, że z powodzeniem zastępują Maintenance Plany dostępne z poziomu SSMS.

Ola Hallengren jest MVP Microsoft Data Platform mieszkającym w Szwecji. Opracował on najlepsze bezpłatne rozwiązanie do utrzymania i konserwacji dla SQL Server, które jest szeroko stosowane i akceptowane przez administratorów baz danych na całym świecie.

Rozwiązanie opiera się na procedurach składowanych, które wykonują kopie zapasowe, sprawdzają integralność, utrzymują indeksy i statystyki we wszystkich edycjach SQL Server od 2008 roku. Od kilku lat zostało uznane za najlepsze bezpłatne narzędzie w konkursie SQL Server Magazine Awards.

Konserwacja indeksu i statystyk SQL Server

IndexOptimize to procedura składowana rozwiązania SQL Server Maintenance Solution służąca do odbudowy i reorganizacji indeksów oraz aktualizacji statystyk. IndexOptimize jest obsługiwana przez SQL Server 2008, SQL Server 2008 R2, SQL Server 2012, SQL Server 2014, SQL Server 2016, SQL Server 2017, SQL Server 2019, Azure SQL Database i Azure SQL Database Managed Instance.

Przez długi czas domyślnymi opcjami aktualizacji statystyk były ciężkie procedury w ramach opcji planu konserwacji. Zadanie aktualizacji statystyk zapewnia tylko opcję aktualizacji statystyk indeksu, statystyk kolumn lub obu. Możesz również określić, czy jest to pełny skan, czy próbka do aktualizacji, ale to wszystko !

W planie konserwacji statystyki, które uległy niewielkim zmianom lub nie uległy żadnej zmianie, zostaną zaktualizowane. Jest to istne marnowanie zasobów.

Maintenance Plan

Na ratunek przychodzą scenariusze Ola Hallengren

Skrypty konserwacyjne Ola Hallengren również zaktualizują statystyki za pomocą parametru @UpdateStatistics. Wartość domyślna to NULL, co oznacza, że ​​statystyki nie powinny być aktualizowane.

@OnlyModifiedStatistics to opcja aktualizowania tylko zmienionych statystyk, co zapewnia zachowanie podobne do sp_updatestats.

EXECUTE [dbo].[IndexOptimize]
@Databases = 'USER_DATABASES',
@UpdateStatistics = 'ALL',
@OnlyModifiedStatistics = 'Y',
@LogToTable = 'Y'

Dzięki procedurze składowanej IndexOptimize Ola zawiera teraz opcję @StatisticsModificationLevel. Możesz użyć tego, aby ustawić próg dla modyfikacji, tak aby aktualizowane były tylko statystyki z określoną ilością zmian. Na przykład, jeśli chcę zaktualizować statystyki, jeśli zmieniło się 5% danych, użyj:

EXECUTE [dbo].[IndexOptimize]
@Databases = 'USER_DATABASES',
@UpdateStatistics = 'ALL',
@StatisticsModificationLevel= '5',
@LogToTable = 'Y'

Pozwoli to rozwiązać problem fragmentacji i aktualizacji statystyk dla wszystkich tabel w bazach danych użytkowników oraz zaktualizuje statystyki, jeśli zmieni się 5% lub więcej wierszy.


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl