Freigeben über


Einige SQL Server-Replikations-Agents können nicht ausgeführt werden, wenn Sie viele Replikations-Agents für die Ausführung auf einem Server konfigurieren.

Dieser Artikel hilft Ihnen, das Problem zu umgehen, bei dem einige Replikations-Agents nicht ausgeführt werden können, wenn Sie viele SQL Server-Replikations-Agents für die Ausführung auf einem Server konfigurieren.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 949296

Problembeschreibung

Stellen Sie sich folgendes Szenario vor:

  • Sie konfigurieren viele Microsoft SQL Server-Replikations-Agents für die Ausführung auf einem Server. Sie konfigurieren beispielsweise mehr als 200 Replikations-Agents für die Ausführung auf einem Server.

In diesem Szenario können einige Replikations-Agents nicht ausgeführt werden. Darüber hinaus wird die folgende Fehlermeldung im Systemprotokoll protokolliert:

Anwendungsfehler: Die Anwendung konnte nicht ordnungsgemäß initialisiert werden (0xc0000142).
Klicken Sie auf "OK", um die Anwendung zu beenden.

Ursache

Dieses Problem tritt auf, da der Desktop-Heap verwendet wird.

Problemumgehung

Verwenden Sie eine der folgenden Methoden, um dieses Problem zu umgehen:

Verwenden separater Konten für die Replikations-Agents, die für verschiedene Datenbanken erstellt wurden

Sie können dies angeben, während Sie Replikations-Agents erstellen. Sie müssen sicherstellen, dass alle Berechtigungstouchpunkte erledigt werden. Das Verfahren zum Ändern der Sicherheitseinstellungen für bereits erstellte Replikations-Agents finden Sie unter "Anzeigen", und ändern Sie die Sicherheitseinstellungen der Replikation.

Verwenden von Registrierungseinstellungen zum Erhöhen der Desktop-Heapgröße

Sie können die folgenden Registrierungseinträge ändern:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize (Erhöhen Sie z. B. den Wert von 48 auf 64).

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows (Erhöhen Sie z. B. den dritten Wert von SharedSection 256 Kilobyte)

Sie müssen die Änderungen auf beiden Knoten anwenden. Sie müssen die Registrierungsschlüssel vor der Änderung speichern, und Sie müssen den Server neu starten, nachdem Sie die Änderung angewendet haben.

Ändern der fortlaufenden Ausführung der Replikations-Agents in eine geplante Ausführung

Dadurch wird sichergestellt, dass die Replikations-Agents nur ausgeführt werden, wenn sie notwendig sind und nicht ständig im Leerlauf bleiben (da dadurch Ressourcen verschwendet werden).

Anweisungen zum Ändern des Replikations-Agent-Zeitplans finden Sie unter "Synchronisierungszeitpläne angeben".

Ändern des Serverspeicherorts, auf dem die Replikations-Agents ausgeführt werden

Sie können die Herausgeber-Abonnent-Paare auswerten und sehen, ob Sie einige Abonnenten so ändern können, dass der Verteiler-/Seriendruck-Agent anstelle des Herausgebers auf dem Abonnenten ausgeführt wird. Dadurch wird die Anzahl der gleichzeitigen Agents reduziert, die auf dem Server ausgeführt werden müssen.

Der Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Schritte zum Aufzählen der Desktop-Heapwerte mithilfe von LiveKD

  1. Laden Sie Debugtools für Windows als Teil des SDK herunter.

  2. Führen Sie die Ausführung aus, und installieren Sie Sdksetup.exedann Debugtools für Windows.

  3. Laden Sie LiveKD herunter.

  4. Erstellen Sie einen C:\debugger Ordner.

  5. Kopieren Sie alle Dateien vom Speicherort, an dem Sie die Debugtools installiert haben.C:\debugger Der Standardpfad lautet C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64.

  6. Extrahieren Sie LiveKD in C:\debugger.

  7. Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten.

  8. Führen Sie den folgenden Befehl an der Eingabeaufforderung aus:

    livekd -y srv*http://msdl.microsoft.com/download/symbols
    
  9. Sie sollten eine Ausgabe erhalten, die etwa wie folgt aussieht:

    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. Führen Sie den Befehl aus !dskheap , um die folgende Ausgabe zu erhalten:

    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. Decodieren Sie die verschlüsselte Anmeldung wie folgt:

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

    2. Öffnen Sie wbemtest über den Befehl "Ausführen" in Windows.

    3. Stellen Sie eine Verbindung mit dem root\cimv2 Namespace her.

    4. Wählen Sie "Abfrage" aus, und geben Sie select * from win32_logonsessiondann ein.

    5. Doppelklicken Sie auf den Eintrag, der 997 enthält.

    6. Wählen Sie UUID im Objekt-Editor aus, und klicken Sie dann auf "Associators ", um den tatsächlichen Anmeldenamen anzuzeigen. Weitere Informationen finden Sie im folgenden Screenshot:

      Screenshot der Schritte zum Suchen des tatsächlichen Anmeldenamens.

