Certains agents de réplication SQL Server ne peut pas s’exécuter lorsque vous configurez les agents de réplication de s’exécuter sur un serveur

S’applique à : Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Workgroup EditionMicrosoft SQL Server 2005 Developer Edition

Symptômes


Envisagez le scénario suivant. Vous configurez plusieurs agents de réplication 2014 de Microsoft SQL Server ou Microsoft SQL Server 2012 pour s’exécuter sur un serveur. Par exemple, vous configurez plus de 200 agents de réplication s’exécuter 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 enregistré dans le journal système :
Erreur d’application : L’application n’a pas pu s’initialiser correctement (0xc0000142).
Cliquez sur OK pour fermer l'application.

Cause


Ce problème se produit car le segment de bureau est utilisé.

Solution de contournement


Pour contourner ce problème, appliquez l’une des méthodes suivantes :
  • Utilisez 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 des agents de réplication.
    • Vous devez vous assurer que tous les points de contact des autorisations sont pris en charge.
    • La procédure pour modifier les paramètres de sécurité pour les agents de réplication de déjà créé, vous pouvez trouver à Afficher et modifier les paramètres de sécurité de réplication.
  • Utiliser les paramètres du Registre pour augmenter la taille du segment de bureau.
    • Vous pouvez modifier les entrées de Registre suivantes :
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize (augmenter la valeur de 48 à 64, par exemple)
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows (augmenter la troisième valeur de SharedSection 256 kilo-octets, par exemple)
    • Vous devez appliquer les modifications sur les deux nœuds.
    • Vous devez enregistrer les clés de Registre avant la modification, et vous devez redémarrer le serveur après avoir appliqué la modification.
  • Modifier les agents de réplication s’exécute en permanence en cours d’exécution sur une base planifiée.
    • Cela permet de garantir que les agents de réplication s’exécutent uniquement lorsqu’il est nécessaire et de ne pas rester inactif en permanence (car cela gaspille des ressources).
    • Instructions sur la modification de la planification de l’agent de réplication sont disponibles à 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 d’éditeur-abonné et voir si vous pouvez modifier certains abonnés à extraire qui va exécuter l’agent de distribution et de fusion sur l’abonné et non sur l’éditeur.
    • Cela permet de réduire le nombre d’agents simultanés qui doivent fonctionner sur le serveur.

État


Ce comportement est voulu par la conception.

Plus d'informations


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

Comment faire pour examiner l’utilisation du segment

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

Important L’outil d’analyse de segment 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 les valeurs de segment de bureau. Pour plus d’informations sur la procédure à suivre, consultez la section suivante.

Pour utiliser l’outil d’analyse de segment de bureau pour examiner l’utilisation du tas du bureau, procédez comme suit :
  1. Téléchargez l’outil d’analyse de segment de bureau.
    Le fichier suivant est disponible au téléchargement à partir du Microsoft Download Center :

    Download Télécharger le package DesktopHeapMonitor8_1_2925_0.exe maintenant.
  2. Installer l’outil d’analyse de segment de bureau. Pour ce faire, procédez comme suit :
    1. Double-cliquez sur le package pour extraire les fichiers.
    2. Cliquez sur Démarrer, sur exécuter, tapez cmd, puis cliquez sur OK.
    3. À l’invite de commandes, exécutez la commande suivante :

      CD ExtractFolder\kktools\dheapmon8.1\plate-forme

      Remarque : ExtractFolder est un espace réservé pour le dossier dans lequel extraire les fichiers. Plate-forme 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. Charger le pilote. Pour ce faire, exécutez la commande suivante :

    dheapmon.exe –l
  4. Exécutez l’outil d’analyse de segment de bureau. Pour ce faire, exécutez la commande suivante :

    dheapmon – s
