Partager via


MSSQLSERVER_19407

S'applique à : SQL Server

Détails

Attribut Valeur
Nom du produit SQL Server
ID de l’événement 19 407
Source de l’événement MSSQLSERVER
Composant SQLEngine
Nom symbolique HADR_AG_LEASE_EXPIRED
Texte du message Le bail entre le groupe de disponibilité '%.*ls' et le cluster de basculement Windows Server a expiré. Un problème de connectivité s'est produit entre l'instance de SQL Server et le cluster de basculement de Windows Server. Pour déterminer si le groupe de disponibilité bascule correctement, vérifiez la ressource correspondante du groupe de disponibilité dans le cluster de basculement de Windows Server.

Explication

L'erreur 19407 est signalée dans le journal des erreurs de SQL Server lorsque la communication entre SQL Server et le cluster de basculement de Windows Server est perdue. Généralement, l'une des solutions consiste à basculer vers un autre nœud Always On.

Un bail est un mécanisme de communication basé sur le temps qui a lieu entre le serveur SQL et le processus Windows Server Failover Cluster (WSFC), en particulier le processus RHS.EXE. Les deux processus communiquent périodiquement pour s'assurer que l'autre processus est en cours d'exécution et qu'il répond. Cette communication a lieu à l’aide d’objets d’événements Windows et garantit qu’un basculement de la ressource de groupe de disponibilité ne se produit pas sans connaître le cluster WSFC. Si l'un des processus ne répond pas à la communication de bail sur la base d'une période de bail prédéfinie, un dépassement de bail se produit. Pour plus d’informations, consultez Mécanismes et instructions sur le bail, le cluster et les délais d’expiration du contrôle d’intégrité pour les groupes de disponibilité Always On. Découvrez également comment fonctionne le délai d’expiration du bail SQL Server AlwaysOn

Causes

Étant donné que les événements Windows sont des objets de synchronisation légère, il existe relativement peu de facteurs externes qui les affectent négativement. Les problèmes typiques qui peuvent entraîner un délai d’expiration du bail impliquent des problèmes à l’échelle du système. Voici une liste de possibilités qui peuvent entraîner l’expiration du bail et provoquer un redémarrage ou un basculement :

  • Utilisation élevée du processeur sur le système (près de 100 %).

  • Conditions de mémoire insuffisante : mémoire virtuelle insuffisante et/ou l’un des processus est mis en page.

  • WSFC en mode hors connexion en raison d’une perte de quorum. Pour résoudre les problèmes de perte de quorum, consultez Configurer et gérer le quorum, ainsi que la récupération d’urgence WSFC par le biais du quorum forcé (SQL Server).

  • Limitation des machines virtuelles affectant les performances et provoquant l’expiration du bail.

  • Le processus SQL Server ne répond pas lors de la génération d’un vidage de mémoire volumineux. Pour plus d’informations sur la génération de vidage de pile, consultez Impact de la génération de vidage. La génération de vidage de pile peut se produire pour certaines des raisons suivantes :

    • Planificateur de non-ielding
    • Délai d’expiration du verrou
    • Planificateur bloqué
    • Interblocage non résolu

Action utilisateur

Résoudre les problèmes élevés liés au processeur

  1. Ouvrez le Gestionnaire de tâches.

  2. Accédez à l’onglet Performances et vérifiez si les processeurs sont proches ou à 100 % d’utilisation.

  3. Accédez à l’onglet Processus et triez les processus par la colonne UC dans l’ordre décroissant, en sélectionnant sur la colonne UC .

  4. Identifiez le processus qui utilise la plupart du processeur et travaillez sur la compréhension et la résolution de la raison pour laquelle il provoque le processeur élevé.

  5. Si le processus est SQL Server, consultez Résoudre les problèmes d’utilisation élevée du processeur dans SQL Server.

  6. Vous pouvez utiliser le script PowerShell suivant pour vérifier l’utilisation du processeur sur le système.

    Get-Counter -Counter "\Processor(_Total)\% Processor Time" -SampleInterval 5 -MaxSamples 30 |
        Select-Object -ExpandProperty CounterSamples | Select-Object TimeStamp, Path, CookedValue
    

Résoudre les problèmes de mémoire insuffisante

