pcpanik
Goto Top

WSUS Bereinigung bricht nach 150s ab

Hallo,

ich habe die SQL 2019 SUSDB unseres WSUS bereits auf Timout=0 gestellt.
Im IIS des WSUS habe ich das Verbindungstimeout bereits auf 10800 Sekunden gestellt.

Die DB wird täglich mit dem hier verfügbaren T_SQL Script reindexiert: https://learn.microsoft.com/de-de/troubleshoot/mem/configmgr/update-mana ...

SQL Server und WSUS Server sind beides vmware VMs auf potenter Hardware und Flash Speicher.

Alles läuft soweit prima .... bis auf die Bereinigung der nicht verwendeten Update-Revisionen (erster Haken bei der Serverbreinigung)

Nach exakt 150 Sekunden kommt dieser Datenbankfehler und die Konsole ist weg.


Stellen Sie sicher, dass SQL Server auf dem WSUS-Server ausgeführt wird. Starten Sie SQL erneut, wenn das Problem weiterhin besteht.


System.Data.SqlClient.SqlException -- Das Ausführungstimeout ist abgelaufen. Der Timeoutzeitraum wurde überschritten, bevor der Vorgang beendet wurde, oder der Server antwortet nicht.
Der Vorgang wurde vom Benutzer abgebrochen.
Die Anweisung wurde beendet.

Source
.Net SqlClient Data Provider

Stack Trace:
bei System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
bei System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
bei Microsoft.UpdateServices.UI.SnapIn.Wizards.ServerCleanup.ServerCleanupWizard.OnCleanupComplete(Object sender, PerformCleanupCompletedEventArgs e)


Diese 150 Sekunden scheinen mir nicht willkürlich, sondern ein "irgendwo" verankerter Wert zu sein.
Da ich den DB Wert schon auf 0 und den IIS Wert auf 10800 habe ...

Wo finde ich die Möglichkeit den Timeout des Connection String des WSUS Bereinigungsassitenten zu bearbeiten und ggf. abzuschalten? Weiß das jemand?

(P.S. hatte erst 180s geschrieben, habe aber nochmal nachgemessen. Es sind jedes mal nur 2,5 Minuten nicht 3.)

Content-ID: 42191442943

Url: https://administrator.de/contentid/42191442943

Ausgedruckt am: 19.11.2024 um 17:11 Uhr

erikro
erikro 11.10.2023 um 16:16:09 Uhr
Goto Top
Moin,

schonmal im Performance Dashboard des MSSMS nach missing indexes geguckt.

Liebe Grüße

Erik
pcpanik
pcpanik 11.10.2023 um 16:18:26 Uhr
Goto Top
Nein. Danke für Deine Antwort. Schaue ich mir morgen mal mit unserem DB Admin an.
erikro
erikro 11.10.2023 um 16:37:03 Uhr
Goto Top
Zitat von @pcpanik:

Nein. Danke für Deine Antwort. Schaue ich mir morgen mal mit unserem DB Admin an.

Aus Erfahrung kann ich nur dazu raten, alle vorgeschlagenen zusätzlichen Indices auch zu erstellen. WSUS wird erheblich schneller.
pcpanik
pcpanik 11.10.2023 um 16:43:54 Uhr
Goto Top
Ich bin davon ausgegangen, dass dies (reindexieren) durch das T-SQL Script passiert. Und das läuft jeden Tag. Stoße ich es per Hand an ist es nach wenigen Sekunden fertig.

Was mich halt wundert, es sind immer exakt 150 Sekunden. Dann steigt die WSUS Konsole aus.
Ich bin jetzt davon ausgegangen, dass der Bereinigunsprozess mit einer SQL-Abfrage mit einem festgelegtem Timeout startet. Und dass es möglich sein müsste, diesen zu verändern.

Denn egal wie schnell der DB Server auch am Ende sein mag, scheinen ja die 150 Sekunden irgendwie gesetzt?
MysticFoxDE
MysticFoxDE 11.10.2023 um 19:45:06 Uhr
Goto Top
MysticFoxDE
MysticFoxDE 12.10.2023 um 06:36:29 Uhr
Goto Top
Moin @pcpanik,

