MSSQLSERVER_19407

Gilt für:SQL Server

Details

attribute Wert
Produktname SQL Server
Ereignis-ID 19407
Ereignisquelle MSSQLSERVER
Komponente SQLEngine
Symbolischer Name HADR_AG_LEASE_EXPIRED
Meldungstext Die Lease zwischen der Verfügbarkeitsgruppe '%.*ls' und dem Windows Server-Failovercluster ist abgelaufen. Zwischen der Instanz von SQL Server und dem Windows Server-Failovercluster ist ein Konnektivitätsproblem aufgetreten. Überprüfen Sie die entsprechende Verfügbarkeitsgruppenressource im Windows Server-Failovercluster, um festzustellen, ob das Failover für die Verfügbarkeitsgruppe ordnungsgemäß ausgeführt wird.

Erklärung

Fehler 19407 wird im SQL Server Fehlerprotokoll ausgelöst, wenn die Kommunikation zwischen SQL Server und dem Windows Server-Failovercluster unterbrochen wird. In der Regel erfolgt eine Korrekturmaßnahme– ein Failover zu einem anderen Always On Knoten.

Eine Lease ist ein zeitbasierter Kommunikationsmechanismus, der zwischen dem SQL Server und dem WSFC-Prozess (Windows Server Failover Cluster) stattfindet, insbesondere dem RHS.EXE Prozess. Die beiden Prozesse kommunizieren regelmäßig miteinander, um sicherzustellen, dass der andere Prozess ausgeführt wird und reagiert. Diese Kommunikation erfolgt mithilfe von Windows-Ereignisobjekten und stellt sicher, dass ein Failover der Verfügbarkeitsgruppenressource nicht ohne wissen des WSFC erfolgt. Wenn einer der Prozesse nicht auf die Leasekommunikation basierend auf einem vordefinierten Leasezeitraum reagiert, tritt ein Leasetimeout auf. Ausführliche Informationen finden Sie unter Lease-Mechanismus. Weitere Informationen finden Sie auch unter Funktionsweise: SQL Server Timeout für AlwaysOn-Lease

Ursachen

Da Windows-Ereignisse leichte Synchronisierungsobjekte sind, gibt es relativ wenige externe Faktoren, die sich negativ auf sie auswirken. Typische Probleme, die zu einem Leasetimeout führen können, sind systemweite Probleme. Im Folgenden finden Sie eine Liste der Möglichkeiten, die zum Ablauf des Leases und zu einem Neustart oder Failover führen können:

  • Hohe CPU-Auslastung auf dem System (fast 100 %)
  • Unzureichende Arbeitsspeicherbedingungen: Geringer virtueller Arbeitsspeicher und/oder einer der Prozesse wird ausgelagert.
  • SQL Server Prozess beim Generieren eines großen Speicherabbilds nicht reagiert
  • WSFC wird offline (z. B. aufgrund eines Quorumverlusts)

Benutzeraktion

Behandeln von Problemen mit hoher CPU-Auslastung

  1. Öffnen des Task-Managers
  2. Wechseln Sie zur Registerkarte Leistung, und überprüfen Sie, ob CPUs nahe oder bei einer Auslastung von 100 % liegen.
  3. Navigieren Sie zur Registerkarte Prozesse, und sortieren Sie Prozesse nach der CPU-Spalte in absteigender Reihenfolge, indem Sie auf die Spalte CPU klicken.
  4. Identifizieren Sie den Prozess, der die meiste CPU verwendet, und arbeiten Sie daran, den Grund dafür zu verstehen und zu beheben, warum er die hohe CPU-Auslastung verursacht.
  5. Wenn der Prozess SQL Server ist, finden Sie weitere Informationen unter Behandeln von Problemen mit hoher CPU-Auslastung in SQL Server
  6. Sie können dieses PowerShell-Skript verwenden, um die CPU-Auslastung auf dem System zu überprüfen.
Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 5 -MaxSamples 30 |
  Select-Object -ExpandProperty CounterSamples | Select-Object TimeStamp, Path, CookedValue

