La ricostruzione dell'indice di SQL Server 2008 R2 non riesce con gravità 17


12

Occasionalmente durante la nostra manutenzione dell'indice, il lavoro fallirà con un errore SEV 17 in cui non è possibile allocare spazio sufficiente per l'oggetto che sta ricostruendo. Il database è strutturato come tale:

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

In sostanza, 3 dei 4 file di dati sono pieni e non possono crescere, il quarto è pieno e può crescere. I file sono distribuiti su diversi LUN (e il motivo per cui è disordinato). Quindi, quando inizia la ricostruzione dell'indice online, capisco che se è necessario spazio aggiuntivo, diventerà Data_file4 e andrà bene, ma a quanto pare sta cercando di crescere in un file diverso in cui la crescita non è consentita e non riesce. Non riesco a riprodurre questo errore, ma mi chiedevo se qualcuno avesse avuto un'idea del perché ciò accada.

La versione completa di SQL Server è 2008 R2 Enterprise, SP2 CU 4 (10.50.4270). Usiamo gli script di ricostruzione di Ola Hallengren, dove ricostruiamo online ma non ci riordiniamo tempdb.


È stata specificata la dimensione massima del file? I documenti dicono che If max_size is not specified, the file size will increase until the disk is full., se la crescita automatica è disattivata, non dovrebbe tentare di allocare da quei file ( A value of 0 indicates that automatic growth is set to off and no additional space is allowed.), ma potrebbe esserci un bug, quindi non farebbe male a provarlo se non è impostato.
Jon Seigel,

max_size isattualmente impostato su ILLIMITATO, anche su quelli con crescita 0. Sto indagando su questo nel mio test di riproduzione in questo momento.
Mike Fal,

Stai registrando i risultati? Se conservi i record storici, l'errore si verifica sullo stesso indice ogni volta che fallisce?
Cougar9000,

Quante pagine è l'indice in questione?
Mark Wilkinson,

Inoltre, si tratta di un errore generato dallo script o di un vero errore di SQL Server? Lo chiedo perché mi chiedo se forse stai colpendo un limite di dimensioni del registro delle transazioni, al contrario di un limite di dimensioni del file di dati, e lo script gestisce l'errore in modo errato.
Mark Wilkinson,

Risposte:


1

La mia esperienza è che eseguirà sempre una ricostruzione online nel filegroup in cui risiede l'indice. Deve mappare l'indice esistente e contenere abbastanza spazio per, essenzialmente, una copia.

Dovresti ricevere l'errore solo quando viene ricostruito un indice che è troppo grande per contenere i mapping (la copia), ad esempio una volta potrebbe essere abbastanza frammentato da qualificarsi nello script di Ola e la prossima volta potrebbe non esserlo.

C'è un ottimo articolo http://technet.microsoft.com/en-us/library/ms179542(v=sql.105).aspx che ho dovuto leggere più volte quando ho riscontrato problemi di spazio su disco con gli indici.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.