La sortie ressemble à ceci :

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 de \Default $ Service-0 x 0-2461f représente le compte qui démarre le service SQL Server Agent. Tous les agents de réplication s’exécutent sous le contexte de sécurité de ce compte. Si vous exécutez plusieurs agents de réplication, augmente l’utilisation du segment. Si l’utilisation du segment est supérieure à 98 ou 99 pour cent, aucune ressource de segments de bureau ne peut être affecté. Par conséquent, vous ne peut pas démarrer les nouveaux agents de réplication.

Dans cette sortie, l’utilisation du segment du compte est « 98.6 » %. Dans ce cas, augmenter la taille du segment de bureau non interactif en augmentant la troisième valeur de l' SharedSectionparamètre. Après avoir augmenté la valeur du troisième, le problème est résolu après le redémarrage du serveur. Ensuite, vous pouvez utiliser l’outil d’analyse de segment de bureau pour examiner si la nouvelle valeur s’adapte à tous les agents de réplication.

Remarque : Pour plus d’informations sur le paramètre SharedSection , cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
824422 un comportement inattendu se produit lorsque vous exécutez plusieurs processus sur un ordinateur qui exécute SQL Server

Nous recommandons que l’utilisation du segment de bureau rester entre 80 % et 90 %. Si vous augmentez la troisième valeur del’aredSectiondu Shparamètre, nous vous recommandons d’augmenter la valeur par 512 chaque fois.

Étapes à suivre pour LiveKD permet d’énumérer les valeurs du segment de bureau

  1. Téléchargez les Outils de débogage pour Windows dans le cadre du Kit de développement.
  2. Exécuter Sdksetup.exe et installez Debugging Tools pour Windows.
  3. Télécharger LiveKD.
  4. Créez un dossier « C:\debugger ».
  5. Copiez tous les fichiers à partir de l’emplacement où vous avez installé les outils de débogage pour C:\debugger. Le chemin d’accès par défaut est C:\Program Files (x86) \Windows Kits\8.0\Debuggers\x64.
  6. Extraire LiveKD à C:\debugger.
  7. Ouvrez une invite de commande qui a des autorisations avec des privilèges élevés.
  8. À partir de l’invite de commandes, exécutez la commande suivante :
    livekd -y srv*http://msdl.microsoft.com/download/symbols 
  9. Vous recevrez une sortie semblable à la suivante :
    LiveKd, v5.3 - kd/windbg d’exécuter sur un système actif
    Sysinternals - www.sysinternals.com
    Copyright (C) 2000-2012 Mark Russinovich et Ken Johnson

    Lancement de C:\Debugger\kd.exe :

    AMD64 de débogueur Version 6.2.9200.20512 de Windows Microsoft (R)
    Copyright (c) Microsoft Corporation. Tous droits réservés.

    Chargement du fichier de vidage [C:\Windows\livekd.dmp]
    Fichier d’image complète du noyau : Espace adresse complet est disponible


    Commentaire : « LiveKD système live view »
    Chemin de recherche de symbole est : srv * http://msdl.microsoft.com/download/symbols
    Chemin de recherche exécutable est :
    Produit : Serveur, suite :
    Généré par :
    Nom de l’ordinateur :
    Noyau de base =
    Durée de la session de débogage :
    Disponibilité du système :
    Chargement des symboles de noyau
    ...............................................................
    ..............................................................
    Chargement des symboles utilisateur
    ...................................................
    Chargement de la liste module déchargé
    ...... Impossible d’énumérer les modules déchargé en mode utilisateur, NTSTATUS 0xC0000147
  10. Exécutez ! dskheap pour recevoir la sortie suivante :
    kd> !dskheap

    Erreur : Chargement de Module terminé mais les symboles pas peuvent être chargées pour LiveKdD.SYS
    Taille (Ko) de Winstation\Desktop du tas utilisé Rate(%)

    ------------------------------------------------------------

    WinSta0\Default 20480 0 %
    WinSta0\Disconnect 96 4 %
    WinSta0\Winlogon 192 2 %
    0 x 0-Service-3e7$ \Default 768 1 %
    0 x 0-Service-3e4$ \Default 768 0 %
    Service-0 x 0 -3e5$\Default 768 0 %
    0 x 0-Service-10a75$ \Default 768 0 %
    ------------------------------------------------------
    Bureau total : (23840 Ko - 7 postes de travail)
    ID de session : 0
    ============================================================
  11. Décoder l’ouverture de session crypté en procédant comme suit :
    1. « Service de $3e5-0 x 0 -3e5$\Default » -> 0x3e5 == 997.
    2. Wbemtest ouverte à partir de la commande Exécuter de Windows.
    3. Se connecter à l’espace de noms « root\cimv2 ».
    4. Cliquez sur la requêteet tapez Sélectionner * à partir de win32_logonsession.
    5. Double-cliquez sur l’entrée contenant 997.
    6. Sélectionnez les UUIDdans l’éditeur d’objets, puis cliquez sur Associators pour afficher le nom d’ouverture de session réel. Reportez-vous à la capture d’écran suivante :

      This screen shot shows the previously mentioned steps.