S’il existe des occurrences de mémoire virtuelle ou physique faible sur le système, le processus SQL Server ou le service hôte de ressources de cluster (RHS.exe) peut être paginé. Si le processus est paginé sur le disque, il ne s’exécute pas activement et le délai d’expiration du bail peut être atteint par la mémoire de temps disponible et les octets virtuels du processus sont paginés en mémoire physique. Une mémoire virtuelle faible peut être causée par les applications, les pilotes ou le système d’exploitation qui consomment toute la mémoire sur le système. Utilisez les méthodes suivantes pour résoudre ce problème :

  1. Vérifiez que le journal des événements d’application ou système pour connaître les erreurs telles que Your system is low on virtual memory. Vous pouvez même voir cette erreur affichée à l’écran si vous êtes connecté au serveur.

  2. Ouvrez le Gestionnaire de tâches, sélectionnez Performances -> Mémoire pour vérifier si près de 100 % de la mémoire est consommée. Utilisez l’onglet Détails pour identifier les applications qui peuvent être les plus volumineuses consommateurs de mémoire.

  3. Vous pouvez également utiliser Analyseur de performances et surveiller ces compteurs au fil du temps :

    • Processus\Ensemble de travail - pour vérifier l’utilisation de la mémoire des processus individuels
    • Mémoire\Octets disponibles : pour vérifier l’utilisation globale de la mémoire sur le système

    Vous pouvez utiliser le script PowerShell suivant pour identifier l’utilisation globale de la mémoire dans tous les processus et la mémoire disponible sur le système. Si vous souhaitez obtenir l’utilisation de la mémoire des processus individuels, remplacez-la "\Process(_Total)\Working Set" par "\Process(*)\Working Set".

    $serverName = $env:COMPUTERNAME
    $Counters = @(
      ("\\$serverName" + "\Process(_Total)\Working Set") , ("\\$serverName" + "\Memory\Available Bytes")
    )
    
    Get-Counter -Counter $Counters -MaxSamples 30 | ForEach-Object {
        $_.CounterSamples | ForEach-Object {
            [pscustomobject]@{
                TimeStamp = $_.TimeStamp
                Path      = $_.Path
                Value_MB  = ([Math]::Round($_.CookedValue, 3)) / 1024 / 1024
            }
            Start-Sleep -s 5
        }
    }
    
  4. Si vous identifiez des applications spécifiques qui consomment de grandes quantités de mémoire, envisagez d’arrêter ou de déplacer ces applications sur un autre système ou de contrôler leur utilisation de la mémoire.

  5. Si SQL Server consomme de grandes quantités de mémoire, vous pouvez envisager d’utiliser sp_configure 'max server memory' pour réduire son utilisation de la mémoire.

Analyseur de performances collecte de données pour le processeur, la mémoire et le disque

Ce script PowerShell facilite la collecte des données de l’analyseur de performances (PerfMon) en ce qui concerne le processeur, la mémoire et le disque. Le script est conçu pour être flexible, ce qui permet de personnaliser les instances par défaut et nommées de SQL Server.

#Replace with your instance name if need to collect PerfMon data for named instance
$InstanceName = 'MSSQLSERVER'

# Replace with your desired location
$Location = "D:\PerfMonLogs"

# Function to create performance counter log
function Create-PerfCounterLog {
    param
    (
        [string]$InstanceName,
        [string]$Location
    )
    $counters = @(
        '\Memory\*',
        '\PhysicalDisk(*)\*',
        '\LogicalDisk(*)\*',
        '\Server\*',
        '\System\*',
        '\Process(*)\*',
        '\Processor(*)\*',
        '\SQLServer:Databases(*)\*',
        '"\SQLServer:Buffer Manager\*"',
        '"\SQLServer:SQL Statistics\*"',
        '"\SQLServer:Transactions\*"',
        '"\SQLServer:Database Mirroring\*"',
        '"\SQLServer:Latches\*"',
        '"\SQLServer:General Statistics\*"',
        '"\SQLServer:Availability Replica(*)\*"',
        '"\SQLServer:Plan Cache(*)\*"'
    )
    if ($InstanceName -eq 'MSSQLSERVER') {
        # This is for the default SQL Server instance
        $logmanCommand = "logman create counter MS_perf_log -f bin -c $counters"

    }
    else {
        # This is for a named SQL Server instance
        $InstanceName = "MSSQL`$$InstanceName"
        $counters = $counters -replace 'SQLServer', $InstanceName
        $logmanCommand = "logman create counter MS_perf_log -f bin -c $counters"

    }

    $Location = $Location + '\MS_perf_log.blg'
    $logmanCommand += " -si 00:00:01 -max 500 -o $Location"

    Start-Process -FilePath "cmd.exe" -ArgumentList "/c $logmanCommand" -Verb RunAs -Wait

}

# Function to start the collector
function Start-PerfCounterLog {
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c logman start MS_perf_log" -Verb RunAs -Wait
}

