Niektórzy agenci replikacji programu SQL Server nie mogą działać podczas konfigurowania wielu agentów replikacji do uruchamiania na serwerze

Ten artykuł pomaga obejść problem polegający na tym, że niektórzy agenci replikacji nie mogą działać podczas konfigurowania wielu agentów replikacji programu SQL Server do uruchamiania na serwerze.

Oryginalna wersja produktu: SQL Server
Oryginalny numer KB: 949296

Symptomy

Rozważmy następujący scenariusz:

  • Można skonfigurować wielu agentów replikacji programu Microsoft SQL Server do uruchamiania na serwerze. Na przykład można skonfigurować więcej niż 200 agentów replikacji do uruchamiania na serwerze.

W tym scenariuszu niektórzy agenci replikacji nie mogą uruchomić. Ponadto w dzienniku systemu jest rejestrowany następujący komunikat o błędzie:

Błąd aplikacji: nie można poprawnie zainicjować aplikacji (0xc0000142).
Kliknij przycisk OK, aby zakończyć działanie aplikacji.

Przyczyna

Ten problem występuje, ponieważ sterta pulpitu jest używana.

Rozwiązanie

Aby obejść ten problem, użyj jednej z następujących metod:

Używanie oddzielnych kont dla agentów replikacji utworzonych dla różnych baz danych

Można to określić podczas tworzenia agentów replikacji. Musisz upewnić się, że wszystkie punkty dotykowe uprawnień są zadbane. Procedurę zmiany ustawień zabezpieczeń dla już utworzonych agentów replikacji można znaleźć w artykule Wyświetlanie i modyfikowanie ustawień zabezpieczeń replikacji.

Użyj ustawień rejestru, aby zwiększyć rozmiar sterty pulpitu

Możesz zmienić następujące wpisy rejestru:

  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize (na przykład zwiększ wartość z 48 do 64).

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows (na przykład zwiększenie trzeciej wartości SharedSection o 256 kilobajtów)

Należy zastosować zmiany w obu węzłach. Musisz zapisać klucze rejestru przed zmianą i po zastosowaniu zmiany należy ponownie uruchomić serwer.

Zmienianie agentów replikacji z ciągłego uruchamiania na uruchomione zgodnie z harmonogramem

Dzięki temu agenci replikacji są uruchamiani tylko wtedy, gdy jest to konieczne, a nie bezczynności (ponieważ powoduje to marnowanie zasobów).

Instrukcje dotyczące sposobu zmiany harmonogramu agenta replikacji są dostępne w temacie Określanie harmonogramów synchronizacji.

Zmień lokalizację serwera, w której są uruchomioni agenci replikacji

Możesz ocenić pary wydawcy-subskrybenta i sprawdzić, czy można zmienić niektórych subskrybentów, aby ściągnąć, co spowoduje uruchomienie agenta dystrybucji/scalania na subskrybenta zamiast na wydawcy. Pomaga to zmniejszyć liczbę współbieżnych agentów, którzy muszą działać na serwerze.

Stan

Wynika to z ustawienia fabrycznego.

Kroki używania liveKD do wyliczania wartości stert pulpitu

  1. Pobierz narzędzia debugowania dla systemu Windows w ramach zestawu SDK.

  2. Uruchom polecenie Sdksetup.exe, a następnie zainstaluj narzędzia debugowania dla systemu Windows.

  3. Pobierz plik LiveKD.

  4. C:\debugger Utwórz folder.

  5. Skopiuj wszystkie pliki z lokalizacji, w której zainstalowano narzędzia debugowania do C:\debuggerprogramu . Domyślna ścieżka to C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64.

  6. Wyodrębnij plik LiveKD do C:\debugger.

  7. Otwórz wiersz polecenia z podwyższonym poziomem uprawnień.

  8. Uruchom następujące polecenie w wierszu polecenia:

    livekd -y srv*http://msdl.microsoft.com/download/symbols
    
  9. Powinny zostać wyświetlone dane wyjściowe podobne do następujących:

    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. Uruchom polecenie !dskheap , aby otrzymać następujące dane wyjściowe:

    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. Zdekoduj zaszyfrowane logowanie, wykonując następujące czynności:

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

    2. Otwórz plik wbemtest z polecenia Uruchom w systemie Windows.

    3. Połącz się z przestrzenią root\cimv2 nazw.

    4. Wybierz pozycję Zapytanie, a następnie wpisz select * from win32_logonsession.

    5. Kliknij dwukrotnie wpis zawierający wartość 997.

    6. Wybierz pozycję UUID w edytorze obiektów, a następnie kliknij pozycję Kojarzenie , aby wyświetlić rzeczywistą nazwę logowania. Zapoznaj się z następującym zrzutem ekranu:

      Zrzut ekranu przedstawiający kroki lokalizowania rzeczywistej nazwy logowania.

