Leer en inglés

Compartir a través de


Algunos agentes de replicación de SQL Server no se pueden ejecutar al configurar muchos agentes de replicación para que se ejecuten en un servidor.

Este artículo le ayuda a solucionar el problema en el que algunos agentes de replicación no se pueden ejecutar al configurar muchos agentes de replicación de SQL Server para que se ejecuten en un servidor.

Versión original del producto: SQL Server 2014, SQL Server 2012
Número de KB original: 949296

Síntomas

Considere el caso siguiente:

  • Puede configurar muchos agentes de replicación de Microsoft SQL Server 2014 o SQL Server 2012 para que se ejecuten en un servidor. Por ejemplo, configurará más de 200 agentes de replicación para que se ejecuten en un servidor.

En este escenario, algunos agentes de replicación no se pueden ejecutar. Además, el siguiente mensaje de error se registra en el registro del sistema:

Error de aplicación: la aplicación no se pudo inicializar correctamente (0xc0000142).
Haga clic en Aceptar para finalizar la aplicación.

Causa

Este problema se produce porque el montón de escritorio se usa.

Solución alternativa

Para solucionar este problema, use uno de los métodos siguientes:

Uso de cuentas independientes para los agentes de replicación creados para diferentes bases de datos

Puede especificar esto mientras crea agentes de replicación. Debe asegurarse de que todos los puntos táctiles de permisos se encargan. El procedimiento para cambiar la configuración de seguridad de los agentes de replicación ya creados se puede encontrar en Ver y modificar la configuración de seguridad de replicación.

Uso de 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 (por ejemplo, aumente el valor de 48 a 64).

  • HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems\Windows (por ejemplo, aumente el tercer valor de SharedSection en 256 kilobytes).

Tiene que aplicar los cambios en ambos nodos. Debe guardar las claves del Registro antes del cambio y debe reiniciar el servidor después de aplicar el cambio.

Cambiar los agentes de replicación de ejecutarse continuamente a ejecutarse de forma programada

Esto garantiza que los agentes de replicación se ejecuten solo cuando sea necesario y que no permanezcan inactivos constantemente (ya que esto desperdicia recursos).

Las 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 en la que se ejecutan los agentes de replicación

Puede evaluar los pares publicador-suscriptor y ver si puede cambiar algunos suscriptores para extraer que harán que el agente de distribución o mezcla se ejecute en el suscriptor en lugar de en el publicador. Esto ayuda a reducir el número de agentes simultáneos que se deben ejecutar en el servidor.

Estado

Este comportamiento es por diseño.

Examen del uso del montón de escritorio

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

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

Importante

La herramienta Monitor de montón de escritorio no funciona en Windows Server 2008 ni en una versión posterior de Windows. Si usa una de estas versiones de Windows, puede usar LiveKD para obtener los valores del montón de escritorio. Para obtener información sobre cómo hacerlo, vaya a la sección siguiente.

Para usar la herramienta Monitor de montón de escritorio para examinar el uso del montón de escritorio, siga estos pasos:

  1. Descargue la herramienta Monitor de montón de escritorio.

  2. Instale 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 Inicioy en Ejecutar, escriba cmdy, a continuación, haga clic en Aceptar.

    3. Escriba el siguiente comando en el símbolo del sistema:

      Consola
      CD ExtractFolder\kktools\dheapmon8.1\Platform
      

      Nota

      ExtractFolder es un marcador de posición para la carpeta donde se extraen los archivos. Platform es un marcador de posición para el nombre de la carpeta que corresponde a la plataforma específica.

    4. Ejecute el siguiente comando:

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

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

    Consola
    dheapmon.exe -s
    

El resultado debería ser similar al siguiente:

Consola
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 Service-0x0-2461f$\Default elemento representa la cuenta que inicia el servicio Agente SQL Server. Todos los agentes de replicación se ejecutan en el contexto de seguridad de esta cuenta. Si ejecuta más agentes de replicación, aumentará el uso del montón de escritorio. Si el uso del montón de escritorio es superior al 98 % o al 99 %, no se puede asignar ningún recurso de montón de escritorio. Por lo tanto, no puede iniciar ningún nuevo agente de replicación.

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