# Function to stop and delete the collector
function Stop-Delete-PerfCounterLog {
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c logman stop MS_perf_log" -Verb RunAs -Wait
    Start-Process -FilePath "cmd.exe" -ArgumentList "/c logman delete MS_perf_log" -Verb RunAs -Wait
}

# Create folder if not exists - update the file path as per your environment
$folderPath = $Location
if (-not (Test-Path $folderPath)) {
    New-Item -Path $folderPath -ItemType Directory
}

# Create performance counter log
Create-PerfCounterLog -InstanceName $InstanceName -Location $Location

# Start the collector
Start-PerfCounterLog

# If the event has occurred again and captured, then stop the collector
# Uncomment below line when you want to stop and delete the collector
# Stop-Delete-PerfCounterLog

Réduire ou éviter les vidages de mémoire volumineux du processus SQL Server ou de cluster

Dans certains cas, le processus SQL Server peut rencontrer des exceptions, des assertions, des problèmes de planificateur, et ainsi de suite. Dans ce cas, SQL Server déclenche le SQLDumper.exe processus par défaut pour générer un minidump avec une mémoire indirecte. Toutefois, si cette génération de vidage prend beaucoup de temps, le processus SQL Server cesse de répondre, ce qui peut déclencher un délai d’expiration du bail. Les causes courantes d’un vidage de mémoire prennent beaucoup de temps :

  • utilisation importante de la mémoire par le processus
  • sous-système d’E/S où le vidage est écrit est lent
  • le paramètre par défaut a été remplacé par le mini-vidage par un vidage filtré ou complet

Pour éviter un délai d’expiration du bail, procédez comme suit sur les systèmes de groupe de disponibilité :

  • Augmenter le délai d’expiration de session, par exemple, 120 secondes pour tous les réplicas
  • Modifier le basculement automatique de tous les réplicas en basculement manuel
  • Augmentez le leaseTimeout à 60 000 ms (60 secondes) et remplacez HealthCheckTimeout par 90 000 ms (90 secondes)

Pour plus d’informations, consultez Utiliser l’outil Sqldumper.exe pour générer un fichier de vidage dans SQL Server.

Vérifier la configuration de la machine virtuelle pour le surprovisionnement

Si vous utilisez une machine virtuelle, veillez à ne pas surprovisionner ou à surutiliser les processeurs et ressources mémoire. Le surprovisionnement des processeurs ou de la mémoire peut entraîner l’épuisement des ressources du système d’exploitation invité et afficher les mêmes problèmes décrits précédemment : processeur élevé et mémoire faible. Souvent, si vous visualisez des éléments à l’intérieur du système d’exploitation invité, expliquant pourquoi vous manquez de ressources informatiques est difficile, car les choses se produisent en dehors de la machine virtuelle elle-même. La surcommitation des ressources peut entraîner des interruptions temporaires du traitement, ce qui est susceptible d’entraîner des délais d’expiration du bail. Pour plus d’informations sur la façon de résoudre les problèmes de surcommitting, consultez Résolution des problèmes de performances des machines virtuelles ESX/ESXi (2001003) et virtualisation : surcommitting de la mémoire et comment la détecter dans la machine virtuelle.

Rechercher la migration ou la sauvegarde de machine virtuelle

Hyper-V, VMware et d’autres solutions de machine virtuelle offrent la possibilité de déplacer des machines virtuelles entre des machines hôtes (Migration dynamique Hyper-V et VMware vMotion). Dans la plupart des cas, ces technologies fournissent une migration presque instantanée. Toutefois, s’il existe des goulots d’étranglement de machine réseau ou hôte, ces migrations peuvent être prolongées, ce qui entraîne l’interruption de la machine virtuelle dans un état non opérationnel suspendu. Cela peut entraîner l’expiration du délai d’expiration du bail entre SQL Server et les processus de cluster. Résolvez les problèmes liés à la migration de machine virtuelle avant de résoudre les problèmes de délai d’expiration du bail.

Les solutions de sauvegarde de machines virtuelles peuvent également entraîner un temps d’arrêt pour les machines virtuelles. Si une sauvegarde de machine virtuelle est effectuée au niveau du système d’exploitation hôte ou si une maintenance similaire est effectuée sur l’ordinateur hôte qui prend beaucoup de temps, elle peut entraîner un problème de délai d’expiration de bail. La raison est que pendant que l’horloge est en cours de graduation, les processus SQL Server et de cluster ne sont pas en mesure de communiquer entre eux sur la machine virtuelle suspendue. Résolvez les retards causés par les sauvegardes de machine virtuelle ou d’autres maintenances avant d’examiner les problèmes de délai d’expiration du bail.