StudioSystem

Reorganizacja indeksów w usłudze SSJob

Reorganizacja indeksów bazy danych jako lżejsza, cykliczna alternatywa dla pełnej odbudowy: mechanizm, konfiguracja w tabeli _jobs i dobór harmonogramu.

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

Reorganizacja indeksów to zadanie cykliczne usługi SSJob, porządkujące fizyczny układ stron istniejącego indeksu bez tworzenia go od nowa. W przeciwieństwie do pełnej odbudowy indeksów jest operacją lżejszą, działającą online i możliwą do uruchamiania częściej.

Czym jest reorganizacja indeksów

Reorganizacja indeksów to druga - obok opisanej osobno odbudowy indeksów - metoda przeciwdziałania fragmentacji struktur przyspieszających wyszukiwanie danych w bazie StudioSystem. Zamiast tworzyć indeks od podstaw, reorganizacja porządkuje strony już istniejącego indeksu, dopasowując ich fizyczny układ na dysku do logicznej kolejności kluczy.

Zadanie to, podobnie jak pozostałe zadania cykliczne opisane przy okazji kopii bazy MSSQL i kopii aplikacji, korzysta z tego samego mechanizmu usługi SSJob - wiersza w tabeli _jobs z ustawianym harmonogramem oraz powiadomieniami e-mail. Różnica leży wyłącznie w rodzaju wykonywanej operacji, nie w sposobie jej skonfigurowania.

W praktyce reorganizacja pełni rolę lekkiej, częstej konserwacji, uzupełniającej rzadziej uruchamianą pełną odbudowę - dwa zadania, które razem utrzymują wydajność zapytań na akceptowalnym poziomie przy rozsądnym zużyciu zasobów serwera.

Jak działa reorganizacja

Mechanizm reorganizacji przegląda istniejące strony liścia indeksu i fizycznie przestawia je tak, by ich kolejność na dysku odpowiadała logicznej kolejności kluczy indeksu. Dodatkowo operacja ta porządkuje wypełnienie stron zgodnie z ustawionym parametrem fill factor, zagęszczając dane tam, gdzie to możliwe, i zwalniając miejsce zajmowane wcześniej przez częściowo puste strony powstałe w wyniku podziałów.

Kluczową cechą odróżniającą reorganizację od odbudowy jest to, że jest ona operacją online - wykonuje się na małych, przyrostowych porcjach danych i nie wymaga blokady uniemożliwiającej innym procesom odczyt czy zapis w tym samym czasie. Dzięki temu reorganizację można częściej uruchamiać także w godzinach, w których na serwerze pojawia się pewien ruch, bez ryzyka zauważalnego zablokowania użytkowników korzystających w tym czasie z systemu.

Reorganizacja nie usuwa jednak fragmentacji równie skutecznie jak odbudowa - przy bardzo wysokim jej poziomie porządkowanie kolejnych stron trwa proporcjonalnie długo i nie zawsze prowadzi do tak dobrego rezultatu, jaki dawałoby utworzenie indeksu od nowa. Istotna jest też różnica w zużyciu przestrzeni tymczasowej serwera - odbudowa indeksu, zwłaszcza dużego, wymaga w trakcie działania dodatkowego miejsca w bazie tempdb na potrzeby utworzenia nowej struktury obok starej, podczas gdy reorganizacja przestawia strony w miejscu, praktycznie bez dodatkowego zapotrzebowania na przestrzeń tymczasową. Ta różnica bywa istotna przy wdrożeniach z ograniczoną przestrzenią dyskową zarezerwowaną dla bazy danych.

Konfiguracja w tabeli _jobs

Zadanie reorganizacji indeksów korzysta z tego samego, węższego zestawu pól co odbudowa - bez rozróżniania rodzaju operacji czy 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 reorganizowane są indeksy

Podobnie jak przy odbudowie, pole CONECTIONSTRINGNAME decyduje o tym, w której konkretnie bazie danych usługa SSJob ma wykonać reorganizację - istotne przy wdrożeniach obsługujących z jednego serwera więcej niż jedną instalację StudioSystem.

StudioSystem

Lekka konserwacja bez przestojów

Cykliczna reorganizacja indeksów działa w tle, nie blokując pracy użytkowników korzystających w tym czasie z systemu.

Reorganizacja a odbudowa

Wybór między reorganizacją a pełną odbudową indeksów zależy przede wszystkim od zmierzonego poziomu fragmentacji konkretnego indeksu oraz od dostępnego okna czasowego na wykonanie zadania:

