Certains agents SQL Server réplication ne peuvent pas s’exécuter lorsque vous configurez de nombreux agents de réplication pour qu’ils s’exécutent sur un serveur

Cet article vous aide à contourner le problème où certains agents de réplication ne peuvent pas s’exécuter lorsque vous configurez de nombreux agents de réplication SQL Server pour qu’ils s’exécutent sur un serveur.

Version du produit d’origine :   SQL Server 2014, SQL Server 2012
Numéro de la ko d’origine :   949296

Symptômes

Prenons l’exemple du scénario suivant :

  • Vous configurez de nombreux Microsoft SQL Server agents de réplication 2014 SQL Server 2012 pour qu’ils s’exécutent sur un serveur. Par exemple, vous configurez plus de 200 agents de réplication pour qu’ils s’exécutent sur un serveur.

Dans ce scénario, certains agents de réplication ne peuvent pas s’exécuter. En outre, le message d’erreur suivant est consigné dans le journal système :

Erreur d’application : l’application n’a pas réussi à s’initialiser correctement (0xc0000142).
Cliquez sur OK pour terminer l’application.

Cause

Ce problème se produit parce que le tas de bureau est utilisé.

Solution de contournement

Pour contourner ce problème, utilisez l’une des méthodes suivantes :

Utiliser des comptes distincts pour les agents de réplication créés pour différentes bases de données

Vous pouvez le spécifier lors de la création d’agents de réplication. Vous devez vous assurer que tous les points tactiles des autorisations sont pris en charge. La procédure de modification des paramètres de sécurité pour les agents de réplication déjà créés se trouve dans l’affichage et la modification des paramètres de sécurité de réplication.

Utiliser les paramètres de Registre pour augmenter la taille du tas de bureau

Vous pouvez modifier les entrées de Registre suivantes :

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize (par exemple, augmentez la valeur de 48 à 64).

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows (par exemple, augmentez la troisième valeur SharedSection de 256 kilo-octets)

Vous devez appliquer les modifications sur les deux nodes. Vous devez enregistrer les clés de Registre avant la modification et redémarrer le serveur après avoir appliqué la modification.

Modifier les agents de réplication de l’exécution continue à l’exécution sur une base programmée

Cela permet de s’assurer que les agents de réplication s’exécutent uniquement lorsque cela est nécessaire et qu’ils ne restent pas inactifs en permanence (car cela fait perdre des ressources).

Des instructions sur la modification de la planification de l’agent de réplication sont disponibles dans Spécifier les planifications de synchronisation.

Modifier l’emplacement du serveur sur lequel les agents de réplication sont en cours d’exécution

Vous pouvez évaluer les paires éditeur-abonné et voir si vous pouvez modifier certains abonnés pour effectuer un pull qui exécutera l’agent de distribution/fusion sur l’abonné plutôt que sur l’éditeur. Cela permet de réduire le nombre d’agents simultanés qui doivent s’exécuter sur le serveur.

Statut

Ce comportement est inhérent au produit.

Comment examiner l’utilisation du tas de bureau

Chaque compte qui démarre le service agent SQL Server correspond à un tas de bureau non actif. En outre, tous les agents de réplication gérés par le service agent SQL Server partagent le tas de bureau du compte.

Vous pouvez utiliser l’outil Moniteur de tas de bureau pour examiner l’utilisation du tas de bureau. Ensuite, vous pouvez décider si vous devez augmenter ou réduire la taille du tas de bureau noninteractive. En règle générale, vous devez augmenter la taille.

Important

L’outil Moniteur de tas de bureau ne fonctionne pas dans Windows Server 2008 ou une version ultérieure de Windows. Si vous utilisez l’une de ces versions de Windows, vous pouvez utiliser LiveKD pour obtenir des valeurs de tas de bureau. Pour plus d’informations sur la façon de le faire, allez à la section suivante.

Pour utiliser l’outil Moniteur de tas de bureau pour examiner l’utilisation du tas de bureau, suivez les étapes suivantes :

  1. Téléchargez l’outil Moniteur de tas de bureau.

  2. Installez l’outil Moniteur de tas de bureau. Pour cela, procédez comme suit :

    1. Double-cliquez sur le package pour extraire les fichiers.

    2. Cliquez sur Démarrer, cliquez sur Exécuter, tapez cmd, puis cliquez sur OK.

    3. Depuis l'invite de commandes, exécutez la commande suivante :

      CD ExtractFolder\kktools\dheapmon8.1\Platform
      

      Notes

      ExtractFolder est un espace réservé pour le dossier dans lequel vous extrayez les fichiers. La plateforme est un espace réservé pour le nom du dossier qui correspond à la plateforme spécifique.

    4. Exécutez la commande suivante :

      dheapinst.exe -y srv*http://msdl.microsoft.com/download/symbols
      
  3. Chargez le pilote. Pour ce faire, exécutez la commande suivante :

    dheapmon.exe -l
    
  4. Exécutez l’outil Moniteur de tas de bureau. Pour ce faire, exécutez la commande suivante :

    dheapmon.exe -s
    

