Odbudowywanie indeksu SQL Server 2008 R2 kończy się niepowodzeniem z istotnością 17

12

Czasami podczas konserwacji indeksu zadanie zakończy się niepowodzeniem z błędem SEV 17, w którym nie można przydzielić wystarczającej ilości miejsca dla obiektu, który odbudowuje. Baza danych ma następującą strukturę:

Data_file1    PRIMARY    0 growth         0% free                Max Size UNLIMITED
Data_file2    PRIMARY    0 growth         0% free                Max Size UNLIMITED
Data_file3    PRIMARY    0 growth         Less than 1% free      Max Size UNLIMITED
Data_file4    PRIMARY    250 MB growth    Less than 1% free      Max Size UNLIMITED

Zasadniczo 3 z 4 plików danych są pełne i nie mogą rosnąć, czwarty jest pełny i może rosnąć. Pliki są rozłożone na różne jednostki LUN (i powód, dla którego jest bałagan). Tak więc, kiedy rozpoczyna się przebudowa indeksu online, rozumiem, że jeśli potrzebna będzie jakakolwiek dodatkowa przestrzeń, wzrośnie do pliku_pliku danych4 i będzie w porządku, ale najwyraźniej próbuje rozwinąć się do innego pliku, w którym wzrost nie jest dozwolony i kończy się niepowodzeniem. Nie jestem w stanie odtworzyć tego błędu, ale zastanawiałem się, czy ktoś miał wgląd w to, dlaczego tak się dzieje.

Pełna wersja SQL Server to 2008 R2 Enterprise, SP2 CU 4 (10.50.4270). Używamy skryptów przebudowy Oli Hallengren, w których przebudowujemy online, ale nic w tym rodzaju tempdb.

Mike Fal
źródło
Czy określono maksymalny rozmiar pliku? Dokumenty mówią: If max_size is not specified, the file size will increase until the disk is full.Przyznane, jeśli automatyczne powiększanie jest wyłączone, nie powinno to być próbą alokacji z tych plików ( A value of 0 indicates that automatic growth is set to off and no additional space is allowed.), ale może wystąpić błąd, więc nie zaszkodzi spróbować, jeśli nie zostanie ustawiony.
Jon Seigel
max_size isobecnie ustawiony na NIEOGRANICZONY, nawet na tych, które mają 0 wzrost. Badam to teraz w moim teście repro.
Mike Fal
Czy logujesz wyniki? Jeśli przechowujesz dane historyczne, czy błąd występuje w tym samym indeksie za każdym razem, gdy zawodzi?
Cougar9000
Ile stron ma dany indeks?
Mark Wilkinson
Ponadto, czy jest to błąd generowany przez skrypt, czy rzeczywisty błąd serwera SQL? Pytam, bo zastanawiam się, czy osiągasz limit wielkości dziennika transakcji, a nie limit wielkości pliku danych, a skrypt źle obsługuje błąd.
Mark Wilkinson

Odpowiedzi:

1

Z mojego doświadczenia wynika, że ​​zawsze będzie przeprowadzać przebudowę online w grupie plików, w której indeks żyje. Musi odwzorować istniejący indeks i pomieścić wystarczającą ilość miejsca na jedną kopię.

Błąd powinien pojawiać się tylko wtedy, gdy indeks, który jest zbyt duży, aby pomieścić odwzorowania (kopię), jest odbudowywany - na przykład raz może być wystarczająco fragmentaryczny, aby kwalifikować się w skrypcie Oli, a następnym razem może nie być.

Jest świetny artykuł http://technet.microsoft.com/en-us/library/ms179542(v=sql.105).aspx, który musiałem przeczytać kilka razy podczas uruchamiania problemów z miejscem na dysku z indeksami.

rottengeek
źródło