Ich bin jetzt davon ausgegangen, dass der Bereinigunsprozess mit einer SQL-Abfrage mit einem festgelegtem Timeout startet. Und dass es möglich sein müsste, diesen zu verändern.

jup, das geht.

Mit dem folgenden Befehl, entfernst du den SQL-Abbfrage-Timeout.

(SQL)
USE SUSDB;
GO
EXEC sp_configure 'remote query timeout', 0 ;  
GO
RECONFIGURE ;
GO

Und der folgende, entfernt den Timeout für den IIS-AppPool.

(Power-Shell)
Set-ItemProperty IIS:\AppPools\WsusPool -Name processModel.idleTimeout -Value "00:00:00"  

😉

Gruss Alex
pcpanik
pcpanik 12.10.2023 aktualisiert um 08:47:08 Uhr
Goto Top
Hi, ja, Deinen Pfad kenne ich natürlich und wir haben da auch schon uns unterhalten und ich das Script genutzt.
Im Großen und ganzen läuft unser WSUS auch zuverlässig und gut.

Nur diese Bereinigung ...

Dankeschön. Das ist ja super, dass das geht.

Ich gehe davon aus, der SQL Wert ist in Sekunden? Dann werde ich erst einmal 10 Minuten eintragen und testen. Beim IIS sind es h:m:s ?
pcpanik
pcpanik 12.10.2023 aktualisiert um 08:59:54 Uhr
Goto Top
Schade, das hat jetzt leider nichts geändert.

Der remote query timeout stand eh schon auf 600 Sekunden.
Und der AppPool idle.Timeout auf 20 Minuten.

Auch bei 0 bricht die Bereinigung nach 150s ab. Irgendwo muss dieser Wert anderweitig gesetzt sein.
MysticFoxDE
MysticFoxDE 12.10.2023 um 09:24:17 Uhr
Goto Top
Moin @pcpanik,

Auch bei 0 bricht die Bereinigung nach 150s ab. Irgendwo muss dieser Wert anderweitig gesetzt sein.

um ehrlich zu sein nutzen wir die GUI des WSUS nicht wirklich gerne für die Bereinigung, weil die in den meisten Fällen nur Ärger macht und oder zu lange benötigt.

Hast du die Bereinigung schon mal nur über Power-Shell versucht?
https://learn.microsoft.com/en-us/powershell/module/updateservices/invok ...

Gruss Alex
Spirit-of-Eli
Spirit-of-Eli 12.10.2023 um 09:30:32 Uhr
Goto Top
Moin,

ich passe bei einem WSUS immer den Wert hier für den Timeout an. Dazu hatte ich mir mal folgendes aus irgend einem Forum kopiert:

Der Workaround
So eine richtige Lösung dafür gibt es nicht wirklich, aber einen gut funktionierenden Workaround. Ihr könnte das Ganze natürlich mit höher getakteten CPUs und noch mehr RAM zu erschlagen versuchen, Microsoft empfiehlt aber eine kostengünstigere Variante: Erhöht das ASP.NET Timeout für den WSUS-App-Pool. Dazu müsst ihr in der Datei „\Program Files\Update Services\WebServices\ClientWebService\Web.Config“ folgende Zeile finden:
<httpRuntime maxRequestLength="4096" />  
1
<httpRuntime maxRequestLength="4096" />  
Diese muss dann um den Parameter „ExecutionTimeout“ erweitert werden:
<httpRuntime maxRequestLength="4096" executionTimeout="3600" />  
1
<httpRuntime maxRequestLength="4096" executionTimeout="3600" />  
Jetzt noch ein „iisreset“, damit wird die Einstellung wirksam. Nun hat der Server 60 Minuten Zeit, mit dem Client über Updates zu verhandeln, statt wie zuvor knappe 2 Minuten. Das sollte reichen. Weiter optimieren lässt sich das Thema anhand dieses weiteren Technet Eintrags, wo folgende Einstellungen des WSUS-App-Pools (Advanced Settings im IIS Manager) empfohlen werden:

Nach Anpassung jeglicher Werte ist ein Neustart des Servers das beste wie ich feststellen musst.

Ansonsten setze ich die Werte im WSUS-Pool immer wie folgt:
Changed the Private Memory Limit (KB) to 0 – This actually removes the memory limit. I’d actually suggest making it slight less that the memory available on your server, but I’ve not had any issue from setting this to 0 yet.

Change the Service Unavailable Response from HttpLevel to TcpLevel – The documentation states that change this to TcpLevel will reset the connection rather than return a HTTP 503 error. I found this via a Google Search and haven’t had any issues since making this change.

Change Limit Interval (minutes) from 5 to 15 – This specifies the reset period for the CPU monitoring and throttling limits for the application pool.

Change the Queue Length from 1000 to 2500 – This increases the queue length for the application pool.

Das Re-Indexing reicht einmal im Monat. Läuft dein Wsus schon immer auf einem vollwertigen SQL Server, oder hast du Migriert? Bei einer Migration konnte ich bisher keine Performance gewinne feststellen. Von Anfang an ist sogar ein SQL-Express ein riesen Gewinn.

Gruß
Spirit
pcpanik
pcpanik 12.10.2023 um 09:55:46 Uhr
Goto Top
Danke für eure Beiträge, ich teste es mal durch.
Der WSUS lief für ca 1 Monat auf der WID und dann habe ich den direkt umgezogen. Ich glaube der ist jetzt seit 3 Jahren auf der MSSQL. Wir haben die DB kürzlich von SQL 2015 auf 2019 verschoben und auf Flash Storage.
Nutzt nur alles nix, wenn man in Timeouts gerät .
MysticFoxDE
MysticFoxDE 12.10.2023 um 10:07:44 Uhr
Goto Top
Moin @Spirit-of-Eli,

Von Anfang an ist sogar ein SQL-Express ein riesen Gewinn.

eine SQL-Express DB solltest du nur dann verwenden, wenn du dir sicher bist, dass deinen SUSDB nicht über 10G gross wird.

Die meisten SUS-DB's unserer Kunden haben jedoch meistens weit über 50 GB. 😔

Gruss Alex
pcpanik
pcpanik 12.10.2023 aktualisiert um 10:20:54 Uhr
Goto Top
Unsere ist 24 GB. Ich bemühe mich schon, alles relativ Stramm zu halten. Content Store tingelt meist auch um 1 TB herum.

Mit PS läuft der UpdateCompress jetzt offenbar (ausnahmsweise) durch ... ich will noch nicht feiern, aber die 150 Sekunden sind schon mal vorrüber. Das ist mir früher unter PS auch immer weider abgebrochen. Ich glaub daher bin ich auch wieder zur GUI, weil es keien Unterschied machte.

Ggf. klappt es ja jetzt ....

Ansonsten steht bei uns noch die Idee im Raum, dass wir uns "Kawumm" (CAWUM) von Aagon anschauen und ggf dazu wechseln. Der Vorteil liegt darin die Updates auf die Sekunde genau auf die Systeme zu bekommen.
pcpanik
pcpanik 12.10.2023 aktualisiert um 10:36:57 Uhr
Goto Top
Seufz, kennt Ihr das auch, wenn man meint ein Prozess läuft noch, aber wenn man dann mal "Enter" drückt ...


invoke-wsusservercleanup -CompressUpdates
invoke-wsusservercleanup : Das Ausführungstimeout ist abgelaufen. Der Timeoutzeitraum wurde überschritten, bevor der
Vorgang beendet wurde, oder der Server antwortet nicht.
Der Vorgang wurde vom Benutzer abgebrochen.
Die Anweisung wurde beendet.
In Zeile:1 Zeichen:1
invoke-wsusservercleanup -CompressUpdates
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : InvalidData: (Microsoft.Updat...rCleanupCommand:InvokeWsusServerCleanupCommand) [Invoke-
WsusServerCleanup], SqlException
FullyQualifiedErrorId : UnexpectedError,Microsoft.UpdateServices.Commands.InvokeWsusServerCleanupCommand


