Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описана проблема, из-за которой некоторые агенты репликации не могут выполняться при настройке многих агентов репликации SQL Server для запуска на сервере.
Исходная версия продукта: SQL Server
Исходный номер базы знаний: 949296
Симптомы
Рассмотрим следующий сценарий:
- Вы настраиваете множество агентов репликации Microsoft SQL Server для запуска на сервере. Например, вы настраиваете более 200 агентов репликации для запуска на сервере.
В этом сценарии некоторые агенты репликации не могут выполняться. Кроме того, в системном журнале регистрируется следующее сообщение об ошибке:
Ошибка приложения: приложение не удалось инициализировать правильно (0xc0000142).
Нажмите кнопку "ОК", чтобы завершить работу приложения.
Причина
Эта проблема возникает из-за того, что настольная куча используется.
Обходное решение
Чтобы обойти эту проблему, используйте один из следующих методов:
Использование отдельных учетных записей для агентов репликации, созданных для разных баз данных
Это можно указать при создании агентов репликации. Необходимо убедиться, что все точки касания разрешений заботятся. Процедура изменения параметров безопасности для уже созданных агентов репликации можно найти в разделе "Просмотр" и изменение параметров безопасности репликации.
Использование параметров реестра для увеличения размера кучи на рабочем столе
Вы можете изменить следующие записи реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize
(например, увеличьте значение от 48 до 64).HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows
(например, увеличьте третье значениеSharedSection
на 256 килобайт)
Необходимо применить изменения на обоих узлах. Перед изменением необходимо сохранить разделы реестра и перезапустить сервер после применения изменения.
Изменение агентов репликации с непрерывного выполнения на запланированное
Это гарантирует, что агенты репликации выполняются только в том случае, если это необходимо, и не оставаться в состоянии простоя (так как это тратит ресурсы).
Инструкции по изменению расписания агента репликации доступны в разделе "Указание расписаний синхронизации".
Изменение расположения сервера, в котором выполняются агенты репликации
Вы можете оценить пары подписчиков издателя и узнать, можно ли изменить некоторые подписчики на вытягивание, которое приведет к выполнению агента распространения или слияния на подписчике, а не на издателе. Это помогает сократить количество одновременных агентов, которые должны выполняться на сервере.
Состояние
Такое поведение предусмотрено программой.
Действия по перечислению значений кучи рабочего стола с помощью LiveKD
Запустите
Sdksetup.exe
и установите средства отладки для Windows.Создайте папку
C:\debugger
.Скопируйте все файлы из расположения, в котором установлены средства
C:\debugger
отладки. По умолчанию используется путьC:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64
.Извлечение LiveKD в
C:\debugger
.Откройте командную строку с повышенными правами.
В окне командной строки выполните следующую команду:
livekd -y srv*http://msdl.microsoft.com/download/symbols
Выходные данные должны выглядеть примерно так:
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
Выполните команду
!dskheap
, чтобы получить следующие выходные данные: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 ============================================================
Декодировать зашифрованный вход, выполнив следующие действия:
"3e5$Service-0x0- 3e5 $\Default" -> 0x3e5 == 997
.Откройте wbemtest из команды Run в Windows.
Подключитесь к пространству
root\cimv2
имен.Выберите "Запрос", а затем введите
select * from win32_logonsession
.Дважды щелкните запись, содержащую 997.
Выберите UUID в редакторе объектов и щелкните "Ассоциаторы ", чтобы отобразить фактическое имя входа. См. следующий снимок экрана:
Рекомендации при использовании протокола удаленного рабочего стола
Если вы подключаетесь к серверу с помощью протокола удаленного рабочего стола (RDP), убедитесь, что сеанс консоли создается с помощью коммутатора /console
. Если вы не используете переключатель, вы не увидите рабочий /console
стол. Это связано с тем, что учетная запись, которая запускает службу агент SQL Server, связана с сеансом 0.
Драйвер Win32k.sys выделяет 48 МБ адресного пространства буфера для кучи рабочего стола. Убедитесь, что у вас нет большого количества рабочих столов, которые используют все 48 МБ буферного адресного пространства.
Если сервер не настроен в качестве сервера терминала, все кучи настольных компьютеров используют 48 МБ адресного пространства буфера. Это ограничивает количество процессов службы, которые могут выполняться на сервере.
Если сервер настроен как сервер терминала, драйвер Win32k.sys выделяет 20 МБ буферного адресного пространства для кучи рабочего стола. Драйвер Win32k.sys также выделяет 16 МБ сеансового пространства для собственного пула страниц.
Различия между сервером терминалов и службами терминалов в отношении кучи компьютеров
Сервер терминала и службы терминалов отличаются. Компонент сервера терминала устанавливается в разделе "Добавление или удаление программ". После установки компонента сервера терминала сервер становится сервером терминала. Службы терминалов — это служба, которая существует в оснастке консоли управления (MMC) служб. При удалении компонента сервера терминала с сервера клиентские компьютеры по-прежнему могут подключаться к серверу с помощью RDP. Поэтому рекомендуется удалить компонент сервера терминалов, чтобы получить 48 МБ буферного адресного пространства для кучи рабочего стола.
Как задания в SQL Server влияют на кучу рабочего стола
В SQL Server могут быть разные задания, которые выполняются в разных учетных записях прокси-сервера. Для каждой учетной записи прокси-сервера будет выделена неинтерактивная куча рабочего стола для этой учетной записи-посредника. Например, третье значение параметра SharedSection равно 512. Если вы используете учетную запись прокси-сервера для запуска задания, будет выделена куча настольных компьютеров 512 КБ, даже если само задание использует только 10 КБ кучи рабочего стола.
Примечание.
Другие задания, использующие ту же учетную запись прокси-сервера, по-прежнему будут использовать эту кучу рабочего стола.
Это может привести к тому, что во многих рабочих столах запущена служба агент SQL Server. Поэтому может использоваться 48 МБ адресного пространства буфера. Если вы используете средство "Монитор кучи компьютеров" для проверки использования кучи на рабочем столе, вы заметите, что один рабочий стол соответствует одной учетной записи прокси-сервера, используемой выполняющимся заданием. Рекомендуется использовать меньше учетных записей-посредников, чтобы избежать достижения ограничения в 48 МБ.
Ссылки
Дополнительные сведения о значениях SharedSection
параметра см. в разделе User32.dll или Kernel32.dll не удалось инициализировать.