WSUS DB fuori misura

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.

authSQLwsus

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.

Spazio Libero DB

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:

  1. Eliminare i PC che non hanno contattato il server
  2. Rifiutare gli aggiornamenti scaduti e sostituiti
  3. Eliminare gli aggiornamenti e le revisioni non utilizzate
  4. 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:

WSUS timeoutIn 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.