Warum dauert das Anzeigen von Protokollen auf einem Server so lange?


7

Ich versuche nur, ausführlichere Informationen für eine fehlgeschlagene Wartungsplanaufgabe nachzuschlagen. Ich öffne den Viewer für Protokolldateien und aktiviere das Kontrollkästchen, um die Protokolle für meinen Wartungsplan anzuzeigen. Außerdem gibt es in diesem Beispiel keine aktiven Filter. Dann spiele ich das Wartespiel .....

Ich hatte fast 20 Minuten gebraucht, um die Protokolle anzuzeigen. Daher dachte ich, dass das Laden aller Protokolle ab dem Beginn dieser Serverzeit möglicherweise nur einige Zeit in Anspruch nimmt. Ich habe den Filter auf ca. 3 Tage reduziert, da das sowieso alles ist, was ich brauchte. Das ging schneller, aber es dauerte immer noch 4 Minuten, um es zu zeigen. Beachten Sie, dass ich zum ersten Mal auf meinem Computer versucht habe, diese Protokolle anzuzeigen, damit dies möglicherweise auch eine Rolle spielt. Ich habe auch versucht, die Protokolle direkt auf dem Server zu überprüfen, aber ähnliche Zeitergebnisse erhalten.

Ist das Par für den Kurs? Sollte ich damit rechnen, dass das Anzeigen der Protokolle eine solche Erfahrung ist? Gibt es etwas, das ich tun oder überprüfen sollte? Ich habe vor, das Protokollalter zu überprüfen und festzustellen, ob es gelöscht werden kann. Würde sich dies jedoch weiterhin auf das Anzeigen von Protokollen für einen kurzen Zeitraum von X Tagen auswirken?


@MarmiK DBCC LOGINFOwird zum Anzeigen von VLFs im Transaktionsprotokoll verwendet, mit denen Sie es möglicherweise verwechseln xp_readerrorlog. Es ist nicht so, dass Microsoft diese Dinge logisch macht, ich weiß.
Nic

@Nic wie Brent die Antwort bereits gegeben hat, daher habe ich meinen Kommentar entfernt, aber um das zu unterstützen, was AMTwo gesagt hat, können wir einen Job konfigurieren, der Protokolle abschneidet.
MarmiK

Antworten:


8

Ja, das Lesen von Protokollen im Protokolldatei-Viewer dauert lange. Ein paar Dinge, um das Problem zu beheben:

Versuchen Sie, xp_readerrorlog mit gefilterten Parametern zu verwenden, um genau die gewünschten Daten zu erhalten:

  • @ p1 ist die Protokolldatei, die Sie anzeigen möchten (0 ist aktuell, 1 ist das erste Archiv, 2 ist das zweite usw.)
  • @ p2 ist null für das Fehlerprotokoll, 2 für Agent
  • @ p3 und @ p4 sind Zeichenfolgen, nach denen in der Ausgabe gesucht werden muss

Auf diese Weise erhalten Sie nur die gewünschten Zeilen.

Wenn Sie so etwas häufig tun, führen Sie einen Job aus, um das Fehlerprotokoll regelmäßig (ich mag wöchentlich) zu durchlaufen, damit Sie nicht so viel durchsehen müssen. Stellen Sie außerdem sicher, dass Sie keine erfolgreichen Sicherungen oder erfolgreichen Anmeldungen im Fehlerprotokoll protokollieren.


Stellen Sie außerdem sicher, dass Sie keine erfolgreichen Sicherungen oder erfolgreichen Anmeldungen im Fehlerprotokoll protokollieren. Ich habe eine Umgebung geerbt, in der dies gerade durchgeführt wird. Ich denke, das liegt daran, dass alle Jobs E-Mails versenden, die der letzte Administrator jeden Morgen gern gesehen hat. Ich habe ein gutes Gefühl, die Geschichte zu sehen. Ich kann davon ausgehen, dass nichts Protokolliertes gut ist. Im Allgemeinen fügt dies den Protokollen viel Rauschen hinzu, ja?
Matt

6

Standardmäßig setzt SQL Server das Fehlerprotokoll nur beim Neustart der Instanz fort. Wenn Sie eine hervorragende Server-Betriebszeit haben (möglicherweise patchen und starten Sie nur einige Male pro Jahr neu), kann das Fehlerprotokoll ziemlich umfangreich werden (ich habe gesehen, dass es in bestimmten Situationen viele GB erreicht).

