UW-Forum

Forum von UW-Operator.de
Aktuelle Zeit: Freitag 29. März 2024, 11:02

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: WSUS Bereinigung bekommt TimeOut
Ungelesener BeitragVerfasst: Donnerstag 23. Februar 2017, 10:44 
Offline
Benutzeravatar

Registriert: Samstag 10. Dezember 2011, 17:19
Beiträge: 282
Problem:
Die Bereinigung des WSUS egal ob per GUI oder PowerShell - Jeder Admin sollte ein Script haben, dass automatisiert ausgeführt wird - läuft auf einen TimeOut.

Lösung 1:
Man kann nun versuchen die Bereinigung jedes Elements einzeln durchzuführen. Mit etwas Glück läuft die Bereinigung so durch und anschließend auch wieder ohne Probleme...
Wahrscheinlicher ist aber, dass der TimeOut bei folgendem Befehl auftaucht:
Code:
Invoke-WsusServerCleanup -CleanupObsoleteUpdates
Lösung 2:
  • Über das SQL Server Management Studio verbindet man sich direkt mit der Datenbank. (Bei einem 2012R2 Server ist das über \\.\pipe\Microsoft##WID\tsql\query möglich beim 2008R2 Server sollte \\.\pipe\MSSQL$MICROSOFT##SSEE\sql\query funktionieren)
  • Nun unter Rechtsklick auf die Datenbank "Neue Abfrage" wählen.
  • Die Updates welche bereinigt werden sollten können mit folgendem Code abgefragt werden:
    Code:
    USE SUSDB
    GO
    exec spGetObsoleteUpdatesToCleanup
  • Notieren Sie sich die Anzahl der Abgefragten Zeilen um später feststellen zu können ob die Bereinigung zumindest einen Teilerfolg bringt.
  • Löschen Sie die erste ID mit folgendem Befehl (123456 ist nur ein Beispiel und muss durch die erste ID ersetzt werden!):
    Code:
    USE SUSDB
    GO
    exec spDeleteUpdate @localUpdateID=123456
  • Anschließend die Bereinigung über den üblichen Weg testen. Mit dem Abfrage-Befehl aus Punkt 3 kann geprüft werden ob die zu löschenden Updates auch weniger werden. Kann sein, dass man hier öfter "hängt" und den Schritt des manuellen Löschens mehrfach durchführen muss.
*grüßgott*
Unter http://bit.ly/1pkx8Bm kann man diese Lösung noch komplett nachlesen.

_________________
In diesem Sinne...

Ulrich Wiedholz
UW-Operator.de


Diesen Beitrag melden
Nach oben
 Betreff des Beitrags: Re: WSUS Bereinigung bekommt TimeOut
Ungelesener BeitragVerfasst: Dienstag 28. Februar 2017, 06:45 
Benutzeravatar
Das ist ja schön und gut, aber wissen Sie wie lange ich da brauche um meinen Server wieder zur Bereinigung zu bewegen... bei mir sind es mehrere Tausend Updates die ich löschen muss.
Bisher geht es nur sehr langsam voran ich lösche ein Update mit dem Befehl und anschließend wir nur 1 oder 2 Updates mit der Bereinigung entfernt. Dann muss ich wieder den Löschbefehl ausführen.

Gibt es noch eine andere Möglichkeit?
Mit der Eingabe der IDs habe ich Angst mich zu vertippen und ein wichtiges Update zu löschen, dass ich noch brauche.
Habe schon versucht die Befehle für das Finden der IDs mit dem Löschbefehl zu verbinden, aber leider ohne Erfolg.


Diesen Beitrag melden
Nach oben
   
Ungelesener BeitragVerfasst: Dienstag 28. Februar 2017, 08:06 
Offline
Benutzeravatar

Registriert: Samstag 10. Dezember 2011, 17:19
Beiträge: 282
Guten Morgen,

ja da gibt es eine Möglichkeit.
In den meisten Fällen genügt es tatsächlich das oberste Update zu löschen, dann sollte die Bereinigung ein gutes Stück weiterkommen. Wenn es allerdings wie bei Ihnen immer und immer wieder hängt und kein Ende in Sicht schein, können Sie folgendes Skript als SQL-Abfrage ausführen:
Code:
USE SUSDB
DECLARE @var1 INT, @curitem INT, @totaltodelete INT
DECLARE @msg nvarchar(200)
CREATE TABLE #results (Col1 INT) INSERT INTO #results(Col1)
EXEC spGetObsoleteUpdatesToCleanup
SET @totaltodelete = (SELECT COUNT(*) FROM #results)
SELECT @curitem=1
DECLARE WC Cursor FOR SELECT Col1 FROM #results
OPEN WC
FETCH NEXT FROM WC INTO @var1 WHILE (@@FETCH_STATUS > -1)
BEGIN SET @msg = cast(@curitem as varchar(5)) + '/' + cast(@totaltodelete as varchar(5)) + ': Deleting ' + CONVERT(varchar(10), @var1) + ' ' + cast(getdate() as varchar(30))
RAISERROR(@msg,0,1) WITH NOWAIT
EXEC spDeleteUpdate @localUpdateID=@var1
SET @curitem = @curitem +1
FETCH NEXT FROM WC INTO @var1
END
CLOSE WC
DEALLOCATE WC
DROP TABLE #results
Das Skript könnte eine weile laufen... einfach laufen lassen. Die Aktualisierung der Anzeige erfolgt leider erst wenn das Skript durch ist.

Damit werden alle zu löschenden Updates mit einer Ausführung gelöscht. Das sollte also genau das sein, was Sie benötigen.

_________________
In diesem Sinne...

Ulrich Wiedholz
UW-Operator.de


Diesen Beitrag melden
Nach oben
 Betreff des Beitrags: Re: WSUS Bereinigung bekommt TimeOut
Ungelesener BeitragVerfasst: Donnerstag 2. März 2017, 08:40 
Offline
Benutzeravatar

Registriert: Samstag 10. Dezember 2011, 17:19
Beiträge: 282
Sollte es danach immer noch zu Problemen kommen, gibt es noch die Möglichkeit den TimeOut mit folgendem SQL-Script zu deaktivieren:
Code:
USE SUSDB ;  
GO  
EXEC sp_configure 'remote query timeout', 0 ;  
GO  
RECONFIGURE ;  
GO  
Nachzulesen hier: https://msdn.microsoft.com/en-us/library/ms189040.aspx

_________________
In diesem Sinne...

Ulrich Wiedholz
UW-Operator.de


Diesen Beitrag melden
Nach oben
Ungelesener BeitragVerfasst: Donnerstag 22. Februar 2018, 12:03 
Offline

Registriert: Mittwoch 21. Februar 2018, 20:15
Beiträge: 3
A round of applause for your post.Really thank you! Gadlin

_________________
Vernetta


Diesen Beitrag melden
Nach oben
 Betreff des Beitrags: Re: WSUS Bereinigung bekommt TimeOut
Ungelesener BeitragVerfasst: Mittwoch 16. Oktober 2019, 16:59 
Offline
Benutzeravatar

Registriert: Samstag 10. Dezember 2011, 17:19
Beiträge: 282
Wenn das Ding weiterhin auf TimeOut hängt, dann könnt ihr noch an der SUSDB in den Optionen prüfen ob der Compatibility Level auf SQL Server 2008 steht.
Nach dem hochsetzen (z.B. auf 2017) lief es bei mir ohne Probleme durch.

_________________
In diesem Sinne...

Ulrich Wiedholz
UW-Operator.de


Diesen Beitrag melden
Nach oben
 Betreff des Beitrags: Re: WSUS Bereinigung bekommt TimeOut
Ungelesener BeitragVerfasst: Dienstag 20. Oktober 2020, 14:15 
Offline
Benutzeravatar

Registriert: Samstag 10. Dezember 2011, 17:19
Beiträge: 282
Grade bekomme ich von einem Kollegen noch ein tolles Skript für das Problem:
Code:
USE SUSDB; 
GO 
SET NOCOUNT ON; 
 
-- Rebuild or reorganize indexes based on their fragmentation levels 
DECLARE @work_to_do TABLE ( 
    objectid int 
    , indexid int 
    , pagedensity float 
    , fragmentation float 
    , numrows int 
) 
 
DECLARE @objectid int; 
DECLARE @indexid int; 
DECLARE @schemaname nvarchar(130);  
DECLARE @objectname nvarchar(130);  
DECLARE @indexname nvarchar(130);  
DECLARE @numrows int 
DECLARE @density float; 
DECLARE @fragmentation float; 
DECLARE @command nvarchar(4000);  
DECLARE @fillfactorset bit 
DECLARE @numpages int 
 
-- Select indexes that need to be defragmented based on the following 
-- * Page density is low 
-- * External fragmentation is high in relation to index size 
PRINT 'Estimating fragmentation: Begin. ' + convert(nvarchar, getdate(), 121)  
INSERT @work_to_do 
SELECT 
    f.object_id 
    , index_id 
    , avg_page_space_used_in_percent 
    , avg_fragmentation_in_percent 
    , record_count 
FROM  
    sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, 'SAMPLED') AS f 
WHERE 
    (f.avg_page_space_used_in_percent < 85.0 and f.avg_page_space_used_in_percent/100.0 * page_count < page_count - 1) 
    or (f.page_count > 50 and f.avg_fragmentation_in_percent > 15.0) 
    or (f.page_count > 10 and f.avg_fragmentation_in_percent > 80.0) 
 
PRINT 'Number of indexes to rebuild: ' + cast(@@ROWCOUNT as nvarchar(20)) 
 
PRINT 'Estimating fragmentation: End. ' + convert(nvarchar, getdate(), 121) 
 
SELECT @numpages = sum(ps.used_page_count) 
FROM 
    @work_to_do AS fi 
    INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id 
    INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id 
 
-- Declare the cursor for the list of indexes to be processed. 
DECLARE curIndexes CURSOR FOR SELECT * FROM @work_to_do 
 
-- Open the cursor. 
OPEN curIndexes 
 
-- Loop through the indexes 
WHILE (1=1) 
BEGIN 
    FETCH NEXT FROM curIndexes 
    INTO @objectid, @indexid, @density, @fragmentation, @numrows; 
    IF @@FETCH_STATUS < 0 BREAK; 
 
    SELECT  
        @objectname = QUOTENAME(o.name) 
        , @schemaname = QUOTENAME(s.name) 
    FROM  
        sys.objects AS o 
        INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id 
    WHERE  
        o.object_id = @objectid; 
 
    SELECT  
        @indexname = QUOTENAME(name) 
        , @fillfactorset = CASE fill_factor WHEN 0 THEN 0 ELSE 1 END 
    FROM  
        sys.indexes 
    WHERE 
        object_id = @objectid AND index_id = @indexid; 
 
    IF ((@density BETWEEN 75.0 AND 85.0) AND @fillfactorset = 1) OR (@fragmentation < 30.0) 
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REORGANIZE'; 
    ELSE IF @numrows >= 5000 AND @fillfactorset = 0 
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD WITH (FILLFACTOR = 90)'; 
    ELSE 
        SET @command = N'ALTER INDEX ' + @indexname + N' ON ' + @schemaname + N'.' + @objectname + N' REBUILD'; 
    PRINT convert(nvarchar, getdate(), 121) + N' Executing: ' + @command; 
    EXEC (@command); 
    PRINT convert(nvarchar, getdate(), 121) + N' Done.'; 
END 
 
-- Close and deallocate the cursor. 
CLOSE curIndexes; 
DEALLOCATE curIndexes; 
 
 
IF EXISTS (SELECT * FROM @work_to_do) 
BEGIN 
    PRINT 'Estimated number of pages in fragmented indexes: ' + cast(@numpages as nvarchar(20)) 
    SELECT @numpages = @numpages - sum(ps.used_page_count) 
    FROM 
        @work_to_do AS fi 
        INNER JOIN sys.indexes AS i ON fi.objectid = i.object_id and fi.indexid = i.index_id 
        INNER JOIN sys.dm_db_partition_stats AS ps on i.object_id = ps.object_id and i.index_id = ps.index_id 
 
    PRINT 'Estimated number of pages freed: ' + cast(@numpages as nvarchar(20)) 
END 
GO 
 
 
--Update all statistics 
PRINT 'Updating all statistics.' + convert(nvarchar, getdate(), 121)  
EXEC sp_updatestats 
PRINT 'Done updating statistics.' + convert(nvarchar, getdate(), 121)  
GO 

_________________
In diesem Sinne...

Ulrich Wiedholz
UW-Operator.de


Diesen Beitrag melden
Nach oben
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst neue Themen in diesem Forum erstellen.
Du darfst Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  

© 2006-2020 Ulrich Wiedholz / UW-Operator.de
Disclaimer | Impressum | Datenschutz

Zusätzlich für das Forum:
Nutzungsbedingungen | Datenschutzerklärung

Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de