CechaReorganizacjaOdbudowa
Sposób działaniaPorządkuje istniejące strony indeksuTworzy indeks od nowa
Obciążenie serweraNiższeWysokie
Blokowanie dostępu do danychBrak - operacja onlineMożliwe przy dużych indeksach
Skuteczność przy dużej fragmentacjiOgraniczonaWysoka, niezależna od poziomu
Typowa częstotliwość uruchamianiaCzęsta - nawet codziennieRzadsza - np. raz w tygodniu

W wielu wdrożeniach oba zadania stosuje się równolegle jako komplementarną parę - częstsza reorganizacja ogranicza narastanie fragmentacji na co dzień, a rzadsza pełna odbudowa porządkuje te indeksy, w których fragmentacja mimo to zdążyła osiągnąć wysoki poziom.

Kiedy stosować reorganizację

Decyzję o wyborze reorganizacji zamiast pełnej odbudowy w profesjonalnych wdrożeniach SQL Server opiera się zwykle na zmierzonym procentowym poziomie fragmentacji konkretnego indeksu. Niski poziom fragmentacji, rzędu kilkunastu procent, zwykle nie uzasadnia jeszcze żadnej interwencji. Poziom umiarkowany, orientacyjnie od kilkunastu do kilkudziesięciu procent, jest klasycznym wskazaniem do reorganizacji - operacja ta wystarcza, by przywrócić rozsądną wydajność zapytań bez nadmiernego obciążania serwera. Warto przy tym pamiętać, że fragmentacja poszczególnych indeksów w tej samej bazie danych rzadko narasta w jednakowym tempie - indeksy na często modyfikowanych tabelach dokumentów magazynowych wymagają zwykle częstszej reorganizacji niż indeksy na rzadziej zmienianych kartotekach słownikowych.

Gdy fragmentacja przekracza próg kilkudziesięciu procent, reorganizacja porządkuje strony zbyt wolno w stosunku do skali problemu i lepszym rozwiązaniem staje się pełna odbudowa, opisana szerzej w materiale o odbudowie indeksów. StudioSystem, uruchamiając zadania cyklicznie dla całej bazy, upraszcza tę decyzję kosztem pewnej nadmiarowości, w zamian oferując prostotę konfiguracji bez konieczności ręcznej analizy każdego indeksu z osobna.

Harmonogram i obciążenie serwera

Ponieważ reorganizacja jest operacją online i znacznie lżejszą niż pełna odbudowa, jej harmonogram można ustawić bardziej elastycznie niż w przypadku zadań intensywnie obciążających serwer. Wielu administratorów uruchamia reorganizację codziennie lub co kilka dni, nawet w godzinach, w których na serwerze pojawia się umiarkowany ruch użytkowników.

Mimo to, przy naprawdę dużych tabelach - takich jak dokumenty magazynowe zapisywane przez cały dzień roboczy z wielu równoległych stanowisk - warto rozważyć uruchamianie reorganizacji w godzinach nieco mniejszego obciążenia, by ograniczyć jej wpływ na czas odpowiedzi pozostałych zapytań wykonywanych równolegle.

Podobnie jak przy odbudowie, warto unikać nakładania się harmonogramu reorganizacji na inne intensywne zadania SSJob, w tym na kopię bazy MSSQL - nawet lekka operacja bazodanowa uruchomiona równolegle z kopią zapasową może niepotrzebnie wydłużyć czas trwania obu zadań.

Dobre praktyki

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

  • Traktowanie jako uzupełnienia, nie zamiennika - reorganizacja nie zastępuje w pełni odbudowy indeksów przy wysokim poziomie fragmentacji, tylko ogranicza tempo jej narastania.
  • Częstsze uruchamianie niż odbudowy - dzięki niższemu obciążeniu serwera reorganizację można bezpiecznie zaplanować częściej, nawet codziennie.
  • Rozdzielenie w czasie od innych zadań SSJob - unikanie nakładania się harmonogramu na kopię bazy danych czy odbudowę indeksów ogranicza łączne obciążenie serwera.
  • Weryfikacja powiadomień - brak spodziewanego e-maila z potwierdzeniem wykonania jest sygnałem ostrzegawczym samym w sobie.

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 reorganizacji. Dodatkowej diagnostyki, przydatnej zwłaszcza przy diagnozowaniu nieudanych uruchomień, dostarcza Dziennik zdarzeń Windows, do którego usługa zapisuje informacje o swoim działaniu - mechanizm ten opisano szerzej przy okazji instalacji usługi SSJob.

