StudioSystem

Odbudowa indeksów bazy danych w usłudze SSJob

Automatyczna odbudowa indeksów bazy danych jako cykliczne zadanie usługi SSJob: dlaczego indeksy się fragmentują, konfiguracja w tabeli _jobs i dobór harmonogramu uruchomień.

studiosystem.softwarestudio.com.pl/transakcje/
Menu modułu Administrator w StudioSystem z pozycją Skorowidze
Menu modułu Administrator w StudioSystem z pozycją Skorowidze
W skrócie

Odbudowa indeksów to kolejne zadanie cykliczne usługi SSJob, tworzące od nowa indeksy bazy danych, które z czasem tracą wydajność na skutek fragmentacji. Konfiguruje się je jako wiersz w tabeli _jobs, wskazując bazę danych oraz harmonogram uruchomień.

Czym jest odbudowa indeksów

Baza danych StudioSystem, tak jak każda baza SQL Server obsługująca intensywny ruch transakcyjny, korzysta z indeksów przyspieszających wyszukiwanie danych w dużych tabelach - dokumentach magazynowych, kartotekach, historii zmian opisanej przy okazji mechanizmu rewizji danych. Indeksy te nie pozostają jednak wiecznie w optymalnym stanie - z czasem ich struktura ulega degradacji, którą nazywa się fragmentacją.

Samo zadanie odbudowy indeksów, podobnie zresztą jak kopia bazy MSSQL czy kopia aplikacji, korzysta z tego samego mechanizmu usługi SSJob - wiersza w tabeli _jobs z ustawianym harmonogramem oraz powiadomieniami wysyłanymi na wskazane adresy e-mail.

W odróżnieniu jednak od zadań kopii zapasowej, odbudowa indeksów nie tworzy żadnego pliku ani nie zabezpiecza danych przed utratą - jej jedynym celem jest utrzymanie wydajności zapytań na akceptowalnym poziomie. To zadanie działające niejako w tle całej infrastruktury, o którym administrator przypomina sobie zwykle dopiero wtedy, gdy zapytania zaczynają wykonywać się zauważalnie wolniej niż jeszcze kilka miesięcy wcześniej.

Dlaczego indeksy się fragmentują

Indeks bazy danych fizycznie zorganizowany jest jako struktura drzewiasta, złożona z powiązanych ze sobą stron danych. Gdy do tabeli trafia nowy rekord, a odpowiadająca mu strona indeksu jest już pełna, SQL Server dzieli ją na dwie - zjawisko to nazywa się podziałem strony. Każdy taki podział pozostawia obie nowo powstałe strony częściowo puste i rozprasza logicznie sąsiadujące dane fizycznie po różnych miejscach na dysku.

Im więcej operacji wstawiania, aktualizacji i usuwania wykonuje się na tabeli, tym więcej podziałów stron się kumuluje, a odczyt danych wymaga coraz więcej operacji dyskowych, by przejść przez rozproszoną strukturę. W systemie takim jak StudioSystem, gdzie dokumenty magazynowe czy transakcyjne tabele YMS i TCS zapisywane są przez cały dzień roboczy, fragmentacja narasta w sposób ciągły i bez interwencji administratora prowadzi do stopniowego spowolnienia zapytań.

Problem ten dotyka przede wszystkim indeksy na tabelach o dużej liczbie operacji zapisu i niesekwencyjnych wartościach kluczy - na przykład tabele dokumentów magazynowych, do których nowe rekordy trafiają przez cały dzień z wielu równoległych stanowisk. Indeksy na tabelach rzadko modyfikowanych, takich jak część kartotek słownikowych, fragmentują się znacznie wolniej i mogą wymagać odbudowy dużo rzadziej niż tabele transakcyjne.

Konfiguracja w tabeli _jobs

Zadanie odbudowy indeksów wykorzystuje węższy zestaw pól niż zadania kopii zapasowej, ponieważ nie ma tu potrzeby rozróżniania rodzaju operacji ani wskazywania folderu docelowego:

PoleZnaczenie
OSTATNIOWYKONANOData ostatniego poprawnego wykonania zadania
CYKLICZNOSCLiczbowy interwał, co jaki zadanie jest uruchamiane
CYKLICZNOSCTYPEJednostka interwału - np. godziny, dni
MAILPOWIADOMIENIEAdresy e-mail, na które trafią powiadomienia o wykonaniu
CONECTIONSTRINGNAMEŁańcuch połączeniowy wskazujący bazę, w której odbudowywane są indeksy

Pole CONECTIONSTRINGNAME pełni tutaj kluczową, decydującą rolę - to właśnie na jego podstawie usługa SSJob rozpoznaje, w której konkretnie bazie danych ma faktycznie wykonać odbudowę, co ma znaczenie przy wdrożeniach obsługujących więcej niż jedną bazę na tym samym serwerze.

StudioSystem

Utrzymanie wydajności bez ingerencji DBA

Cykliczna odbudowa indeksów odciąża administratora bazy danych od ręcznego monitorowania fragmentacji na co dzień.

Odbudowa a reorganizacja

Odbudowa indeksu, opisana w tym materiale, to nie jedyny sposób walki z fragmentacją. Alternatywą, opisaną osobno w materiale o reorganizacji indeksów, jest operacja lżejsza, porządkująca istniejący indeks bez tworzenia go od nowa:

CechaOdbudowaReorganizacja
Sposób działaniaTworzy indeks od nowaPorządkuje istniejące strony indeksu
Obciążenie serweraWysokieNiższe
Skuteczność przy dużej fragmentacjiWysoka, niezależna od poziomuOgraniczona
Typowe zastosowanieWysoki poziom fragmentacjiNiski lub umiarkowany poziom fragmentacji

W praktyce wiele wdrożeń łączy oba podejścia - reorganizację uruchamia się częściej, jako lekką konserwację, a pełną odbudowę rzadziej, jako gruntowniejsze rozwiązanie problemu, gdy fragmentacja mimo reorganizacji utrzymuje się na wysokim poziomie.

Decyzja, które podejście zastosować, w profesjonalnych wdrożeniach SQL Server opiera się zwykle na zmierzonym poziomie fragmentacji konkretnego indeksu, a nie na sztywnej regule stosowanej identycznie dla całej bazy. Niski poziom fragmentacji, rzędu kilkunastu procent, zwykle nie uzasadnia jeszcze żadnej interwencji. Poziom umiarkowany sugeruje reorganizację, a wysoki, przekraczający kilkadziesiąt procent, uzasadnia już pełną odbudowę. StudioSystem, uruchamiając to zadanie cyklicznie dla całej bazy, upraszcza tę decyzję kosztem pewnej nadmiarowości - część indeksów bywa odbudowywana, mimo że sama reorganizacja by wystarczyła, w zamian za prostotę konfiguracji i brak konieczności ręcznej analizy każdego indeksu z osobna. Warto przy tym pamiętać, że próg procentowy fragmentacji, od którego opłaca się przejść z reorganizacji na pełną odbudowę, w bardziej zaawansowanych wdrożeniach ustala się indywidualnie dla najbardziej obciążonych tabel, zamiast stosować jedną wspólną regułę identyczną dla całej bazy danych.

Harmonogram i obciążenie serwera

Odbudowa indeksu, zwłaszcza dla naprawdę dużych tabel, jest operacją bardzo intensywnie korzystającą z zasobów całego serwera - procesora, pamięci i dysku - i potrafi przy okazji chwilowo blokować dostęp do przebudowywanych aktualnie danych. Z tego powodu harmonogram tego zadania planuje się zwykle na godziny najmniejszego obciążenia platformy, najczęściej w nocy, kiedy liczba aktywnych użytkowników i transakcji jest minimalna.

W miarę wzrostu bazy danych i przybywania kolejnych dokumentów czas trwania odbudowy również rośnie. Warto od czasu do czasu sprawdzić, czy okno czasowe zarezerwowane na to zadanie w harmonogramie wciąż wystarcza, zanim zadanie zacznie nachodzić na godziny pracy użytkowników.

