StudioSystem

Organizacja bazy danych w usłudze SSJob

Organizacja bazy danych jako zadanie cykliczne SSJob: dlaczego statystyki optymalizatora zapytań się dezaktualizują, konfiguracja w tabeli _jobs i związek z odbudową oraz reorganizacją indeksów.

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

Organizacja bazy danych to trzecie, obok odbudowy i reorganizacji indeksów, zadanie cykliczne usługi SSJob dbające o wydajność bazy StudioSystem. Aktualizuje ono statystyki, na podstawie których optymalizator zapytań SQL Server podejmuje decyzje o sposobie wykonania poszczególnych zapytań.

Czym jest organizacja bazy danych

Organizacja bazy danych to trzecie zadanie z serii poświęconej utrzymaniu wydajności bazy StudioSystem, obok opisanej wcześniej odbudowy oraz reorganizacji indeksów. O ile tamte dwa zadania porządkują fizyczną strukturę indeksów, o tyle organizacja bazy danych zajmuje się czymś innym - aktualizacją statystyk, na podstawie których silnik bazy danych podejmuje decyzje o sposobie wykonania zapytań.

Tak jak pozostałe zadania SSJob opisane przy okazji kopii bazy MSSQL i kopii aplikacji, organizacja bazy danych korzysta z tego samego mechanizmu - wiersza w tabeli _jobs z ustawianym harmonogramem oraz powiadomieniami e-mail. Różni się jedynie rodzajem wykonywanej operacji wewnątrz bazy danych.

Czym są statystyki bazy danych

Statystyki bazy danych to wewnętrzna struktura SQL Server opisująca przybliżony rozkład wartości w kolumnach tabeli, zapisana w formie histogramu. Na podstawie statystyk optymalizator zapytań szacuje, ile wierszy zwróci dana operacja filtrowania, złączenia czy sortowania, zanim jeszcze faktycznie wykona zapytanie - a od trafności tego szacunku zależy, jaki plan wykonania zostanie wybrany.

Błędny szacunek liczby wierszy - na przykład wynikający z nieaktualnych statystyk - może skłonić optymalizator do wybrania planu zoptymalizowanego pod niewielki zbiór danych tam, gdzie w rzeczywistości trzeba przetworzyć miliony wierszy, albo odwrotnie. Skutkiem bywa zapytanie wykonujące się zauważalnie wolniej, mimo że odpowiednie indeksy - opisane przy okazji odbudowy i reorganizacji - są obecne i wcale nie są nadmiernie sfragmentowane.

Statystyki można aktualizować na dwa sposoby - poprzez pełne skanowanie wszystkich wierszy tabeli, dające najdokładniejszy obraz rozkładu danych, albo poprzez skanowanie próbkowe, obejmujące jedynie część wierszy wybranych losowo. Pełne skanowanie jest dokładniejsze, ale bardziej obciąża serwer i trwa dłużej, dlatego przy bardzo dużych tabelach transakcyjnych StudioSystem częściej stosuje się rozsądnie dobraną próbkę, wystarczającą do zachowania trafności szacunków optymalizatora bez nadmiernego wydłużania czasu wykonania samego zadania.

Dlaczego statystyki się dezaktualizują

Każda operacja wstawienia, aktualizacji lub usunięcia danych zmienia rzeczywisty rozkład wartości w tabeli, podczas gdy statystyki pozostają niezmienione aż do ich kolejnej aktualizacji. SQL Server potrafi wprawdzie aktualizować statystyki automatycznie, jednak dzieje się to dopiero po przekroczeniu określonego progu zmian w tabeli, co przy dużych, intensywnie obsługiwanych tabelach transakcyjnych StudioSystem - dokumentach magazynowych, kartotekach czy tabelach YMS i TCS - bywa zbyt rzadkie, by statystyki na bieżąco odzwierciedlały aktualny stan danych.

Cykliczne, wymuszone odświeżenie statystyk poza wbudowanym mechanizmem automatycznym pozwala uniknąć sytuacji, w której optymalizator zapytań przez dłuższy czas opiera się na danych nieaktualnych, mimo że sam mechanizm automatyczny formalnie działa poprawnie. Historycznie próg uruchamiający automatyczną aktualizację statystyk w SQL Server wynosił około dwudziestu procent zmienionych wierszy tabeli, co przy naprawdę dużych tabelach oznaczało, że statystyki potrafiły pozostawać nieaktualne bardzo długo, zanim zmiana osiągnęła wymagany procentowo próg.