La sortie ressemble à ce qui suit :

Desktop Heap Information Monitor Tool (Version 8.1.2925.0)
Copyright (c) Microsoft Corporation. All rights reserved.
-------------------------------------------------------------
Session ID: 0
Total Desktop: ( 7872 KB - 12 desktops)
WinStation\Desktop Heap Size(KB) Used Rate(%)
-------------------------------------------------------------
WinSta0\Default 3072 24.2
WinSta0\Disconnect 64 4.5
WinSta0\Winlogon 128 10.0
Service-0x0-3e7$\Default 512 40.9
Service-0x0-3e4$\Default 512 10.0
Service-0x0-3e5$\Default 512 6.9
SAWinSta\SADesktop 512 0.5
__X78B95_89_IW\__A8D9S1_42_ID 512 0.5
Service-0x0-1d419$\Default 512 2.4
Service-0x0-1da0b$\Default 512 2.4
Service-0x0-25c2e$\Default 512 13.5
Service-0x0-2461f$\Default 512 98.6
-------------------------------------------------------------

Dans cette sortie, l’élément représente le compte qui démarre le Service-0x0-2461f$\Default service SQL Server Agent. Tous les agents de réplication s’exécutent dans le contexte de sécurité de ce compte. Si vous exécutez davantage d’agents de réplication, l’utilisation du tas de bureau augmente. Si l’utilisation du tas de bureau est de plus de 98 ou 99 %, aucune ressource de tas de bureau ne peut être allouée. Par conséquent, vous ne pouvez pas démarrer de nouveaux agents de réplication.

Dans ce résultat, l’utilisation du tas de bureau du compte est de 98,6 %. Dans ce cas, augmentez la taille du tas de bureau non actif en augmentant la troisième valeur du SharedSection paramètre. Après avoir augmenté la troisième valeur, le problème est résolu après le redémarrage du serveur. Ensuite, vous pouvez utiliser l’outil Moniteur de tas de bureau pour vérifier si la nouvelle valeur s’adaptera à tous les agents de réplication.

Nous recommandons que l’utilisation du tas de bureau reste entre 80 et 90 %. Si vous augmentez la troisième valeur du paramètre, nous vous recommandons d’augmenter la valeur SharedSection de 512 à chaque fois.

