Tags: WSUS, Datenbanken, Troubleshooting, IIS
Wenn 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 vielversprechende 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 Fortschrittsbalken 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.
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 CleanupObsoleteUpdates 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 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.
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"
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
Ähnliche Beiträge
- WSUS für die Windows 10/11 Unified Update Platform (UUP) vorbereiten
- Updates in WSUS importieren mit Internet Explorer oder PowerShell
- WSUS-Speicherplatz zurückgewinnen: Alte und ersetzte Updates löschen
- Exchange-Datenbankfehler untersuchen und beheben
- WSUS-Datenbank von WID auf SQL Server migrieren
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
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.