Se recomienda que el uso del montón de escritorio permanezca entre el 80 % y el 90 %. Si aumenta el tercer valor del SharedSection parámetro, se recomienda aumentar el valor en 512 cada vez.

Pasos para usar LiveKD para enumerar los valores del montón de escritorio

  1. Descargue Herramientas de depuración para Windows como parte del SDK.

  2. Ejecute Sdksetup.exey, a continuación, instale Herramientas de depuración para Windows.

  3. Descargue LiveKD.

  4. Cree una C:\debugger carpeta.

  5. Copie todos los archivos desde la ubicación donde instaló las herramientas de depuración en C:\debugger. La ruta de acceso predeterminada es C:\Program Files (x86)\Windows Kits\8.0\Debuggers\x64.

  6. Extraiga LiveKD en C:\debugger.

  7. Abra un símbolo del sistema que tenga permisos elevados.

  8. Ejecute el siguiente comando desde el símbolo del sistema:

    Consola
    livekd -y srv*http://msdl.microsoft.com/download/symbols
    
  9. Debe recibir una salida similar a la siguiente:

    Consola
    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. Ejecute !dskheap para recibir la salida siguiente:

    Consola
    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. Descodifique el inicio de sesión cifrado haciendo lo siguiente:

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

    2. Abra wbemtest desde el comando Ejecutar en Windows.

    3. Conéctese al root\cimv2 espacio de nombres.

    4. Haga clic en Consultay, a continuación, escriba select * from win32_logonsession.

    5. Haga doble clic en la entrada que contiene 997.

    6. Seleccione UUID en el editor de objetos y, a continuación, haga clic en Asociadores para mostrar el nombre de inicio de sesión real. Consulte la captura de pantalla siguiente:

      Captura de pantalla de los pasos para buscar el nombre de inicio de sesión real.

Consideraciones si usa el protocolo de escritorio remoto

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

El controlador Win32k.sys asigna 48 MB de espacio de direcciones de búfer para el montón de escritorio. Asegúrese de que no tiene muchos escritorios que usen todo el espacio de direcciones del búfer de 48 MB.

Si el servidor no está configurado como un servidor de terminal, todos los montones de escritorio comparten los 48 MB del espacio de direcciones del 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 de terminal, el controlador de Win32k.sys asigna 20 MB de espacio de direcciones de búfer para el montón de escritorio. El controlador Win32k.sys también asigna 16 MB de espacio de sesión para su propio grupo paginado.

Diferencias entre un servidor de terminal y los servicios de terminal con respecto al montón de escritorio

Un servidor de terminal y servicios de terminal son diferentes. El componente de Terminal Server se instala en Agregar o quitar programas. Después de instalar el componente de Terminal Server, el servidor se convierte en un servidor de terminal. Los servicios de terminal son un servicio que existe en el complemento Servicios de Microsoft Management Console (MMC). Si quita el componente de Terminal Server del servidor, los equipos cliente todavía 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 direcciones del búfer para el montón de escritorio.

Cómo afectan los trabajos de SQL Server 2005 al montón de escritorio

En SQL Server 2005, es posible que tenga trabajos diferentes que se ejecuten en distintas cuentas de proxy. 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 usa una cuenta de proxy para iniciar un trabajo, se asignará el montón de escritorio de 512 KB, aunque el propio trabajo use solo 10 KB del montón de escritorio.

Nota

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

Esto puede dar lugar a muchos escritorios cuando se inicia el servicio Agente SQL Server. Por lo tanto, se pueden usar los 48 MB del espacio de direcciones del búfer. Si usa 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 usa un trabajo en ejecución. Se recomienda usar menos cuentas de proxy para evitar alcanzar el límite de 48 MB.

Referencias

Para obtener más información sobre los valores del SharedSection parámetro, vea User32.dll o Kernel32.dll no se puede inicializar.