Dla firm działających w wielu strefach czasowych albo obsługujących klientów całodobowo - na przykład magazyny wysyłkowe pracujące na dwie lub trzy zmiany - znalezienie okna bez ruchu bywa trudniejsze niż w typowej firmie pracującej wyłącznie w godzinach dziennych. W takich przypadkach warto rozważyć skrócenie okna odbudowy przez podzielenie zadania na mniejsze porcje, obejmujące tylko wybrane, najbardziej newralgiczne tabele, zamiast całą bazę danych naraz w jednym przebiegu.

Powiadomienia i diagnostyka

Tak jak przy pozostałych zadaniach SSJob, pole MAILPOWIADOMIENIE pozwala otrzymywać potwierdzenie wykonania zadania e-mailem, a pole OSTATNIOWYKONANO w tabeli _jobs pokazuje datę ostatniego poprawnego uruchomienia. Dodatkowej diagnostyki dostarcza Dziennik zdarzeń Windows, do którego usługa zapisuje informacje o swoim działaniu, opisany szerzej przy okazji instalacji usługi SSJob.

Dobre praktyki

Kilka zasad pomaga utrzymać to zadanie efektywnym niezależnie od skali wdrożenia:

  • Rozdzielenie w czasie od kopii bazy danych - odbudowa indeksów nie powinna nakładać się w harmonogramie na zadanie kopii bazy MSSQL, bo oba intensywnie obciążają serwer.
  • Monitorowanie czasu trwania - wydłużający się czas wykonania zadania jest naturalnym sygnałem, że baza danych rośnie i harmonogram może wymagać korekty.
  • Rozważenie reorganizacji jako uzupełnienia - częstsza, lżejsza reorganizacja pomiędzy rzadszymi pełnymi odbudowami ogranicza czas, przez jaki fragmentacja realnie wpływa na wydajność.
  • Weryfikacja powiadomień - brak spodziewanego e-maila z potwierdzeniem jest sygnałem ostrzegawczym samym w sobie.

Warto też pamiętać, że skutki zaniedbania tego zadania rzadko są nagłe. W przeciwieństwie do braku kopii zapasowej, którego konsekwencje ujawniają się dopiero w chwili awarii, rosnąca fragmentacja indeksów objawia się stopniowo - kolejne raporty i zestawienia wykonują się z tygodnia na tydzień odrobinę wolniej, aż w pewnym momencie różnica staje się zauważalna dla użytkowników zgłaszających, że system „ostatnio jakoś zwolnił”. Regularna, cykliczna odbudowa indeksów zapobiega temu powolnemu, ale realnemu pogarszaniu się komfortu pracy z systemem.

Podsumowanie

Odbudowa indeksów to zadanie SSJob przeciwdziałające naturalnej fragmentacji struktur przyspieszających wyszukiwanie danych w bazie StudioSystem. Konfiguruje się je jednym, pojedynczym wierszem w tabeli _jobs, wskazując bazę danych oraz harmonogram uruchomień, najlepiej ustawiony w godzinach najmniejszego obciążenia serwera.

Tam, gdzie pełna odbudowa okazuje się zbyt kosztowna dla bieżącego harmonogramu, naturalnym uzupełnieniem jest lżejsza reorganizacja indeksów, opisana szerzej w kolejnym materiale tej samej serii poświęconej utrzymaniu bazy danych.

Słownik pojęć

Podstawowe pojęcia - odbudowa indeksów

Terminologia przydatna przy utrzymaniu wydajności bazy danych.