Zagadnienia dotyczące korzystania z protokołu Remote Desktop Protocol

Jeśli nawiąższ połączenie z serwerem przy użyciu protokołu RDP (Remote Desktop Protocol), upewnij się, że sesja konsoli jest tworzona przy użyciu przełącznika /console . Jeśli nie używasz przełącznika /console , nie widzisz pulpitu. Dzieje się tak, ponieważ konto uruchamiające usługę SQL Server Agent jest skojarzone z sesją 0.

Sterownik Win32k.sys przydziela 48 MB przestrzeni adresowej buforu dla sterta pulpitu. Upewnij się, że nie masz wielu komputerów stacjonarnych korzystających z całej przestrzeni adresowej buforu 48 MB.

Jeśli serwer nie jest skonfigurowany jako serwer terminalowy, wszystkie stery pulpitu współdzielą przestrzeń adresową buforu 48 MB. Ogranicza to liczbę procesów usługi, które mogą być uruchamiane na serwerze.

Jeśli serwer jest skonfigurowany jako serwer terminalowy, sterownik Win32k.sys przydziela 20 MB przestrzeni adresowej buforu dla sterta pulpitu. Sterownik Win32k.sys przydziela również 16 MB miejsca sesji dla własnej puli stronicowanej.

Różnice między serwerem terminalu a usługami terminalowymi w odniesieniu do sterta pulpitu

Serwer terminalowy i usługi terminalowe różnią się. Składnik serwera terminali jest instalowany w obszarze Dodawanie lub usuwanie programów. Po zainstalowaniu składnika serwera terminali serwer staje się serwerem terminali. Usługi terminalowe to usługa, która istnieje w przystawce Microsoft Management Console (MMC). Jeśli usuniesz składnik serwera terminali z serwera, komputery klienckie nadal będą mogły łączyć się z serwerem przy użyciu protokołu RDP. W związku z tym należy rozważyć usunięcie składnika serwera terminali w celu uzyskania 48 MB przestrzeni adresowej buforu dla stertu pulpitu.

Jak zadania w programie SQL Server wpływają na pamięć pulpitu

W programie SQL Server mogą istnieć różne zadania uruchamiane na różnych kontach serwera proxy. Dla każdego konta serwera proxy zostanie przydzielona sterta pulpitu bezinteraktywnego dla tego konta serwera proxy. Na przykład trzecia wartość parametru SharedSection to 512. Jeśli używasz konta serwera proxy do uruchomienia zadania, sterta pulpitu 512 KB zostanie przydzielona, nawet jeśli samo zadanie używa tylko 10 KB stert pulpitu.

Uwaga 16.

Inne zadania korzystające z tego samego konta serwera proxy będą nadal używać tego sterta pulpitu.

Może to spowodować uruchomienie wielu komputerów stacjonarnych po uruchomieniu usługi SQL Server Agent. W związku z tym można wykorzystać przestrzeń adresową buforu o rozmiarze 48 MB. Jeśli używasz narzędzia Monitor stert pulpitu do zbadania użycia sterty biurkowej, zauważysz, że jeden pulpit odpowiada jednemu kontu proxy używanemu przez uruchomione zadanie. Zalecamy użycie mniejszej liczby kont serwera proxy, aby uniknąć osiągnięcia limitu 48 MB.

Informacje

Aby uzyskać więcej informacji na temat wartości parametru SharedSection , zobacz User32.dll lub Kernel32.dll nie można zainicjować.