... noch mal versucht. 150s

Ich gehe mal die Punkte von Spirit-of-Eli durch.

Danke jedenfalls für eure Vorschläge.
MysticFoxDE
MysticFoxDE 15.10.2023 um 08:10:54 Uhr
Goto Top
Moin @pcpanik:

invoke-wsusservercleanup -CompressUpdates
invoke-wsusservercleanup : Das Ausführungstimeout ist abgelaufen. Der Timeoutzeitraum wurde überschritten, bevor der
Vorgang beendet wurde, oder der Server antwortet nicht.
Der Vorgang wurde vom Benutzer abgebrochen.
Die Anweisung wurde beendet.
In Zeile:1 Zeichen:1
invoke-wsusservercleanup -CompressUpdates
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CategoryInfo : InvalidData: (Microsoft.Updat...rCleanupCommand:InvokeWsusServerCleanupCommand) [Invoke-
WsusServerCleanup], SqlException
FullyQualifiedErrorId : UnexpectedError,Microsoft.UpdateServices.Commands.InvokeWsusServerCleanupCommand


... noch mal versucht. 150s

🤔 ... du hast die SUSDB ja auf einem erwachsenen SQL Server.
Hast du auf der SUSDB schon den Abfragespeicher mal testweise aktiviert?

https://learn.microsoft.com/de-de/sql/relational-databases/performance/m ...
https://learn.microsoft.com/de-de/sql/relational-databases/performance/b ...

Damit lässt sich relativ einfach rausfieseln, welcher SQL dir das Genick bricht.

Aktiviere auf der SUSDB einfach den Abfragespeicher und mache ein paar mal hintereinander den Vorgang der zum Absturz führt.

Danach solltest du über die folgende Auswertung ...

abfragespeicher

... den Übeltäter relativ einfach entlarven können. 😉

Gruss Alex
pcpanik
pcpanik 19.10.2023 um 09:04:07 Uhr
Goto Top
Das werde ich machen. Vielen Dank face-smile
pcpanik
pcpanik 19.10.2023 aktualisiert um 11:42:32 Uhr
Goto Top
Habe es auf der SUSDB angeschaltet und ein paar mal bis zum Konsolen-Crash durchlaufen lassen und erhalte weiterhin in der Konsole den Fehler:
Die WSUS-Verwaltungskonsole konnte keine Verbindung mit der WSUS-Serverdatenbank herstellen.

Stellen Sie sicher, dass SQL Server auf dem WSUS-Server ausgeführt wird. Starten Sie SQL erneut, wenn das Problem weiterhin besteht.


System.Data.SqlClient.SqlException -- Das Ausführungstimeout ist abgelaufen. Der Timeoutzeitraum wurde überschritten, bevor der Vorgang beendet wurde, oder der Server antwortet nicht.
Der Vorgang wurde vom Benutzer abgebrochen.
Die Anweisung wurde beendet.

Source
.Net SqlClient Data Provider

Stack Trace:
bei System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
bei System.Windows.Forms.Control.Invoke(Delegate method, Object[] args)
bei Microsoft.UpdateServices.UI.SnapIn.Wizards.ServerCleanup.ServerCleanupWizard.OnCleanupComplete(Object sender, PerformCleanupCompletedEventArgs e)


Dabei ist auf der SUSDB in der Abfrage mit den höchste Ressourcen dieses Bild zu sehen:

susdb_top1
susdb_top2
susdb_top3

Was mir allerdings nicht recht weiterhilft an welcher Stellschraube zu drehen ist. Es bleibt auf jeden Fall bei den 150s, die bis zum Timeout verstreichen. Objekt ist die. tbChangeTracking.c0ChangeTracking

P.S. die von @sprit-of-eli vorgeschlagenen Einstellungen hatte ich bereits gesetzt.