No se pueden ejecutar algunos agentes de duplicación de SQL Server al configurar muchos agentes de replicación para que se ejecute en un servidor

Se aplica a: Microsoft SQL Server 2005 Standard EditionMicrosoft SQL Server 2005 Workgroup EditionMicrosoft SQL Server 2005 Developer Edition

Síntomas


Considere el siguiente escenario. Configurar muchos agentes de duplicación de 2014 de Microsoft SQL Server o Microsoft SQL Server 2012 para que se ejecute en un servidor. Por ejemplo, configura más de 200 agentes de duplicación para ejecutarse en un servidor. En este escenario, no pueden ejecutar algunos agentes de duplicación. Además, el mensaje de error siguiente se graba en el registro del sistema:
Error de la aplicación: La aplicación no se ha podido inicializar correctamente (0xc0000142).
Haga clic en Aceptar para finalizar la aplicación.

Causa


Este problema se produce porque el montón del escritorio está agotado.

Solución alternativa


Para evitar este problema, utilice uno de los métodos siguientes:
  • Utilice cuentas independientes para los agentes de duplicación que se crean para bases de datos diferentes.
    • Se puede especificar durante la creación de agentes de duplicación.
    • Tendrá que asegurarse de que todos los puntos de contacto de permisos son controlados.
    • El procedimiento para cambiar la configuración de seguridad para los agentes de duplicación ya creado se pueden encontrar en Ver y modificar la configuración de seguridad de replicación.
  • Utilice la configuración del registro para aumentar el tamaño del montón de escritorio.
    • Puede cambiar las siguientes entradas del registro:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\SessionViewSize (aumentar el valor de 48 a 64, por ejemplo)
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems\Windows (aumentar el tercer valor de SharedSection por 256 kilobytes, por ejemplo)
    • Tiene que aplicar los cambios en ambos nodos.
    • Tiene que guardar las claves del registro antes del cambio, y tendrá que reiniciar el servidor después de aplicar el cambio.
  • Cambiar a los agentes de duplicación ejecuten continuamente en ejecución de forma programada.
    • Esto hace que los agentes de duplicación se ejecutan sólo cuando sea necesario y no a permanecer inactivo constantemente (ya que esto desperdicia recursos).
    • Instrucciones sobre cómo cambiar la programación del agente de replicación están disponibles en especificar programaciones de sincronización.
  • Cambiar la ubicación del servidor donde se ejecutan los agentes de duplicación.
    • Puede evaluar los pares del publicador y el suscriptor y vea si puede cambiar algunos suscriptores de extracción que harán que el agente de distribución o de mezcla se ejecuta en el suscriptor, en lugar de en el publicador.
    • Esto ayuda a reducir el número de agentes simultáneos que tiene que ejecutar en el servidor.

Estado


Este comportamiento es por diseño.

Más información


Cada cuenta que se inicia el servicio Agente de SQL Server corresponde a un montón de escritorio no interactivo. Además, todos los agentes de duplicación que son administrados por el servicio Agente de SQL Server comparten el montón de escritorio de la cuenta.

Cómo examinar el uso del montón del escritorio

Puede utilizar la herramienta Monitor de montón de escritorio para examinar el uso del montón del escritorio. A continuación, puede decidir si tiene que aumentar o reducir el tamaño del montón del escritorio no interactivo. Normalmente, tendrá que aumentar el tamaño.

Importante: La herramienta Monitor de montón de escritorio no funciona en Windows Server 2008 o una versión posterior de Windows. Si utiliza una de estas versiones de Windows, puede utilizar LiveKD para obtener valores de montón de escritorio. Para obtener información acerca de cómo hacerlo, vaya a la sección siguiente.

Para utilizar la herramienta Monitor de montón de escritorio para examinar el uso del montón del escritorio, siga estos pasos:
  1. Descargue la herramienta Monitor de montón de escritorio.
    El siguiente archivo está disponible para su descarga desde el Centro de descarga de Microsoft:

    Download Descargue ahora el paquete DesktopHeapMonitor8_1_2925_0.exe.
  2. Instalar la herramienta Monitor de montón de escritorio. Para ello, siga estos pasos:
    1. Haga doble clic en el paquete para extraer los archivos.
    2. Haga clic en Inicio, haga clic en Ejecutar, escriba cmd y, a continuación, haga clic en Aceptar.
    3. En el símbolo del sistema, ejecute el comando siguiente:

      \Kktools\dheapmon8.1\plataforma de CD ExtractFolder

      Nota: ExtractFolder es un marcador de posición para la carpeta donde extraer los archivos. Plataforma es un marcador de posición para el nombre de la carpeta que corresponde a la plataforma específica.
    4. Ejecute el siguiente comando:

      dheapinst.exe -y srv * http://msdl.microsoft.com/download/symbols
  3. Cargar el controlador. Para ello, ejecute el siguiente comando:

    dheapmon.exe –l
  4. Ejecute la herramienta Monitor de montón de escritorio. Para ello, ejecute el siguiente comando:

    dheapmon – s