Konfiguracja w tabeli _jobs

Zadanie organizacji bazy danych korzysta z tego samego, węższego zestawu pól co odbudowa i reorganizacja indeksów - 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 aktualizowane są statystyki

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

StudioSystem

Aktualne statystyki bez ingerencji DBA

Cykliczna aktualizacja statystyk utrzymuje trafność planów wykonania zapytań bez ręcznego monitorowania przez administratora.

Związek z odbudową i reorganizacją indeksów

Zadanie organizacji bazy danych nie działa w oderwaniu od pozostałych dwóch zadań tej serii - jego znaczenie wynika bezpośrednio z tego, jak dokładnie działają odbudowa i reorganizacja indeksów:

OperacjaWpływ na statystyki
Odbudowa indeksuAktualizuje powiązane statystyki jako efekt uboczny, z pełnym skanowaniem danych
Reorganizacja indeksuNie aktualizuje statystyk w żadnym zakresie
Organizacja bazy danychAktualizuje statystyki niezależnie od tego, co dzieje się z indeksami

Pełna odbudowa indeksu aktualizuje powiązane z nim statystyki automatycznie, ponieważ w trakcie tworzenia indeksu od nowa SQL Server i tak przegląda wszystkie dane. Reorganizacja indeksu nie ma tej właściwości - jest operacją znacznie lżejszą, ale nie dotyka statystyk w żadnym zakresie. W wdrożeniach, które ze względu na obciążenie serwera opierają się głównie na częstej, lekkiej reorganizacji zamiast rzadszej pełnej odbudowy, osobne zadanie organizacji bazy danych staje się właściwie niezbędne, by statystyki nie pozostawały nieaktualne przez długi czas.

Harmonogram i obciążenie serwera

Aktualizacja statystyk dla dużych tabel wymaga przejrzenia znaczącej części, a przy pełnym skanowaniu - całości danych, co czyni ją operacją zauważalnie obciążającą serwer, choć zwykle nie aż tak intensywnie jak pełna odbudowa dużych indeksów. Z tego powodu harmonogram tego zadania planuje się, podobnie jak pozostałe zadania utrzymaniowe, na godziny najmniejszego obciążenia platformy.

Warto rozdzielić w czasie organizację bazy danych od kopii bazy MSSQL oraz od odbudowy i reorganizacji indeksów - uruchomienie kilku intensywnych zadań równolegle w tym samym oknie nocnym może niepotrzebnie wydłużyć czas trwania każdego z nich i zawęzić margines bezpieczeństwa przed rozpoczęciem pracy przez użytkowników rano.

Dobre praktyki

Kilka zasad pomaga utrzymać zadanie organizacji bazy danych efektywnym niezależnie od skali wdrożenia:

  • Traktowanie jako uzupełnienia indeksów, nie ich zamiennika - aktualne statystyki nie zastępują dobrze utrzymanych, mało sfragmentowanych indeksów, tylko pozwalają optymalizatorowi w pełni z nich korzystać.
  • Szczególna uwaga przy częstej reorganizacji - skoro reorganizacja nie aktualizuje statystyk, wdrożenia opierające się głównie na niej powinny traktować to zadanie priorytetowo.
  • 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ń - pole MAILPOWIADOMIENIE pozwala na bieżąco kontrolować wykonanie zadania, a pole OSTATNIOWYKONANO w tabeli _jobs potwierdza datę ostatniego poprawnego uruchomienia.
  • Obserwacja czasu wykonania w czasie - wydłużające się z tygodnia na tydzień wykonanie zadania organizacji bazy danych jest naturalnym sygnałem wzrostu bazy, podobnie jak przy odbudowie czy reorganizacji indeksów.

Warto też pamiętać, że statystyki dotyczą nie tylko tabel powiązanych z indeksami, ale wszystkich kolumn wykorzystywanych w warunkach zapytań, złączeniach czy grupowaniach - również tych, na których nie założono żadnego indeksu. Dlatego zadanie organizacji bazy danych ma znaczenie szersze niż tylko uzupełnienie odbudowy i reorganizacji, obejmując swoim działaniem cały obraz statystyczny bazy danych StudioSystem, z którego korzysta optymalizator zapytań przy planowaniu każdego pojedynczego zapytania wykonywanego przez aplikację.