Étapes à suivre pour utiliser LiveKD afin d’éumer les valeurs de tas de bureau

  1. Téléchargez outils de débogage pour Windows dans le cadre du SDK.

  2. Sdksetup.exeExécutez, puis installez outils de débogage pour Windows.

  3. Téléchargez LiveKD.

  4. Créez un C:\debugger dossier.

  5. Copiez tous les fichiers de l’emplacement où vous avez installé les outils de débogage dans C:\debugger . Le chemin d’accès par défaut C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64 est .

  6. Extrayez LiveKD dans C:\debugger .

  7. Ouvrez une invite de commandes avec des autorisations élevées.

  8. Exécutez la commande suivante à partir de l’invite de commandes :

    livekd -y srv*http://msdl.microsoft.com/download/symbols
    
  9. Vous devez recevoir une sortie semblable à ce qui suit :

    LiveKd v5.3 - Execute kd/windbg on a live system
    Sysinternals -[www.sysinternals.com](http://www.sysinternals.com/) 
    Copyright (C) 2000-2012 Mark Russinovich and Ken Johnson
    Launching C:\Debugger\kd.exe:
    Microsoft (R) Windows Debugger Version 6.2.9200.20512 AMD64
    Copyright (c) Microsoft Corporation. All rights reserved.
    Loading Dump File [C:\Windows\livekd.dmp]
    Kernel Complete Dump File: Full address space is available
    Comment: 'LiveKD live system view'
    Symbol search path is: srv*http://msdl.microsoft.com/download/symbols
    Executable search path is:
    Product: Server, suite:
    Built by:
    Machine Name:
    Kernel base =
    Debug session time:
    System Uptime:
    Loading Kernel Symbols
    ...............................................................
    Loading User Symbols
    ...................................................
    Loading unloaded module list
    ......Unable to enumerate user-mode unloaded modules, NTSTATUS 0xC0000147
    
  10. Exécutez !dskheap pour recevoir la sortie suivante :

    kd> !dskheap
    *** ERROR: Module load completed but symbols could not be loaded for LiveKdD.SYS
    Winstation\Desktop            Heap Size(KB)   Used Rate(%)
    ------------------------------------------------------------
    WinSta0\Default                  20480                 0%
    WinSta0\Disconnect                  96                 4%
    WinSta0\Winlogon                   192                 2%
    Service-0x0-3e7$\Default           768                 1%
    Service-0x0-3e4$\Default           768                 0%
    Service-0x0-3e5 $\Default           768                 0%
    Service-0x0-10a75$\Default         768                 0%
    ------------------------------------------------------
    Total Desktop: (23840 KB - 7 desktops)
    Session ID:  0
    ============================================================
    
  11. Décodez la connexion chiffrée en faisant ce qui suit :

    1. "3e5$Service-0x0- 3e5 $\Default" -> 0x3e5 == 997.

    2. Ouvrez wbemtest à partir de la commande Exécuter dans Windows.

    3. Connectez-vous root\cimv2 à l’espace de noms.

    4. Cliquez sur Requête, puis tapez select * from win32_logonsession .

    5. Double-cliquez sur l’entrée qui contient 997.

    6. Sélectionnez UUID dans l’éditeur d’objets, puis cliquez sur Associators pour afficher le nom réel de la logon. Reportez-vous à la capture d’écran suivante :

      Sélectionnez UUID, cliquez sur Associators pour afficher le nom réel de la logon

Éléments à prendre en compte si vous utilisez le protocole Bureau à distance

Si vous vous connectez au serveur à l’aide du protocole RDP (Remote Desktop Protocol), veillez à créer la session console à l’aide du /console commutateur. Si vous n’utilisez pas le commutateur, vous ne pouvez /console pas voir le Bureau. Cela est dû au fait que le compte qui démarre le service SQL Server agent est associé à la session 0.

Le pilote Win32k.sys alloue 48 Mo d’espace d’adressare tampon pour le tas de bureau. Assurez-vous que vous n’avez pas beaucoup de bureaux qui utilisent la totalité de 48 Mo d’espace d’adressare de mémoire tampon.

Si le serveur n’est pas configuré en tant que serveur Terminal Server, tous les tas de bureau partagent 48 Mo d’espace d’adressare de mémoire tampon. Cela limite le nombre de processus de service qui peuvent s’exécuter sur le serveur.

Si le serveur est configuré en tant que serveur Terminal Server, le pilote Win32k.sys alloue 20 Mo d’espace d’adressare mémoire tampon pour le tas de bureau. Le Win32k.sys de session alloue également 16 Mo d’espace de session pour son propre pool paginé.

Différences entre un serveur Terminal Server et les services Terminal Server en ce qui concerne le tas de bureau

Un serveur Terminal Server et des services Terminal Server sont différents. Vous installez le composant Terminal Server dans Ajouter ou supprimer des programmes. Après avoir installé le composant Terminal Server, le serveur devient un serveur Terminal Server. Les services Terminal Services sont un service qui existe dans le logiciel en snap-in MMC (Microsoft Management Console) services. Si vous supprimez le composant Terminal Server du serveur, les ordinateurs clients peuvent toujours se connecter au serveur à l’aide de RDP. Par conséquent, envisagez de supprimer le composant Terminal Server pour obtenir les 48 Mo d’espace d’adressager de mémoire tampon pour le tas de bureau.

Impact des travaux dans SQL Server 2005 sur le tas de bureau

Dans SQL Server 2005, vous pouvez avoir différents travaux exécutés sous différents comptes proxy. Pour chaque compte proxy, le tas de bureau non actif pour ce compte proxy sera alloué. Par exemple, la troisième valeur du paramètre SharedSection est 512. Si vous utilisez un compte proxy pour démarrer un travail, le tas de bureau de 512 Ko sera alloué, même si le travail lui-même n’utilise que 10 Ko du tas de bureau.

Notes

Les autres travaux qui utilisent le même compte proxy utiliseront toujours ce tas de bureau.

Cela peut entraîner de nombreux bureaux lorsque le service SQL Server Agent est démarré. Par conséquent, l’espace d’adressare de mémoire tampon de 48 Mo peut être utilisé. Si vous utilisez l’outil Moniteur de tas de bureau pour examiner l’utilisation du tas de bureau, vous remarquerez qu’un bureau correspond à un compte proxy utilisé par un travail en cours d’exécution. Nous vous recommandons d’utiliser moins de comptes proxy pour éviter d’atteindre la limite de 48 Mo.

Références

Pour plus d’informations sur les valeurs du paramètre, voir SharedSection User32.dll ou Kernel32.dll'initialisation échoue.