WSUS-Bereinigung bricht ab: Timeout für Datenbank und IIS erhöhen


    Tags: , , ,

    Fehlermeldung WSUS-KonsoleWenn sich viele abgelaufene oder ersetzte Updates in WSUS angesammelt haben, dann stürzt der Assistent für die Serverbereinigung ab. Das Problem ist oft nur schwer in den Griff zu bekommen, aber viel­versprechende Maßnahmen sind ein längerer Timeout für die IIS und die Datenbank sowie mehr Speicher für den IIS-AppPool.

    Das Problem ist den meisten WSUS-Admins wohlbekannt: Der animierte Fortschritts­balken im Assistenten für die Serverbereinigung bleibt über längere Zeit an der gleichen Position hängen und irgendwann kommt die Meldung, wonach ein Datenbankfehler aufgetreten ist. Die Konsole bietet dann an, den Serverknoten zurückzusetzen.

    Nutzt man stattdessen PowerShell für die Bereinigung, dann erscheint in dieser Situation folgende Meldung:

    Invoke-WsusServerCleanup: Das Ausführungstimeout ist abgelaufen. Der Timeoutzeitraum wurde überschritten, bevor der Vorgang beendet wurde, oder der Server antwortet nicht.

    Diskussionen zu diesem Problem finden sich in zahlreichen Foren. Sie laufen wie diverse Blog-Beiträge letztlich auf eine Handvoll Tipps hinaus, die Abhilfe schaffen können.

    Aufgaben zur Bereinigung getrennt ausführen

    Zuerst ist es einen Versuch wert, nicht alle Aufgaben für die Bereinigung auf einmal laufen zu lassen, sondern diese einzeln zu starten.

    Die Bereinigungs-Jobs kann man einzeln starten, um einen Timeout zu vermeiden.

    In PowerShell ruft man dazu Invoke-WsusServerCleanup immer nur mit einem einzelnen Parameter auf, und zwar einem aus

    • CleanupObsoleteComputers
    • CleanupObsoleteUpdates
    • CleanupUnneededContentFiles
    • DeclineExpiredUpdates
    • DeclineSupersededUpdates

    In den meisten Fällen bricht der Vorgang dann bei Cleanup­Obsolete­Updates trotzdem ab.

    Timeout für Datenbank erhöhen

    Die meisten WSUS-Installationen nutzen die interne Windows-Datenbank (WID). In diesem Fall sollte man ohnehin regelmäßig das Wartungs-Script für susdb ausführen. Falls das länger nicht passiert ist, dann empfiehlt sich, das jetzt tun (siehe Anleitung).

    In der Regel wird auch das nicht zur erfolgreichen WSUS-Bereinigung verhelfen. Daher sollte man im nächsten Schritt den Timeout für die Datenbank heraufsetzen. Der Vorgabewert liegt bei 600 Sekunden. Wenn man hier den Wert 0 nimmt, dann entfernt man das Zeitlimit komplett.

    Dafür führt man mit Hilfe von sqlcmd.exe das folgende T-SQL-Script aus, das man in einer Datei namens timeout.sql speichern könnte:

    Ein Aufruf dafür würde so aussehen:

    "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\sqlcmd.exe"  -I -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i timeout.sql

    Die Beseitigung des Zeitlimits für die Windows-Datenbank führte in diesem Beispiel zu einer erfolgreichen Bereinigung.

    Die hier gezeigte Variante für die Kommandozeile hat den Vorteil, dass sie auch unter Server Core läuft.

    Index für susdb erzeugen

    Eine weitere von Microsoft empfohlene Maßnahme besteht im Anlegen eines Custom Index, um die Datenbankoperationen zu beschleunigen. Zu diesem Zweck speichert man folgendes Script in einer Datei:

    Dieses führt man nach dem gleichen Muster aus wie das obige zur Erhöhung des Timeouts:

    "C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\sqlcmd.exe"  -I -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i .\CreateCustomIndex.sql

    Falls der Index bereits existiert, gibt das Script einen Fehler aus.

    Ein Custom Index beschleunigt die Datenbankoperationen. Existiert er bereits, dann zeigt das Script eine Fehlermeldung.

    Timeout für IIS-AppPool erhöhen

    Eine weitere Maßnahme besteht in der Anpassung der IIS-Konfiguration. Auch hier besteht die Möglichkeit, den Timeout hinaufzusetzen bzw. mit dem Wert 0 ganz zu beseitigen. Dies lässt sich über den grafischen IIS-Manager erledigen, aber das folgende Vorgehen mittels PowerShell klappt auch unter Server Core.

    Zuerst muss man sicherstellen, dass auf dem WSUS-Server das PowerShell-Modul für die IIS geladen ist. Dies kann man mittels

    Get-Module WebAdministration

    abfragen. Falls es nicht vorhanden ist, installiert man es mit

    Add-WindowsFeature Web-Scripting-Tools

    und importiert es mit

    Import-Module WebAdministration

    In der Folge steht der PSDrive IIS:\ zur Verfügung. Über diesen kann man die aktuelle Einstellung für den Timeout des WSUS-AppPools ermitteln:

    Get-ChildItem IIS:\AppPools | ? name -eq "WsusPool" |
    select name, @{Name="Timeout"; Exp={$_.processmodel.idletimeout}}

    Diesen erhöht man nun auf den gewünschten Wert oder setzt ihn auf 0, um ihn außer Kraft zu setzen:

    Set-ItemProperty IIS:\AppPools\WsusPool `
    -Name processModel.idleTimeout -Value "00:00:00"

    Timeout für den WSUS-AppPool auf 00:00:00 setzen und somit deaktivieren

    Private Memory Limit aufheben

    Microsoft empfiehlt zudem als Best Practice, das Private Memory Limit für den WSUS-AppPool ebenfalls auf 0 und damit außer Kraft zu setzen. Den aktuellen Wert kann man so erfragen:

    Get-ChildItem IIS:\AppPools | ? name -eq "WsusPool" | select name, @{Name="Memory"; Exp={$_.recycling.periodicrestart.privateMemory}}

    Wenn notwendig, ändert man den Wert über diesen Befehl auf 0:

    Set-ItemProperty IIS:\AppPools\WsusPool -Name recycling.periodicrestart.privateMemory -Value 0

    Zusammenfassung

    Wenn man die regelmäßige WSUS-Bereinigung und die Datenbankwartung vernachlässigt, dann scheitert ab einem gewissen Zeitpunkt das Löschen nicht mehr benötigter Updates. Dieses Problem ist weit verbreitet und oft ziemlich hartnäckig.

    Die Beseitigung des Timeouts für die Datenbank und den IIS-AppPool für WSUS sowie die Erhöhung des Limits für dessen Private Memory sind Maßnahmen, die oft zu einer erfolgreichen Bereinigung von WSUS verhelfen.

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Ähnliche Beiträge

    Weitere Links

    5 Kommentare

    Wir setzen seit nunmehr 2 Jahren das "WSUS Automated Maintenance Tool" von https://www.ajtek.ca/ ein und sind damit höchst zufrieden! Seitdem bleibt der WSUS-Server nicht mehr hängen, der Speicherplatzbedarf ist extrem gesunken und das Tool ist noch kein einziges Mal abgestürzt.

    es hilft auch wenn man den Dienst "interne Windows-Datenbank" neustartet

    Löst ALLE Probleme und Sorgen mit WSUS auf einen Schlag https://ajtek.org/ AJtek WAM
    oder die kostenfreie WSUS alternative Azure Update Management Center

    Bild von Wolfgang Sommergut

    Ich sehe, es gibt hier zufriedene Kunden von AJTek :-) Wir haben über WSUS Automated Maintenance vor einiger Zeit geschrieben. Aber für User, die das Tool nicht haben, können Tipps für die Bordmittel nützlich sein.

    Danke Wolfgang! Ich bin persönlich nunmehr von der Azure Lösung auch für on-premises überzeugt. Ich plane ein Webinar dazu zu halten. Wenn du wünschst, melde ich mich gern dazu, wenn es veröffentlicht ist.