El resultado es similar a la siguiente:

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



En esta salida, el elemento de servicio-0 x 0-2461f$ \Default representa la cuenta que inicia el servicio Agente de SQL Server. Todos los agentes de duplicación se ejecutan bajo el contexto de seguridad de esta cuenta. Si ejecuta a varios agentes de duplicación, aumentará el uso del montón del escritorio. Si el uso del montón del escritorio es más del 98 por ciento o 99 por ciento, no se puede asignar ningún recurso de montón de escritorio. Por lo tanto, no puede iniciar a los nuevos agentes de duplicación.

En esta salida, el uso del montón del escritorio de la cuenta es 98,6%. En esta situación, aumentar el tamaño del montón del escritorio no interactivo aumentando el tercer valor de la SharedSectionparámetro. Después de aumentar el valor de la tercera, el problema se resuelve después de reiniciar el servidor. A continuación, puede utilizar la herramienta Monitor de montón de escritorio para examinar si el nuevo valor acomoda a todos los agentes de duplicación.

Nota: Para obtener más información acerca del parámetro SharedSection , haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
824422 se produce un comportamiento inesperado al ejecutar varios procesos en un equipo que está ejecutando SQL Server

Se recomienda que el uso del montón de escritorio permanezcan entre 80 y 90%. Si aumenta el tercer valor de la SharedSectionparámetro, se recomienda que aumente el valor por 512 cada vez.

Pasos para utilizar LiveKD para enumerar los valores del montón del escritorio

  1. Descargar Herramientas de depuración para Windows como parte del SDK de.
  2. Ejecute Sdksetup.exe y, a continuación, instalar herramientas de depuración para Windows.
  3. Descargar LiveKD.
  4. Cree una carpeta "C:\debugger".
  5. Copie todos los archivos desde la ubicación donde instaló las herramientas de depuración para C:\debugger. La ruta predeterminada es archivos de C:\Program (x86) \Windows Kits\8.0\Debuggers\x64.
  6. Extraer LiveKD a C:\debugger.
  7. Abra un símbolo del sistema que dispone de permisos elevados.
  8. Ejecute el comando siguiente desde el símbolo del sistema:
    livekd -y srv*http://msdl.microsoft.com/download/symbols 
  9. Obtendrá un resultado similar al siguiente:
    LiveKd v5.3 - ejecutar kd o windbg en un sistema activo
    Sysinternals - www.sysinternals.com
    Copyright (C) 2000-2012, Mark Russinovich y Ken Johnson

    Iniciando C:\Debugger\kd.exe:

    AMD64 de depurador versión 6.2.9200.20512 de Windows Microsoft (R)
    Copyright (c) Microsoft Corporation. Reservados todos los derechos.

    Archivo de volcado de carga [C:\Windows\livekd.dmp]
    Archivo de volcado completo del núcleo: El espacio de dirección total está disponible


    Comentario: 'LiveKD sistema activo vista'
    Ruta de búsqueda de símbolos está: srv * http://msdl.microsoft.com/download/symbols
    Ruta de acceso de búsqueda ejecutable es:
    Producto: Servidor, suite:
    Construido por:
    Nombre del equipo:
    Núcleo base =
    Tiempo de la sesión de depuración:
    Rendimiento del sistema:
    Cargando símbolos del núcleo
    ...............................................................
    ..............................................................
    Carga de símbolos de usuario
    ...................................................
    Lista de descarga del módulo de carga
    ...... No se pueden enumerar los módulos de descarga de modo de usuario, NTSTATUS 0xC0000147
  10. Ejecutar ! dskheap para recibir el resultado siguiente:
    kd> !dskheap

    ERROR: Cargar el módulo completado pero los símbolos no se podrían cargar para LiveKdD.SYS
    Montón de Winstation\Desktop (KB) utiliza tarifa (%)

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

    WinSta0\Default 20480% 0
    96 WinSta0\Disconnect 4%
    WinSta0\Winlogon 192% 2
    Service-0 x 0-3e7$ \Default 768 1%
    Service-0 x 0-3e4$ \Default 768 0%
    Service-0 x 0 -3e5$\Default 768 0%
    Service-0 x 0-10a75$ \Default 768 0%
    ------------------------------------------------------
    Escritorio total: (KB 23840-7 escritorios)
    Id. de sesión: 0
    ============================================================
  11. El inicio de sesión cifrada se descifra haciendo lo siguiente:
    1. "3e5$ Service-0 x 0 -3e5$\Default" -> 0x3e5 == 997.
    2. Wbemtest abierto desde el comando ejecutar en Windows.
    3. Conectar con el espacio de nombres "root\cimv2".
    4. Haga clic en consultay, a continuación, escriba Seleccionar * de win32_logonsession.
    5. Haga doble clic en la entrada que contiene 997.
    6. Seleccione UUIDen el editor de objetos y, a continuación, haga clic en asociadores para mostrar el nombre de inicio de sesión real. Consulte la siguiente captura de pantalla:

      This screen shot shows the previously mentioned steps.

