Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 vonSharedSection256 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
Laden Sie Debugtools für Windows als Teil des SDK herunter.
Führen Sie die Ausführung aus, und installieren Sie
Sdksetup.exedann Debugtools für Windows.Laden Sie LiveKD herunter.
Erstellen Sie einen
C:\debuggerOrdner.Kopieren Sie alle Dateien vom Speicherort, an dem Sie die Debugtools installiert haben.
C:\debuggerDer Standardpfad lautetC:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64.Extrahieren Sie LiveKD in
C:\debugger.Öffnen Sie eine Eingabeaufforderung mit erhöhten Rechten.
Führen Sie den folgenden Befehl an der Eingabeaufforderung aus:
livekd -y srv*http://msdl.microsoft.com/download/symbolsSie 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 0xC0000147Fü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 ============================================================Decodieren Sie die verschlüsselte Anmeldung wie folgt:
"3e5$Service-0x0- 3e5 $\Default" -> 0x3e5 == 997.Öffnen Sie wbemtest über den Befehl "Ausführen" in Windows.
Stellen Sie eine Verbindung mit dem
root\cimv2Namespace her.Wählen Sie "Abfrage" aus, und geben Sie
select * from win32_logonsessiondann ein.Doppelklicken Sie auf den Eintrag, der 997 enthält.
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:
Ü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.