A volte capita che il database del WSUS cresca ad una dimensione decisamente esagerata. Ad esempio in SBS 2011 dove per default è impostato il download di tutti i prodotti Microsoft può arrivare tranquillamente a 15Gb.
L’elevata dimensione oltre a sprecare prezioso spazio disco sulla partizione C: causa anche un notevole calo di performance del servizio update.
Verifica presenza del problema
Per verificare lo stato del database conviene partire da un controllo della cartella C:\WSUS\SUSDB\UpdateServicesDbFiles. Se il file mdf è superiore ai 5Gb conviene approfondire.
Il secondo passo è installare il SQL Server Management Studio Express e accedere al database del WSUS. Per accedere usare come nome server \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query e autenticazione integrata.
Una volta fatto l’accesso espandere il nodo Databases e selezionare il SUSDB, poi tasto destro e proprietà. Se il SQL Manager dà un errore di mancata ownership sul database bisogna eseguire questo semplice script:
use susdb EXEC sp_changedbowner 'sa'
Nella finestra delle proprietà del database è segnato lo spazio libero all’interno del file. Se lo spazio libero è molto potete passare direttamente alla compressione del database. Altrimenti bisogna procedere alla pulitura.
Impostazioni del WSUS
Prima di eseguire la pulitura conviene verificare le impostazioni del WSUS per quanto riguarda:
- Lingue
- Prodotti
Per evitare lo scaricamento di una quantità eccessiva di update limitare le lingue e i prodotti a quello che è veramente installato nella rete.
Pulitura del Database
Il primo passo da fare è eseguire la Pulizia Guidata Server del WSUS dalla sua console. Consiglio di seguire questa sequenza:
- Eliminare i PC che non hanno contattato il server
- Rifiutare gli aggiornamenti scaduti e sostituiti
- Eliminare gli aggiornamenti e le revisioni non utilizzate
- Eliminare i file non più necessari
Eseguire gli step uno alla volta per non sovraccaricare il server. Da notare che spesso il punto 3 si interrompe e la console finisce in timeout:
In questo caso si può provare a ripetere lo step più volte finché non viene completato, oppure si può procedere direttamente via script dalla console di SQL:
DECLARE @var1 INT DECLARE @msg nvarchar(100) CREATE TABLE #results (Col1 INT) INSERT INTO #results(Col1) EXEC spGetObsoleteUpdatesToCleanup DECLARE WC Cursor FOR SELECT Col1 FROM #results OPEN WC FETCH NEXT FROM WC INTO @var1 WHILE (@@FETCH_STATUS > -1) BEGIN SET @msg = 'Deleting ' + CONVERT(varchar(10), @var1) RAISERROR(@msg,0,1) WITH NOWAIT EXEC spDeleteUpdate @localUpdateID=@var1 FETCH NEXT FROM WC INTO @var1 END CLOSE WC DEALLOCATE WC DROP TABLE #results
La procedura potrebbe girare per ore per cui portate molta pazienza.
Compressione del database
Per ritornare lo spazio al sistema operativo bisogna comprimere il file mdf. Fare tasto destro sul database SUSDB selezionare Azioni quindi Compatta e quindi File. Verificate che sia selezionato Dati su Tipo File e che sia attivato Rilascia Spazio Inutilizzato.
Verificate nella cartella C:\WSUS\SUSDB\UpdateServicesDbFiles che il file mdf sia di dimensioni più ridotte.