Consideraciones acerca de si utilizar el protocolo de escritorio remoto

Si se conecta al servidor mediante el protocolo de escritorio remoto (RDP), asegúrese de que crear la sesión de consola mediante el modificador/Console . Si no utiliza el modificador /console , no puede ver el escritorio. Esto es porque la cuenta que inicia el servicio Agente de SQL Server está asociada a la sesión 0.

El controlador Win32k.sys asigna 48 MB de espacio de dirección de búfer para el montón de escritorio. Asegúrese de que no tiene muchos ordenadores de sobremesa que consuman el entero 48 MB de espacio de dirección de búfer.

Si el servidor no está configurado como un servidor terminal server, todos los montones de escritorio compartan los 48 MB de espacio de dirección de búfer. Esto limita el número de procesos de servicio que se pueden ejecutar en el servidor.

Si el servidor está configurado como un servidor terminal server, el controlador Win32k.sys asigna 20 MB de espacio de dirección de búfer para el montón de escritorio. El controlador Win32k.sys también asigna 16 MB de espacio de la sesión de su propio bloque paginado.

Diferencias entre un servidor terminal server y servicios de terminales Server en relación con el montón del escritorio

Un servidor terminal server y servicios de terminales Server son diferentes. Instalar el componente Terminal Server en Agregar o quitar programas. Después de instalar el componente de Terminal Server, el servidor se convierte en un servidor terminal server. Servicios de terminales Server es un servicio que existe en el complemento Servicios de Microsoft Management Console (MMC). Si quita el componente Terminal Server desde el servidor, los equipos cliente pueden conectarse al servidor mediante RDP. Por lo tanto, considere la posibilidad de quitar el componente de Terminal Server para obtener los 48 MB de espacio de dirección de búfer para el montón del escritorio.

Repercusión de trabajos en SQL Server 2005 en el montón del escritorio

En SQL Server 2005, puede tener diferentes trabajos que se ejecutan bajo cuentas de proxy diferente. Para cada cuenta de proxy, se asignará el montón de escritorio no interactivo para esa cuenta de proxy. Por ejemplo, el tercer valor del parámetro SharedSection es 512. Si utiliza una cuenta de proxy para iniciar un trabajo, se asignará el montón de escritorio de 512 KB, incluso si el propio trabajo utiliza sólo 10 KB del montón del escritorio.

Nota: Otros trabajos que utilizan la misma cuenta de proxy seguirán usando este montón de escritorio.

Esto puede resultar en muchos equipos de escritorio cuando se inicia el servicio Agente de SQL Server. Por lo tanto, podrán utilizarse los 48 MB de espacio de dirección de búfer hasta. Si utiliza la herramienta Monitor de montón de escritorio para examinar el uso del montón de escritorio, observará que un escritorio corresponde a una cuenta de proxy que se utiliza por un trabajo en ejecución. Recomendamos que utilice menos cuentas de proxy para evitar que alcance el límite de 48 MB.

Referencias


Para obtener más información acerca de los valores del parámetro SharedSection , haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
184802 User32.dll o Kernel32.dll se produce un error al inicializar