Behandeln von Problemen im Zusammenhang mit wenig Arbeitsspeicher

Wenn auf dem System wenig virtueller oder physischer Arbeitsspeicher vorhanden ist, kann der SQL Server oder der Clusterressourcenhostdienstprozess (RHS.EXE) ausgelagert werden. Wenn der Prozess auf den Datenträger ausgelagert wird, wird er nicht aktiv ausgeführt, und das Leasetimeout wird möglicherweise erreicht, wenn der Arbeitsspeicher verfügbar ist und die virtuellen Prozessbytes wieder in den physischen Arbeitsspeicher ausgelagert werden. Ein geringer virtueller Arbeitsspeicher kann durch Anwendungen, Treiber oder das Betriebssystem verursacht werden, die den gesamten Arbeitsspeicher des Systems verbrauchen. Verwenden Sie die folgenden Methoden, um dieses Problem zu beheben:

  1. Überprüfen Sie das Anwendungs- oder Systemereignisprotokoll auf Fehler wie "Ihr System hat wenig virtuellen Arbeitsspeicher". Möglicherweise wird dieser Fehler sogar auf dem Bildschirm angezeigt, wenn Sie beim Server angemeldet sind.

  2. Öffnen Sie den Task-Manager, und wählen Sie Leistung –> Arbeitsspeicher aus, um zu überprüfen, ob fast 100 % des Arbeitsspeichers verbraucht werden. Verwenden Sie die Registerkarte Details, um alle Anwendungen zu identifizieren, die möglicherweise die größten Speicherverbraucher sind.

  3. Alternativ können Sie Leistungsmonitor verwenden und diese Leistungsindikatoren im Laufe der Zeit überwachen:

    • Process\Working Set : Zur Überprüfung der Arbeitsspeicherauslastung einzelner Prozesse
    • Arbeitsspeicher\Verfügbare MBytes : Zur Überprüfung der gesamten Arbeitsspeicherauslastung auf dem System

    Sie können das folgende PowerShell-Skript verwenden, um die Gesamtspeicherauslastung für alle Prozesse und den verfügbaren Arbeitsspeicher im System zu identifizieren. Wenn Sie die Arbeitsspeicherauslastung einzelner Prozesse abrufen möchten, ändern Sie sie "\Process(_Total)\Working Set" in "\Process(*)\Working Set".

    $serverName = $env:COMPUTERNAME
    $Counters = @(
      ("\\$serverName" + "\Process(_Total)\Working Set") , ("\\$serverName" + "\Memory\Available Bytes")
     )
    
    Get-Counter -Counter $Counters -MaxSamples 30 | ForEach {
     $_.CounterSamples | ForEach {
         [pscustomobject]@{
             TimeStamp = $_.TimeStamp
             Path = $_.Path
             Value_MB = ([Math]::Round($_.CookedValue, 3))/1024/1024
         }
         Start-Sleep -s 5
       }
     }
    
  4. Wenn Sie bestimmte Anwendungen identifizieren, die große Mengen an Arbeitsspeicher verbrauchen, sollten Sie diese Anwendungen beenden oder auf einem anderen System verschieben oder deren Speicherauslastung steuern.

  5. Wenn SQL Server große Mengen an Arbeitsspeicher verbraucht, können Sie die Verwendung sp_configure 'max server memory' von verwenden, um die Arbeitsspeicherauslastung zu verringern.

Reduzieren oder Vermeiden großer Speicherabbilder des SQL Server- oder Clusterprozesses