Podobnie jak przy pozostałych zadaniach tej serii, skutki zaniedbania organizacji bazy danych rzadko są nagłe - nieaktualne statystyki objawiają się stopniowym, trudnym do jednoznacznego zdiagnozowania spowolnieniem wybranych zapytań, które łatwo błędnie przypisać innej przyczynie, zamiast rozpoznać w nich efekt przestarzałych danych używanych przez optymalizator.

Podsumowanie

Organizacja bazy danych to zadanie SSJob domykające triadę utrzymania wydajności bazy StudioSystem, obok odbudowy i reorganizacji indeksów. Konfiguruje się je jednym, pojedynczym wierszem w tabeli _jobs, wskazując bazę danych oraz harmonogram uruchomień, najlepiej ustawiony w godzinach najmniejszego obciążenia serwera.

Razem, wszystkie trzy zadania - odbudowa indeksów, reorganizacja indeksów i organizacja bazy danych - tworzą kompletny zestaw automatycznych czynności utrzymaniowych, uzupełniający zadania kopii zapasowej opisane w materiale o instalacji usługi SSJob. Skonfigurowanie ich wszystkich jako osobnych, dobrze rozłożonych w czasie wierszy tabeli _jobs pozwala utrzymać wydajność bazy StudioSystem na stabilnym poziomie przez długi czas, bez konieczności ręcznej interwencji administratora.

Słownik pojęć

Podstawowe pojęcia - organizacja bazy danych

Terminologia przydatna przy utrzymaniu wydajności bazy danych.

SStatystyki bazy danych
Zbiór informacji o rozkładzie wartości w kolumnach tabeli, wykorzystywany przez optymalizator zapytań do wyboru planu wykonania.
AAktualizacja statystyk
Operacja odświeżająca statystyki bazy danych, tak by odzwierciedlały bieżący stan danych w tabelach.
HHistogram statystyczny
Wewnętrzna struktura statystyki opisująca przybliżony rozkład wartości i liczność wierszy w poszczególnych przedziałach kolumny.
OOptymalizator zapytań
Komponent SQL Server wybierający sposób wykonania zapytania na podstawie m.in. statystyk tabel i indeksów.
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 aktualizowane są statystyki.
FAQ

Najczęściej zadawane pytania

01

Czym jest organizacja bazy danych w usłudze SSJob?

To zadanie cykliczne aktualizujące statystyki bazy danych, na podstawie których optymalizator zapytań SQL Server wybiera sposób wykonania poszczególnych zapytań.

02

Czym są statystyki bazy danych?

To zbiór informacji o przybliżonym rozkładzie wartości w kolumnach tabeli, zapisany w formie histogramu, na podstawie którego optymalizator zapytań szacuje liczbę wierszy zwracanych przez poszczególne operacje.

03

Dlaczego statystyki bazy danych się dezaktualizują?

Każda operacja wstawienia, aktualizacji lub usunięcia danych zmienia rzeczywisty rozkład wartości w tabeli, podczas gdy statystyki pozostają niezmienione aż do ich kolejnej aktualizacji.

04

Czy odbudowa lub reorganizacja indeksów aktualizuje statystyki?

Pełna odbudowa indeksu aktualizuje powiązane z nim statystyki jako efekt uboczny operacji. Reorganizacja indeksu nie aktualizuje statystyk, dlatego potrzebne jest osobne zadanie organizacji bazy danych.

05

Jak skonfigurować automatyczną organizację bazy danych?

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ć zaktualizowane statystyki.

06

Co się dzieje, gdy statystyki są mocno nieaktualne?

Optymalizator zapytań podejmuje decyzje na podstawie błędnych szacunków liczby wierszy, co może prowadzić do wyboru gorszego planu wykonania i zauważalnego spowolnienia zapytań.

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 operacja tworząca indeks od nowa, aktualizująca statystyki jako efekt uboczny pełnego skanowania danych.

Czytaj dalej
Wydajność

IV. Reorganizacja indeksów

Lżejsza alternatywa dla odbudowy, która - w odróżnieniu od niej - nie aktualizuje statystyk bazy danych.

Czytaj dalej
Baza danych

I. Kopia bazy MSSQL

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

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.