IIndeks bazy danych
Struktura przyspieszająca wyszukiwanie danych w tabeli, degradująca się z czasem wraz z operacjami zapisu.
FFragmentacja indeksu
Stopień rozproszenia stron indeksu na dysku, rosnący wraz z operacjami wstawiania, aktualizacji i usuwania danych.
OOdbudowa indeksu
Operacja tworząca indeks od nowa, usuwająca fragmentację niezależnie od jej poziomu.
PPodział strony
Zjawisko w strukturze B-drzewa, w którym pełna strona indeksu dzieli się na dwie przy wstawieniu nowej wartości.
TTabela _jobs
Tabela systemowa przechowująca konfigurację wszystkich automatycznych zadań usługi SSJob.
CCONECTIONSTRINGNAME
Pole tabeli _jobs wskazujące łańcuch połączeniowy do bazy danych, w której odbudowywane są indeksy.
FAQ

Najczęściej zadawane pytania

01

Dlaczego indeksy bazy danych wymagają odbudowy?

Każda operacja wstawienia, aktualizacji lub usunięcia danych może prowadzić do podziału stron indeksu i jego stopniowej fragmentacji. Z czasem fragmentacja spowalnia odczyt danych, a odbudowa indeksu przywraca jego optymalną strukturę.

02

Jak skonfigurować automatyczną odbudowę indeksów?

Jako zadanie usługi SSJob, wiersz w tabeli _jobs z polami określającymi cykliczność, powiadomienia e-mail i połączenie do bazy danych, w której mają zostać odbudowane indeksy.

03

Czym różni się odbudowa indeksu od reorganizacji?

Odbudowa tworzy indeks od nowa i usuwa fragmentację niezależnie od jej poziomu, ale jest bardziej zasobożerna. Reorganizacja porządkuje istniejący indeks bez jego przebudowy i sprawdza się przy niższym poziomie fragmentacji.

04

Kiedy najlepiej zaplanować odbudowę indeksów?

W godzinach najmniejszego obciążenia bazy danych, zwykle w nocy, ponieważ odbudowa dużych indeksów może chwilowo blokować dostęp do danych i znacząco obciążać serwer.

05

Czy odbudowę indeksów można łączyć z kopią bazy danych?

Nie warto planować ich w tym samym czasie - oba zadania intensywnie korzystają z zasobów serwera, a wykonywane równolegle mogą znacząco wydłużyć czas trwania każdego z nich.

06

Skąd wiadomo, że odbudowa indeksów zadziałała?

Pole OSTATNIOWYKONANO w tabeli _jobs pokazuje datę ostatniego poprawnego wykonania, a powiadomienie e-mail skonfigurowane polem MAILPOWIADOMIENIE potwierdza zakończenie zadania bez potrzeby ręcznej kontroli.

Warto przeczytać

Powiązane materiały o utrzymaniu bazy danych

Kolejne kroki, jeśli dbasz o wydajność bazy danych StudioSystem.

Wydajność

IV. Reorganizacja indeksów

Lżejsza alternatywa dla pełnej odbudowy, stosowana przy niższym poziomie fragmentacji indeksów.

Czytaj dalej
Baza danych

I. Kopia bazy MSSQL

Zadanie SSJob wykonujące kopię zapasową bazy danych, którego nie warto łączyć w harmonogramie z odbudową indeksów.

Czytaj dalej
Aplikacja

II. Kopia aplikacji

Uzupełnienie kopii bazy danych o pliki aplikacji, konfigurowane tym samym mechanizmem SSJob.

Czytaj dalej
SSJob

SSJob - automatyczne zadania

Pełny mechanizm usługi SSJob i tabeli _jobs, z przykładami innych typów zadań realizowanych tą samą usługą.

Czytaj dalej
Audyt

Rewizja zmian danych

Mechanizm audytu zmian w bazie, którego tabela _revision rośnie wraz z pracą systemu i również korzysta z indeksów.

Czytaj dalej
Instalacja

Instalacja usługi SSJob w Windows

Jak zainstalować usługę SSJob jako usługę systemu Windows, zanim skonfiguruje się pierwsze zadanie utrzymaniowe.

Czytaj dalej

Chcesz zobaczyć platformę w działaniu?

Uruchom demo modułów StudioSystem i sprawdź platformę na żywo.