Das Fehlerprotokoll wird als Textdatei gespeichert. Das Öffnen im Protokoll-Viewer erfordert daher im Wesentlichen, dass SQL Server die gesamte Textdatei öffnet und analysiert. Wenn Sie jemals eine 10-GB-Textdatei geöffnet haben, wissen Sie, dass dies langsam sein kann.

Normalerweise habe ich einen Job, der einmal pro Woche über das SQL Server-Fehlerprotokoll rollt, sodass das Protokoll so klein bleibt, dass es schnell geöffnet werden kann - und weit genug zurückreicht, dass eine einzelne Datei das enthält, was ich benötige.

Führen Sie zum Speichern Ihres Protokolls einfach diese gespeicherte Prozedur aus (und planen Sie einen Agentenjob, der wöchentlich ausgeführt wird:

EXEC sp_cycle_errorlog;

Die alten archivierten Protokolle werden weiterhin im Objekt-Explorer angezeigt: ObjectExplorerLogs

Im Log Viewer können Sie mehrere Protokolle anzeigen: Eintrags Ansicht

Möglicherweise möchten Sie auch die Anzahl der Archivprotokolldateien begrenzen, die Sie auf Ihrem Server speichern. Klicken Sie dazu im Objekt-Explorer mit der rechten Maustaste auf den Ordner "SQL Server-Protokolle" und wählen Sie "Konfigurieren". Aktivieren Sie dann das Kontrollkästchen und legen Sie eine maximale Anzahl von Protokolldateien fest. Protokollaufbewahrung

Sie sollten sich im Allgemeinen irren, wenn Sie dies höher einstellen, als Sie denken, dass Sie es brauchen. Wenn Sie jemals ein Problem haben, bei dem der Server plötzlich mehrmals neu gestartet wird oder der SQL Server-Dienst wiederholt wiederverwendet wird, wird das Fehlerprotokoll bei jedem Neustart erneut angezeigt, und Ihre Protokolle werden nicht so viele Wochen zurückgehen, wie Sie möchten.

Sie können die Protokollaufbewahrung auch über festlegen xp_instance_regwrite. Im folgenden Beispiel wird dieser Wert so eingestellt, dass 10 Fehlerprotokolle beibehalten werden:

USE [master]
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', 
    N'Software\Microsoft\MSSQLServer\MSSQLServer', 
    N'NumErrorLogs', 
    REG_DWORD, 
    10
GO

2

Sie sollten auf jeden Fall Ihr SQL-Fehlerprotokoll und die SQL Agent-Fehlerprotokolle wie im obigen Kommentar @AMtwo vorgeschlagen rollen.

Da die Frage das Lesen des Wartungsplanprotokolls betraf, werde ich erklären, wie Sie die Größe überschaubar und schnell geöffnet halten können.

Für die Wartungsplanprotokollierung möchten Sie bei jeder Ausführung des Wartungsplans eine neue Datei erstellen.

Geben Sie hier die Bildbeschreibung ein

Klicken Sie auf dieses Symbol und Sie erhalten das folgende Fenster. "Neue Datei erstellen" sollte die Standardeinstellung sein und dies bestätigen. Aktivieren Sie nicht "An Datei anhängen", da dadurch eine einzige Datei für die gesamte Ausführung erstellt wird.

Geben Sie hier die Bildbeschreibung ein

Sie können eine andere Wartungsaufgabe ausführen, um Protokolldateien zu bereinigen, die älter als xx Tage sind, um ein Auffüllen der Festplatte zu vermeiden.


2

Wartungspläne generieren ihre eigenen Protokolldateien, wenn Sie diese Option auswählen. Beim Betrachten des MP-Verlaufs wird aus [msdb]. [Dbo]. [Sysmaintplan_log] und [msdb]. [Dbo]. [Sysmaintplan_logdetail] gelesen, nicht aus diesen Textdateien. Löschen Sie dies mit einer Aufgabe zur Verlaufsbereinigung, da dadurch die Tabellen und Dateien bereinigt werden.

SQL Server ERRORLog und Agentlog sollten ordnungsgemäß verwaltet werden, MP ist jedoch eine separate Konversation / Anstrengung

In der großen MS-Tradition ... keine Indizes für diese Tabellen, außer Clustered auf [msdb]. [Dbo]. [Sysmaintplan_log]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.