Obecnie uruchamiam skrypt, który wykonuje DBCC INDEXDEFRAG na każdej tabeli w bazie danych SQL Server 2005, po jednej tabeli na raz. Używanie DBCC DBREINDEX zamiast INDEXDEFRAG nie jest opcją ze względu na ograniczenia miejsca i wymagania dotyczące czasu pracy.
Zauważyłem, że defragmentacja niektórych tabel zajmuje dużo czasu. Na przykład, jeśli zbadam dynamiczny widok zarządzania „sys.dm_exec_requests”, zobaczę, że następujący INDEXDEFRAG obecnie rezygnuje z indeksu klastrowego tabeli o identyfikatorze tabeli 829610394:
DBCC INDEXDEFRAG (0, 829610394, 1)
Wiem, że upłynie dużo czasu, zanim proces defragmentacji zostanie zakończony. Pomijając fakt, że aktualnie uruchomiony skrypt ostatecznie zdefragmentuje wszystkie tabele, czy jest jakieś szkody we mnie ręcznie, uruchamiając kolejne DBCC INDEXDEFRAG na indeksie klastrowym innej tabeli podczas wykonywania bieżącego polecenia? Czy obie tabele zostaną faktycznie defragmentowane w tym samym czasie, jeśli to zrobię?
źródło
Zauważ, że DBCC INDEXDEFRAG i DBREINDEX są przestarzałe i zastąpione przez ALTER INDEX:
Jeśli chodzi o jednoczesne uruchomienie dwóch, zależy to od układu plików. Jeśli wszystkie znajdują się na tym samym dysku (dyskach), prawdopodobnie spowolnilibyście każdy, ponieważ walczyliby ze sobą o I / O. Najlepiej byłoby REORG lub REBUILD tylko w razie potrzeby. Sprawdź skrypt Michelle Ufford tutaj, aby uzyskać zautomatyzowane rozwiązanie: http://sqlfool.com/2010/04/index-defrag-script-v4-0/
źródło