Kategorie szkoleń | Egzaminy | Kontakt
  • 3
  • 16
  • 471

Na serwerze SQL zastałem plan utworzony przez kogoś wcześniej, a uruchamiany codziennie w nocy. Dla przykładu prezentuję po jednej linijce z każdego elementu planu:

 

DBCC CHECKDB(N'master')  WITH NO_INFOMSGS

ALTER INDEX [SLOGYKA001] ON [simple].[SLOGDKA001] REORGANIZE WITH ( LOB_COMPACTION = ON )

UPDATE STATISTICS [dbo].[__instal_KDORDKA001R00005] WITH FULLSCAN

DBCC SHRINKDATABASE(N'master', 10, TRUNCATEONLY)

 

O ile pierwsza linijka jest oczywista - codzienne sprawdzanie integralności baz danych - o tyle inne rodzą wątpliwości.

Czy reorganizacja wszystkich indeksów, aktualizacja statystyk i zmniejszanie bazy powinny być robione codziennie? Wydaje mi się, że zbyt częsta aktualizacja statystyk nie jest wskazana. Jaka jest dobra praktyka w tej kwestii? Co jeszcze warto robić przy okazji regularnej konserwacji bazy?

Maciej_Krauze
  • Zapytał
  • @ Maciej_Krauze | 04.12.2014
    • lider
    • laureat
    • 45
    • 16
    • 58

Odpowiedzi (3)

  • 2

Minęło trochę czasu i zauważyłem następujący efekt - puchnięcie plików kopii różnicowej.

 

1. Pełna kopia bazy robi się o północy i w południe, a kopie różnicowe są robione co godzinę od 6:00 do 17:00.

2. Plan wykonuje się o 3:00 w nocy, więc po pełnym backupie. Pierwszy backup różnicowy o 6:00 ma wielkość 5 GB (cała baza ma ok. 40 GB), przy czym pierwsze ruchy na bazie zaczynają się ok. 7:00.

3. Kopie różnicowe przyrastają aż do 12:00, potem od 13:00 mają już normalny rozmiar.

 

 

Nie ulega wątpliwości, że zmiany spowodowane reorganizacją indeksów, aktualizacją statystyk i zmniejszaniem bazy "zajmują" 5 GB i warto byłoby uniknąć takich dużych plików. Przychodzą mi do głowy 2 rozwiązania i proszę o ich ocenę:

 

1. Wszelką reorganizację robić raz w tygodniu w weekend i po ich zakończeniu zrobić kopię, ale czy to nie za rzadko?

2. Zmian dokonywać wieczorem, aby zakończyły się przed backupem o północy. Wtedy następne kopie różnicowe będą mniejsze, ale mam wrażenie, że bezpieczeństwo danych też będzie niższe (najpierw update, potem kopia).

Bardziej doświadczeni koledzy i koleżanki, jakie są za i przeciw?

Maciej_Krauze
  • Odpowiedział
  • @ Maciej_Krauze | 12.01.2015
    • lider
    • laureat
    • 45
    • 16
    • 58
  • 9

Witam,

odnośnie Pana pierwszego postu, to polecam wpis Paula Randalla odnośnie operacji SHRINK. To jest generalnie bardzo mocno niezalecane.

Odbudowywanie Indeksów zależy od czasu, jaki mamy w nocy do dyspozycji; jeżeli jest go wystarczająco dużo, przebudowujemy indeksy, jeżeli nie, to musimy wybrać indeksy do przebudowania.

  • Odpowiedział
  • @ | 28.01.2015
  • TRENER ALTKOM AKADEMII
  • 12

Kilka uwag do powyższego planu i wskazówek :

 

1. Shrink with TRUNCATEONLY (tak jak w Twoim planie) nie jest wielką tragedią. Prawdziwy disaster stałby się, gdybyś użył tej procedury bez żadnej opcji lub z WITH NOTRUNCATE. Wtedy dochodzi do tej potężnej defragmentacji, o której wspomina Maciej, przytaczając post Paul Randalla (tam jest właśnie przykład samego SHRINK czyli najpierw NOTRUNCATE  a potem TRUNCATEONLY). Dzieje się tak dlatego, że algorytm NOTRUNCATE jest banalnie prosty - weź ostatnią stronę z pliku i wsadź ją w pierwszą wolną dziurę od początku... i tak w kółko aż obszar będzie spójny. W skrajnym przypadku doprowadzi to do 100% fragmentacji indeksu. U Ciebie tak się nie stanie, bo TRUNCATEONLY obcina tylko wolne miejsce i zwraca je do OS... co nie zmienia faktu, że nie jestem zwolennikiem obcinania (tym bardziej regularnego). Tak czy siak - SHRINK tylko w skrajnych, uzasadnionych przypadkach. :)

 

2. Zastanów się nad sensownością wykonywania tych operacji o 3:00 po full backup (który jest o 0:00). Jeśli baza walnie o 11-tej, to będziesz musiał odtworzyć wszystko z F-backupu, potem sprawdzić spójność, defragmentować indeksy etc. - bez sensu. Zazwycza lepiej te operacje (CHECK DB zwłaszcza) przed backupem bo po co Ci backup z błędami / pofragmentowanymi indeksami etc.  Chyba, że problem jest z oknem serwisowym.... wtedy trzeba kombinować.

 

3. Puchnięcie kopii różnicowej - bo jak wykonujesz po FULL Backup, rebuild indeksów to znacząco obciążasz log transakcyjny. DIFF zawiera wszystkie zmiany, więc również zmiany alokacji na stronach indeksu. Jest to kolejny powód, aby Full Backup robić po czynnościach utrzymaniowych. :)

 

4. Czy robić codziennie pełen Maintenance Plan? Tu musisz sam znaleźć odpowiedź - jak długo się on wykonuje. Jeśli ten czas jest akceptowalny np. 1h i mieści się w oknie serwisowym, to nie widzę powodów, aby go nie robić - same plusy. Jeśli się nie mieści, to może tylko defragmentować część indeksów (najważniejszych), update statstyk z próbkowaniem etc.

 

5. Aktualizacja statystyk jest bardzo wskazana. Bez aktualnych statystyk nigdy nie ma mowy o optymalnym planie wykonania (przypomnę, że auto update dopiero po 20% zmian!!! To mega dużo). SQL Server, jak i inne silniki, oparty jest o optymalizator kosztowy, który bez drogowskazu, jakimi są stats, nie jest w stanie wyliczyć WŁAŚCIWIE kosztu - i w ten sposób rodzą się duże rozbieżności pomiędzy ESTIMATED i ACTUAL rows i inne kłamstwa w planach wykonania. Jeśli czas Cię nie ogranicza - to oczywiście robić!

 

Pozdrowienia!

  • Odpowiedział
  • @ | 29.01.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Dziękuję za wyczerpującą odpowiedź.
Skomentował : @ Maciej_Krauze ,30.01.2015
  • 45
  • 16
  • 58