Considérations, si vous utilisez le protocole de bureau à distance

Si vous vous connectez au serveur en utilisant le protocole RDP (Remote Desktop), assurez-vous que vous créez en utilisant le commutateur /console la session de console. Si vous n’utilisez pas le commutateur /console , vous ne pouvez pas voir le bureau. C’est parce que le compte qui démarre le service SQL Server Agent est associé à la session 0.

Le pilote Win32k.sys alloue de 48 Mo d’espace d’adressage de mémoire tampon pour le segment de bureau. Assurez-vous que vous n’avez pas de nombreux postes de travail qui utilisent l’ensemble 48 Mo d’espace d’adressage de mémoire tampon.

Si le serveur n’est pas configuré comme un serveur terminal server, tous les segments de bureau partagent le 48 Mo d’espace d’adressage 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é comme un serveur terminal server, le pilote Win32k.sys alloue de 20 Mo d’espace d’adressage de mémoire tampon pour le segment de bureau. Le pilote Win32k.sys alloue également de 16 Mo d’espace de la session pour son propre pool paginé.

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

Un serveur terminal server et les services Terminal Server sont différents. Vous installez le composant services Terminal Server dans Ajout / Suppression de programmes. Après avoir installé le composant de serveur Terminal Server, le serveur devient un serveur terminal server. Les services Terminal Server est un service qui existe dans le composant logiciel enfichable Services Microsoft Management Console (MMC). Si vous supprimez le composant Terminal Server à partir du serveur, les ordinateurs clients peuvent toujours se connecter au serveur à l’aide de RDP. Par conséquent, supprimez le composant Terminal Server pour obtenir le 48 Mo d’espace d’adressage de mémoire tampon pour le segment de bureau.

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

Dans SQL Server 2005, vous pouvez avoir des différentes tâches qui s’exécutent sous des comptes proxy différent. Pour chaque compte de proxy, le segment de bureau non interactif pour ce compte proxy est 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 segment de bureau de 512 Ko, sera attribué, même si le travail lui-même utilise seulement 10 Ko du segment.

Remarque Autres travaux qui utilisent le même compte de proxy utilisera toujours ce segment de bureau.

Cela peut entraîner de nombreux postes de travail lorsque le service SQL Server Agent est démarré. Par conséquent, le 48 Mo d’espace d’adressage mémoire tampon peuvent être utilisée jusqu'à. Si vous utilisez l’outil d’analyse de segment de bureau pour examiner l’utilisation du tas de Business desk, vous remarquerez qu’un ordinateur de bureau correspond au compte d’un proxy qui est utilisée par un travail en cours d’exécution. Nous vous recommandons d’utiliser des comptes proxy moins pour éviter d’atteindre la limite de 48 Mo.

Références


Pour plus d’informations sur les valeurs du paramètre SharedSection , cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
184802 User32.dll ou Kernel32.dll ne parvient pas à initialiser