Czy można uruchomić jednocześnie dwie komendy DBCC INDEXDEFRAG, każda na innej tabeli?

9

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ę?

RelentlessMike
źródło

Odpowiedzi:

15

Tak, możesz to zrobić dla wielu tabel. Nie możesz tego zrobić dla wielu indeksów w tej samej tabeli - wymyśliłem nowy zasób blokady indeksów, aby temu zapobiec. Takie samo zachowanie w ALTER INDEX ... REORGANIZE, które zastąpiłem w 2005 roku.

Dzięki

Paul S. Randal
źródło
2
Nie możesz uzyskać dokładniejszej odpowiedzi niż osoba, która ją napisała! Nie zapomnij o obciążeniu We / Wy związanym z wykonywaniem wielu przebudowań lub przebudowań w tym samym czasie i pamiętaj, aby używać polecenia ALTER INDEX zamiast polecenia DBCC.
AndrewSQL,
Zgadzam się, nie wiem, w jaki sposób można uzyskać dokładniejszą odpowiedź na ten konkretny problem niż bezpośrednio od Paula Randala. Dzięki Paul.
RelentlessMike
6

Zauważ, że DBCC INDEXDEFRAG i DBREINDEX są przestarzałe i zastąpione przez ALTER INDEX:

Ważny

Ta funkcja zostanie usunięta w przyszłej wersji Microsoft SQL Server. Nie używaj tej funkcji w nowych pracach programistycznych i jak najszybciej modyfikuj aplikacje, które obecnie korzystają z tej funkcji. Zamiast tego użyj ALTER INDEX. - http://msdn.microsoft.com/en-us/library/ms177571(v=SQL.90).aspx

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/

Eric Humphrey - lotsahelp
źródło
Dzięki Eric. W tym konkretnym przypadku baza danych jest rozproszona na wiele plików danych, na różnych partycjach i na szczycie sieci SAN IBM DS8300. Więc myślę, że będę w porządku, jeśli chodzi o wejścia / wyjścia.
RelentlessMike