Podobnie jak przy odbudowie, skutki zaniedbania reorganizacji rzadko są nagłe - fragmentacja narasta stopniowo, a jej wpływ na wydajność ujawnia się dopiero po dłuższym czasie, gdy kolejne raporty i zestawienia wykonują się zauważalnie wolniej niż jeszcze kilka tygodni wcześniej. Regularna, cykliczna reorganizacja, uzupełniona rzadszą pełną odbudową, zapobiega temu powolnemu pogarszaniu się komfortu pracy z systemem.

Podsumowanie

Reorganizacja indeksów to lżejsze, częściej uruchamiane zadanie SSJob, uzupełniające pełną odbudowę w walce z naturalną fragmentacją struktur przyspieszających wyszukiwanie danych w bazie StudioSystem. Konfiguruje się je jednym, pojedynczym wierszem w tabeli _jobs, wskazując bazę danych oraz harmonogram uruchomień, bez konieczności rozróżniania rodzaju operacji.

Tam, gdzie sama reorganizacja przestaje wystarczać, naturalnym uzupełnieniem jest pełna odbudowa indeksów, opisana szerzej w poprzednim materiale tej samej serii poświęconej utrzymaniu bazy danych StudioSystem. Kolejnym krokiem w tej samej serii jest zadanie organizacji bazy danych, porządkujące kolejny aspekt techniczny wpływający na stabilną pracę platformy.

Słownik pojęć

Podstawowe pojęcia - reorganizacja indeksów

Terminologia przydatna przy utrzymaniu wydajności bazy danych.

RReorganizacja indeksu
Lżejsza operacja porządkująca strony istniejącego indeksu bez tworzenia go od nowa.
FFragmentacja indeksu
Stopień rozproszenia stron indeksu na dysku, rosnący wraz z operacjami wstawiania, aktualizacji i usuwania danych.
FFill factor
Procentowe wypełnienie strony indeksu w chwili jej utworzenia, wpływające na tempo późniejszej fragmentacji.
OOperacja online
Tryb wykonania polecenia bazodanowego niewymagający blokady uniemożliwiającej odczyt danych w trakcie jego trwania.
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 reorganizowane są indeksy.
FAQ

Najczęściej zadawane pytania

01

Czym jest reorganizacja indeksu?

To operacja porządkująca fizyczny układ stron istniejącego indeksu tak, by odpowiadał ich logicznej kolejności, bez usuwania i tworzenia indeksu od nowa.

02

Czym różni się reorganizacja od odbudowy indeksu?

Reorganizacja działa na istniejącej strukturze indeksu i zużywa mniej zasobów serwera, ale przy wysokim poziomie fragmentacji jest mniej skuteczna niż pełna odbudowa, która tworzy indeks od podstaw.

03

Czy reorganizacja indeksów blokuje dostęp do danych?

Nie, reorganizacja jest operacją online i nie blokuje odczytu ani zapisu danych w trakcie swojego trwania, w przeciwieństwie do pełnej odbudowy dużych indeksów.

04

Jak skonfigurować automatyczną reorganizację 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ć zreorganizowane indeksy.

05

Jak często warto uruchamiać reorganizację indeksów?

Częściej niż pełną odbudowę, ponieważ jest operacją lżejszą - wielu administratorów ustawia ją codziennie lub co kilka dni, w zależności od tempa narastania fragmentacji.

06

Kiedy reorganizacja nie wystarcza i potrzebna jest pełna odbudowa?

Gdy poziom fragmentacji indeksu przekracza kilkadziesiąt procent - wtedy reorganizacja porządkuje strony zbyt wolno, a lepszym rozwiązaniem jest utworzenie indeksu od nowa.

Warto przeczytać

Powiązane materiały o utrzymaniu bazy danych

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

Wydajność

III. Odbudowa indeksów

Cięższa, ale skuteczniejsza przy wysokiej fragmentacji alternatywa dla reorganizacji, tworząca indeks od podstaw.

Czytaj dalej
Baza danych

V. Organizacja bazy danych

Kolejne zadanie SSJob z serii poświęconej utrzymaniu bazy danych StudioSystem w dobrej kondycji.

Czytaj dalej
Baza danych

I. Kopia bazy MSSQL

Zadanie SSJob wykonujące kopię zapasową bazy danych, którego nie warto łączyć w harmonogramie z reorganizacją 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
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.