狀況

請考慮下列案例。您設定許多 Microsoft SQL Server 2014年或 Microsoft SQL Server 2012年複寫代理程式在伺服器上執行。例如,您可以設定 200 個以上的複寫代理程式在伺服器上執行。在這個案例中,無法執行某些複寫代理程式。此外,系統記錄檔會記錄下列錯誤訊息︰

應用程式錯誤︰ 應用程式無法正確地初始化 (初始 0xc0000142)。
按一下 [確定] 終止應用程式。

原因

之所以發生這個問題,是因為桌面堆集用完。

因應措施

若要解決這個問題,請使用下列方法之一︰

  • 為不同的資料庫建立的複寫代理程式使用不同的帳戶。

    • 在建立複寫代理程式時,您可以指定這。

    • 您必須確定所有的權限觸控點會搞定。

    • 若要變更安全性設定,在找不到已經建立複寫代理程式的程序檢視及修改複寫安全性設定

  • 您可以使用 [登錄設定來增加桌面堆集大小。

    • 您可以變更下列登錄項目︰

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize(例如,增加到64, 48值)
      HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows(每次增加第三個SharedSection的 256 千位元組為單位,例如)

    • 您必須在兩個節點上套用變更。

    • 您必須將儲存的變更之前的登錄機碼,您必須套用變更之後,請重新啟動伺服器。

  • 複寫代理程式從變更持續執行,才能執行排程的方式。

    • 如此可確保複寫代理程式執行時才有必要,而非維持閒散狀態,不斷地 (因為這會浪費資源)。

    • 有關如何變更的複寫代理程式排程的指示,可在指定的同步處理排程

  • 變更複寫代理程式執行所在的伺服器位置。

    • 您可以評估的發行者-訂閱者 」 組,並查看您是否可以變更某些訂閱者建立提取使 「 散發/合併代理程式 」 在 「 訂閱者 」 而不是在 「 發行者 」 上執行。

    • 這有助於降低同時需要在伺服器上執行的代理程式數目。

狀態

此行為是系統設計的一部份。

更多的資訊

每個啟動 SQL Server 代理程式服務的帳戶會對應到非互動式桌面堆集。此外,所有的複寫代理程式由 SQL Server 代理程式服務來管理共用桌面堆集的帳戶。

如何檢查使用的桌面堆積

您可以使用 「 桌面堆積監視器 」 工具來檢查使用的桌面堆積。然後,您可以決定您是否需要以增加或減少的非互動式桌面堆集大小。通常,您必須增加大小。

重要「 桌面堆積監視器 」 工具在 Windows Server 2008 或更新的版本的 Windows 中無法運作。如果您正在使用其中一個這些 Windows 版本,您可以使用 LiveKD,若要取得桌面堆集值。如需有關如何執行這項操作的資訊,請移至下一節。

若要使用 「 桌面堆積監視器 」 工具來檢查使用的桌面堆積,請依照下列步驟執行︰

  1. 下載 「 桌面堆積監視器 」 工具。
    可從「Microsoft 下載中心」下載下列檔案:

    Download 立即下載 DesktopHeapMonitor8_1_2925_0.exe 套件。

  2. 安裝 「 桌面堆積監視器 」 工具。若要執行這項操作,請參考下列步驟:

    1. 按兩下將檔案解壓縮的套件。

    2. 按一下 [開始],按一下 [執行]、 輸入cmd,然後按一下[確定]

    3. 在命令提示字元中,執行下列命令︰

      CD ExtractFolder\kktools\dheapmon8.1\平台

      注意ExtractFolder是您用來解壓縮檔案的資料夾的預留位置。平台是資料夾的對應到特定的平台名稱的預留位置。

    4. 執行下列命令︰

      dheapinst.exe-y srv * http://msdl.microsoft.com/download/symbols

  3. 載入的驅動程式。若要這樣做,請執行下列命令︰

    dheapmon.exe –l

  4. 執行 「 桌面堆積監視器 」 工具。若要這樣做,請執行下列命令︰

    dheapmon – s

輸出如下所示︰

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
-------------------------------------------------------------



在這個輸出中的服務-0x0-2461f$ \Default 項目會表示啟動 SQL Server 代理程式服務的帳戶。在 [這個帳戶的安全性內容下,執行所有的複寫代理程式。如果您執行更多的複寫代理程式時,會增加的桌面堆積使用。如果使用的桌面堆積是多個 98%或 99%,沒有桌面的堆積資源可以配置。因此,您無法啟動任何新的複寫代理程式。

在這個輸出中使用的桌面堆積的帳戶會是 98.6 百分比。在此情況下,請增加為SharedSection的第三個值,非互動式的桌面堆積的大小增加參數。您增加第三個值之後,問題解決之後重新啟動伺服器。然後,您可以使用 「 桌面堆積監視器 」 工具來檢查如果新的值可容納所有複寫代理程式。

注意多個SharedSection參數的詳細資訊,請按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文︰

824422未預期的行為會發生於您在執行 SQL Server 的電腦上執行許多處理程序

我們建議 80%和 90%之間所維持的桌面堆積使用。如果您增加第三個值的SharedSection參數,我們建議您,您每次增加 512 每一次。

列舉的桌面堆積值用於 LiveKD 步驟

  1. 下載偵錯工具的 Windows SDK 的一部分

  2. 執行 Sdksetup.exe,並再重新安裝偵錯工具的視窗。

  3. 立即下載 LiveKD

  4. 建立"C:\debugger"的資料夾。

  5. 複製到 C:\debugger 安裝偵錯工具的位置中的所有檔案。預設路徑是 C:\Program 檔案 (x86) \Windows Kits\8.0\Debuggers\x64。

  6. 解壓縮 C:\debugger 的 LiveKD。

  7. 開啟命令提示字元,有更高的權限。

  8. 請從命令提示字元執行下列命令︰livekd -y srv*http://msdl.microsoft.com/download/symbols

  9. 您應該會收到類似下列的輸出︰

    LiveKd v5.3-即時的系統上執行 kd/windbg
    Sysinternals- www.sysinternals.com
    Copyright (C) 2000-2012年標記 Russinovich 和 Ken 什麼

    啟動 C:\Debugger\kd.exe:

    Microsoft (R) Windows 偵錯工具版本 6.2.9200.20512 AMD64
    著作權 (c) Microsoft 公司。所有,並保留一切權利。

    傾印檔案載入 [C:\Windows\livekd.dmp]
    完整的位址空間是可用核心完整傾印檔案︰


    註解: ' LiveKD 即時系統檢視 '
    符號搜尋路徑是︰ srv * http://msdl.microsoft.com/download/symbols
    可執行的搜尋路徑為︰
    產品︰ 伺服器、 套件︰
    建置的︰
    機器名稱︰
    核心基底 =
    偵錯工作階段時間︰
    系統執行時間︰
    正在載入核心符號
    ...............................................................
    ..............................................................
    正在載入使用者符號
    ...................................................
    正在載入卸載的模組清單
    ......無法列舉使用者模式卸載模組,NTSTATUS 0xC0000147

  10. 執行! dskheap收到下列輸出︰

    kd> !dskheap

    錯誤︰ 模組載入完成的符號,但無法載入的 LiveKdD.SYS
    Winstation\Desktop 堆積的 Size(KB) 用 Rate(%)

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

    WinSta0\Default 20480 0%
    WinSta0\Disconnect 96 4%
    WinSta0\Winlogon 192 2%
    服務-0x0-3e7$ \Default 768 1%
    服務-0x0-3e4$ \Default 768 0%
    服務-0x0-3e5$\Default 768 0%
    服務-0x0-10a75$ \Default 768 0%
    ------------------------------------------------------
    總桌面: (23840 KB-7 的桌面)
    工作階段識別碼︰ 0
    ============================================================

  11. 解碼加密的登入,執行下列︰

    1. "3e5$ 服務-0x0-3e5$\Default"-> 0x3e5 = = 997。

    2. 您可以開啟 [wbemtest 從 Windows 中的 [執行] 命令。

    3. 連線到 「 root\cimv2"命名空間。

    4. 按一下 [查詢],然後輸入選取 * 從 win32_logonsession。

    5. 連按兩下包含997的項目。

    6. 選取UUID在物件編輯器] 中,然後按一下 [以顯示實際的登入名稱的相關者。請參閱下列的螢幕擷取畫面︰


如果您使用遠端桌面通訊協定的考量

如果您使用遠端桌面通訊協定 (RDP) 連線到伺服器,請確定您在使用中的/console參數來建立主控台工作階段。如果您不使用中的/console參數,您無法看見桌面。這是因為啟動 SQL Server 代理程式服務的帳戶與工作階段 0 相關聯。

Win32k.sys 驅動程式會桌面堆集配置的緩衝區位址空間的 48 MB。請確定您沒有使用整個的 48 MB 的緩衝區位址空間的幾部桌上型電腦。

如果伺服器未設定為終端機伺服器,所有的桌面堆積會共用 48 MB 的緩衝區位址空間。這會限制可以在伺服器執行的服務程序的數目。

如果伺服器已經設立成終端機伺服器中,Win32k.sys 驅動程式會為桌面堆集配置的緩衝區位址空間的 20 MB。Win32k.sys 驅動程式也會為它自己的分頁集區配置 16 MB 的工作階段的空間。

終端機伺服器 」 和 「 終端機服務與桌面堆集之間的差異

終端機伺服器 」 及 「 終端機服務會有所不同。您可以安裝終端機伺服器元件中新增或移除程式。您安裝終端機伺服器元件之後,伺服器就會成為終端機伺服器。終端機服務會是存在於服務 Microsoft 管理主控台 (MMC) 嵌入式管理單元中的服務。如果您是從伺服器移除終端機伺服器元件,用戶端電腦可以仍然連線到伺服器,使用 RDP。因此,請考慮移除終端機伺服器元件,以取得 48 MB 的桌面堆積的緩衝區位址空間。

在 SQL Server 2005 中的工作會如何影響桌面堆集

在 [SQL Server 2005,您可能需要在不同的 proxy 帳戶下執行的不同工作。每個 proxy 帳戶,將配置非互動式桌面堆集,該 proxy 帳戶。例如,第三個SharedSection參數的值為 512。 如果您使用 proxy 帳戶來啟動工作時,512 KB 的桌面堆積會配置,即使工作本身使用的桌面堆積只有 10 KB。

注意其他使用相同的 proxy 帳戶的工作人員仍然可以使用這個桌面堆集。

啟動 SQL Server 代理程式服務時,這可能會導致幾部桌上型電腦。因此,48 MB 的緩衝區位址空間可能用完。如果您使用 「 桌面堆積監視器 」 工具來檢查使用的桌面堆積時,您會發現該一個桌面對應到一個 proxy 帳戶所使用的執行中的工作。我們建議您使用較少的 proxy 帳戶,以避免到達 48 MB 的限制。

參考

如需SharedSection參數的之值的相關資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的文件︰

184802 User32.dll 或 Kernel32.dll 初始化失敗

Need more help?

Expand your skills
Explore Training
Get new features first
Join Microsoft Insiders

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?

Thank you for your feedback!

×