Überlegungen bei Verwendung des Remotedesktopprotokolls

Wenn Sie mithilfe des Remotedesktopprotokolls (RDP) eine Verbindung mit dem Server herstellen, stellen Sie sicher, dass Sie die Konsolensitzung mithilfe der /console Option erstellen. Wenn Sie den /console Schalter nicht verwenden, wird der Desktop nicht angezeigt. Dies liegt daran, dass das Konto, das den SQL Server-Agent Dienst startet, sitzung 0 zugeordnet ist.

Der Win32k.sys Treiber weist 48 MB Pufferadressraum für den Desktop-Heap zu. Stellen Sie sicher, dass Sie nicht über viele Desktops verfügen, die den gesamten 48 MB Pufferadressraum verbrauchen.

Wenn der Server nicht als Terminalserver konfiguriert ist, teilen alle Desktop-Heaps den Pufferadressraum von 48 MB. Dadurch wird die Anzahl der Dienstprozesse begrenzt, die auf dem Server ausgeführt werden können.

Wenn der Server als Terminalserver konfiguriert ist, weist der Win32k.sys Treiber 20 MB Pufferadressraum für den Desktop-Heap zu. Der Win32k.sys Treiber weist außerdem 16 MB Sitzungsraum für seinen eigenen seitenseitigen Pool zu.

Unterschiede zwischen einem Terminalserver und Terminaldiensten im Hinblick auf den Desktop-Heap

Ein Terminalserver und Terminaldienste unterscheiden sich. Sie installieren die Terminalserverkomponente in " Programme hinzufügen oder entfernen". Nachdem Sie die Terminalserverkomponente installiert haben, wird der Server zu einem Terminalserver. Terminaldienste sind ein Dienst, der im Microsoft Management Console (MMC)-Snap-In (Services Microsoft Management Console) vorhanden ist. Wenn Sie die Terminalserverkomponente vom Server entfernen, können Clientcomputer mithilfe von RDP weiterhin eine Verbindung mit dem Server herstellen. Daher sollten Sie die Terminalserverkomponente entfernen, um den Pufferadressraum von 48 MB für den Desktop-Heap abzurufen.

Auswirkungen von Jobs in SQL Server auf den Desktop-Heap

In SQL Server verfügen Sie möglicherweise über unterschiedliche Aufträge, die unter verschiedenen Proxykonten ausgeführt werden. Für jedes Proxykonto wird der nichtinteraktive Desktop-Heap für dieses Proxykonto zugewiesen. Der dritte Wert des SharedSection-Parameters lautet beispielsweise 512. Wenn Sie ein Proxykonto verwenden, um einen Auftrag zu starten, wird der 512-KB-Desktop-Heap zugewiesen, auch wenn der Auftrag selbst nur 10 KB des Desktop-Heaps verwendet.

Notiz

Andere Aufträge, die dasselbe Proxykonto verwenden, verwenden weiterhin diesen Desktop-Heap.

Dies kann zu vielen Desktops führen, wenn der SQL Server-Agent Dienst gestartet wird. Daher kann der 48 MB Pufferadressraum verwendet werden. Wenn Sie das Desktop Heap Monitor-Tool verwenden, um die Verwendung des Desk-Heaps zu untersuchen, werden Sie feststellen, dass ein Desktop einem Proxykonto entspricht, das von einem ausgeführten Auftrag verwendet wird. Es wird empfohlen, weniger Proxykonten zu verwenden, um das Erreichen des Grenzwerts von 48 MB zu vermeiden.

Verweise

Weitere Informationen zu den Werten des SharedSection Parameters finden Sie unter User32.dll oder Kernel32.dll kann nicht initialisiert werden.