Kiedy defragmentować indeks? (DBCC REORGANIZE i DBCC REBUILD)

14-Mar-2012

Kiedy defragmentować indeks, to jedno z najczęstszych pytań na szkoleniach.

Tutaj nie tłumaczę, jak jest zbudowany indeks, ani na czym polega defragmentacja. Nie wyjaśnię nawet składni polecenia DBCC REORGANIZE ani DBCC REBUILD. Powtórzę jednak za blogiem Paula Randal wartości przy których należy uruchomić odpowiednie polecenia.

Przyznam, że szczera odpowiedź na pytanie „Kiedy mam uruchomić REBUILD, a kiedy REORGANIZE, a kiedy zupełnie się tym nie przejmować” brzmi to zależy od:

  • rodzaju bazy danych i tego jak użytkownicy wykorzystują tę bazę danych (OLTP/OLAP)
  • rodzaju zastosowanych technologii wysokiej dostępności (high aviability)
  • parametrów serwera (wielkość dysku, ilość pamięci)
  • zapytań wykonywanych przez użytkowników
  • stategii backupu
  • itp.

Kiedy jednak zaczynasz pracę z serwerem, trudno by było ogarnąć to wszystko za jednym zamachem. Chciało by się więc otrzymać zestaw konkretnych wskazówek, które jasno określają: jeżeli fragmentacja wynosi x% to uruchom polecenie y.

Oto taka propozycja:

  • jeżeli fragmentacja <5% to możesz dalej… grać w sapera
  • Jeżeli fragmentacja >=5% i < 30% uruchom DBCC REORGANIZE. Spowoduje to usunięcie fragmentacji jedynie na najniższym poziomie liści indeksu. Polecenie zadziała stosunkowo szybko, ale pozostawi fragmentację indeksu na pośrednich poziomach indeksu (między root, a leaf).
  • Jeżeli fragmentacja >=30% to jest źle i indeks należy przebudować poleceniem DBCC REBUILD. Komenda będzie trwała na pewno dłużej niż REORGANIZE, ale za to przebuduje indeks w całości od root do leaf i po wykonaniu tego polecenia fragmentacja powinna wynosić 0%, dzięki czemu znowu możesz pograć…

W/w wskazówki to tylko propozycja i administrator  sam może ustalić wartości progowe do uruchomienia tych poleceń. Jeżeli jednak nie masz bladego pojęcia, kiedy uruchomić które z poleceń możesz usuwać fragmentację zgodnie z tymi wytycznymi.

Dodaj komentarz:

Autor: Rafał Kraik