In einigen Fällen kann SQL Server Prozess auf Ausnahmen, Asserts, Scheduler-Probleme usw. stoßen. In diesen Fällen löst SQL Server standardmäßig den SQLDumper.exe Prozess aus, um einen Minidump mit indirektem Arbeitsspeicher zu generieren. Wenn diese Speicherabbildgenerierung jedoch lange dauert, reagiert der SQL Server Prozess nicht mehr, was ein Leasetimeout auslösen kann. Häufige Ursachen für eine lange Speicherabbilderstellung sind eine große Speicherauslastung durch den Prozess, das E/A-Subsystem, in das das Speicherabbild geschrieben wird, langsam ist oder die Standardeinstellung von Miniabbild zu einem gefilterten oder vollständigen Speicherabbild geändert wurde. Führen Sie die folgenden Schritte auf Ag-Systemen aus, um ein Leasetimeout zu vermeiden:

  • Erhöhen des Sitzungstimeouts, z. B. 120 Sekunden für alle Replikate
  • Ändern des automatischen Failovers aller Replikate in manuelles Failover
  • Erhöhen Sie leaseTimeout auf 60.000 ms (60 Sekunden), und ändern Sie HealthCheckTimeout auf 90.000 ms (90 Sekunden)

Weitere Informationen finden Sie unter Auswirkungen der Speicherabbildgenerierung und Verwalten der Auswirkungen der Speicherabbildgenerierung auf gruppierte Systeme.

Überprüfen der VM-Konfiguration auf Überbereitstellung

Wenn Sie einen virtuellen Computer verwenden, stellen Sie sicher, dass Sie cpUs und Arbeitsspeicherressourcen nicht über- oder überlasten. Die Überbereitstellung von CPUs oder Arbeitsspeicher kann dazu führen, dass dem Gastbetriebssystem die Ressourcen ausgehen und die zuvor beschriebenen Probleme auftreten : hohe CPU-Auslastung und geringer Arbeitsspeicher. Wenn Sie Dinge innerhalb des Gastbetriebssystems anzeigen, können Sie häufig nur schwer erklären, warum ihnen die Computerressourcen ausgehen, da dinge außerhalb des virtuellen Computers selbst passieren. Eine Überlastung von Ressourcen kann zu vorübergehenden Verarbeitungsstopps führen, die wahrscheinlich zu Leasetimeouts führen. Weitere Informationen zum Beheben von Überlastung finden Sie unter Behandeln von Leistungsproblemen bei virtuellen ESX-/ESXi-Computern (2001003) und Virtualisierung – Überlastung des Arbeitsspeichers sowie unter Erkennen des Speichers innerhalb des virtuellen Computers.

Überprüfen auf VM-Migration oder -Sicherung

Hyper-V, VMware und andere VM-Lösungen bieten die Möglichkeit, VMs zwischen Hostcomputern zu verschieben (Hyper-V-Livemigration und VMware Vmotion). In den meisten Fällen ermöglichten diese Technologien eine fast sofortige Migration. Wenn es jedoch zu Netzwerk- oder Hostcomputerengpässen kommt, können diese Migrationen verlängert werden und führen dazu, dass sich der virtuelle Computer in einem angehaltenen, nicht betriebsbereiten Zustand befindet. Dies kann zum Ablauf des Leasetimeouts zwischen SQL Server und den Clusterprozessen führen. Beheben Sie zunächst Alle Probleme mit der VM-Migration, bevor Sie Probleme mit dem Leasetimeout beheben.

Sicherungslösungen für virtuelle Computer können auch zu Ausfallzeiten für VMs führen. Wenn eine VM-Sicherung auf dem Hostbetriebssystem durchgeführt wird oder eine ähnliche Wartung auf dem Hostcomputer durchgeführt wird und diese sehr lange dauern, kann dies zu einem Leasetimeoutproblem führen. Der Grund dafür ist, dass während die Uhr tickt, die SQL Server- und Clusterprozesse auf der angehaltenen VM nicht miteinander kommunizieren können. Beheben Sie zuerst alle Verzögerungen, die durch VM-Sicherungen oder andere Wartungen verursacht werden können, bevor Sie Probleme mit dem Leasetimeout untersuchen.