MSSQLSERVER_17890

Se aplica a: SQL Server

Detalles

Attribute Valor
Nombre del producto SQL Server
Id. de evento 17890
Origen de eventos MSSQLSERVER
Componente SQLEngine
Nombre simbólico SRV_WS_TRIMMED
Texto del mensaje Se ha paginado una parte significativa de la memoria del proceso de SQL Server. Esto puede provocar una degradación del rendimiento. Duración: %d segundos. Espacio de trabajo (KB): %I64d, confirmado (KB): %I64d, uso de memoria: %d%%.

Explicación

Es posible que encuentre el siguiente mensaje de error en el registro de errores de SQL Server o en el registro de eventos de aplicación de Windows.

Se ha paginado una parte significativa de la memoria del proceso de SQL Server. Esto puede provocar una degradación del rendimiento. Duración: 0 segundos. Conjunto de trabajo (KB): 3383250, confirmado (KB): 9112480, uso de memoria: 37 %.

También puede observar una degradación repentina del rendimiento con la ejecución de la consulta y todas las demás operaciones en SQL Server.

Causa

SQL Server supervisa la información relacionada con los distintos recuerdos sobre el proceso de SQL Server. En este caso, ha detectado que el espacio de trabajo del proceso es inferior al 50 % de la memoria de proceso confirmada. Como resultado, se imprime esta advertencia. Las causas normales de esta advertencia son las siguientes:

  • El sistema operativo pagina grandes partes de la memoria confirmada de SQL Server en el archivo de paginación.
  • Esto se puede deber a un aumento repentino de la memoria de otras aplicaciones o de las necesidades del sistema operativo.
  • Esto también puede ocurrir cuando determinados controladores de dispositivos solicitan asignaciones de memoria contiguas para sus necesidades.

Acción del usuario

Puede impedir que el sistema operativo Windows paginar la memoria del grupo de búferes del proceso de SQL Server bloqueando la memoria asignada para el grupo de búferes en memoria física. Para bloquear la memoria, asigne el derecho de usuario Bloquear páginas en memoria a la cuenta de usuario que se usa como cuenta de inicio del servicio SQL Server. Sin embargo, antes de implementar esta solución, revise las secciones Causas de la paginación de la memoria de SQL Server y Consideraciones importantes antes de asignar el permiso del usuario "Bloquear páginas en la memoria" para una instancia de SQL Server.

Nota:

El uso de Páginas de bloqueo en memoria garantiza que la memoria administrada por SQL Server no esté paginada. Sin embargo, el sistema operativo puede paginar las pilas de subprocesos, exe y cualquier imagen dll, memoria del montón, memoria CLR.

A partir de la actualización acumulativa 2 de SQL Server 2008 SP1, las ediciones SQL Server Standard y Enterprise pueden usar el derecho de usuario Bloquear páginas en memoria. Para más información sobre la compatibilidad con las páginas bloqueadas, consulte KB970070: Compatibilidad con páginas bloqueadas en sistemas SQL Server Standard Edition (64 bits).

Siga estos pasos para asignar el permiso del usuario Bloquear páginas en la memoria:

  1. Haga clic en Inicio y en Ejecutar, escriba gpedit.msc y, luego, haga clic en Aceptar.
  2. Observe que aparecerá el cuadro de diálogo Directiva de grupo.
  3. Expanda Configuración del equipo y, luego, expanda Configuración de Windows.
  4. Expanda Configuración de seguridady, a continuación, expanda Directivas locales.
  5. Haga clic en Asignación de permisos del usuario y, luego, haga doble clic enBloquear páginas en la memoria.
  6. En el cuadro de diálogo Configuración de la directiva de seguridad local, haga clic en Agregar usuario o Grupo.
  7. En el cuadro de diálogo Seleccionar usuarios o Grupos, agregue la cuenta que tiene permiso para ejecutar el archivo Sqlservr.exe y, luego, haga clic en Aceptar.
  8. Cierre el cuadro de diálogo Directiva de grupo.
  9. Reinicie el servicio SQL Server.

Después de asignar el derecho de usuario Bloquear páginas en memoria y reiniciar el servicio SQL Server, el sistema operativo Windows ya no pagina la memoria del grupo de búferes dentro del proceso de SQL Server. Sin embargo, el sistema operativo Windows todavía puede paginar la memoria del grupo que no es de búfer dentro del proceso de SQL Server.

Para validar que la instancia de SQL Server usa el derecho de usuario, asegúrese de que el mensaje siguiente está escrito en el registro de errores de SQL Server al iniciarse: "Uso de páginas bloqueadas para el grupo de búferes"

Este mensaje solo se aplica a SQL Server. Para obtener más información sobre este mensaje en errorLOG, visite lo siguiente: ¿Tengo que asignar las páginas de bloqueo para privilegios de memoria en el sistema local?

Cuando el sistema operativo Windows pagina la memoria del grupo que no es de búferes, es posible que el usuario siga encontrando problemas de rendimiento. Sin embargo, los mensajes de error que se mencionan en la sección "Explicación" no se registran en el registro de errores de SQL Server.

Causas de la paginación de la memoria de SQL Server

Hay tres categorías amplias de problemas que pueden provocar este problema:

  • Problemas relacionados con la aplicación: todas las aplicaciones juntas han agotado la memoria física disponible y el sistema operativo debe liberar cierta memoria para las nuevas solicitudes de aplicación para los recursos. Por lo general, el enfoque aquí es encontrar las aplicaciones que agotan la memoria y tomar las medidas necesarias para equilibrar la memoria entre ellas sin agotar la RAM.
  • Problemas del controlador de dispositivo: los controladores de dispositivo pueden provocar la paginación del conjunto de trabajo de todos los procesos si el controlador llama a una función de asignación de memoria incorrectamente.
  • Problemas del sistema operativo

A continuación, puede encontrar información sobre cada una de estas categorías

  • Problemas relacionados con la aplicación: las aplicaciones juntas pueden consumir toda la RAM en el sistema. Si se hacen nuevas solicitudes de memoria, el SO intenta cumplirlas y, si no hay memoria disponible, recortará el espacio de trabajo de las aplicaciones en ejecución para satisfacer las solicitudes de memoria. En tales casos, puede observar que el espacio de trabajo de la mayoría o de la totalidad de las aplicaciones no disminuye de manera considerable. Para controlar este comportamiento, puede supervisar el contador de Monitor de rendimiento siguiente para todas las aplicaciones del sistema:

    • Objeto de rendimiento: Process
    • Contador: Conjunto de trabajo

    Además, supervise el contador siguiente para correlacionar la cantidad de memoria física disponible en el sistema.

    • Objeto de rendimiento: Memoria
    • Contador: memoria disponible (MB)

    El comportamiento típico que se puede observar es la reducción de la memoria disponible cerca de 0 MB al mismo tiempo que disminuyen repentinamente los contadores de espacio de trabajo para la mayoría de (todos) los procesos del sistema. Si observa este comportamiento, puede que tenga que tomar medidas para reducir el uso de la memoria en el sistema, las que incluyen, por ejemplo, la reducción de la memoria máxima del servidor para SQL Server.

    También es posible que las aplicaciones usen demasiado la caché del sistema, lo que puede generar un gran crecimiento de esta caché. Para responder al crecimiento de la memoria caché del sistema, el sistema pagina el conjunto de trabajo del proceso de SQL Server o de otras aplicaciones. Si experimenta este problema, puede usar algunas funciones de administración de memoria en la aplicación. Estas funciones controlan el espacio de la caché del sistema que las operaciones de E/S de archivos pueden usar en la aplicación. Por ejemplo, puede usar la función SetSystemFileCacheSize y la función GetSystemFileCacheSize para controlar el espacio de la caché del sistema que pueden usar las operaciones de E/S de archivos.

    Puede usar el objeto Rendimiento de memoria para ver los valores de distintos contadores en este objeto para determinar si el espacio de trabajo de la caché del sistema usa demasiada memoria. Por ejemplo, puede ver los contadores Bytes de caché y Bytes residentes de caché del sistema. Para más información sobre este tema, consulte:

    Puede descargar e implementar el "Servicio de caché dinámica de Microsoft Windows" para controlar la memoria que consume la caché del sistema.

  • Problemas del controlador de dispositivo: si un controlador de dispositivo usa la MmAllocateContiguousMemory función y establece el valor del parámetro HighestAcceptableAddress en menos de 4 gigabytes (GB), el sistema operativo Windows puede paginar el conjunto de trabajo de los procesos en el sistema, incluido el proceso de SQL Server. Para resolver este problema, póngase en contacto con el proveedor del controlador del dispositivo para obtener las actualizaciones del controlador.

    Cuando un controlador de dispositivo intenta asignar memoria, el sistema operativo Windows puede paginar el espacio de trabajo de otras aplicaciones. Esta revisión de Windows le permite usar el seguimiento de eventos para buscar el controlador de dispositivo que causa el problema. Para más información sobre el controlador específico que provoca el comportamiento de recorte del espacio de trabajo, consulte el artículo sobre la identificación de los controladores que asignan la memoria contigua.

  • Problemas del sistema operativo: para resolver los problemas conocidos que hacen que el sistema operativo Windows pagina el conjunto de trabajo del proceso de SQL Server, aplique las revisiones que se describen en los siguientes artículos de Microsoft Knowledge Base.

    Nota:

    Las revisiones son acumulativas. Una versión posterior de una revisión contiene las versiones anteriores de dicha revisión.

Consideraciones importantes de asignar el permiso del usuario "Bloquear páginas en la memoria"

Debe tener en cuenta ciertas consideraciones adicionales antes de asignar el permiso del usuario Bloquear páginas en la memoria. Si asigna este permiso del usuario en sistemas que no están configurados correctamente, el sistema puede volverse inestable o experimentar una disminución del rendimiento de todo el sistema. Además, se puede registrar el id. de evento 333 en el registro de eventos.

Si se comunica con el Servicio de soporte al cliente de Microsoft (CSS) para estos problemas, es posible que los ingenieros de CSS le pidan que revoque este derecho de usuario para la cuenta de usuario que se usa como cuenta de inicio del servicio SQL Server. Este paso puede ser necesario para recopilar datos de rendimiento importantes que los ingenieros de CSS pueden usar para la configuración necesaria de las distintas opciones de SQL Server y para otras aplicaciones que se ejecutan en el sistema. Después de que los ingenieros de CSS recopilen los datos de rendimiento, puede asignar el derecho de usuario Bloquear páginas en memoria a la cuenta de inicio del servicio SQL Server.

Antes de asignar el permiso del usuario Bloquear páginas en la memoria, asegúrese de capturar un registro del Monitor de rendimiento para determinar los requisitos de memoria de distintas aplicaciones y servicios instalados en el sistema. Estas aplicaciones también incluyen SQL Server. Para determinar los requisitos de memoria, recopile la información de línea de base siguiente:

  • Asegúrese de establecer correctamente las opciones Memoria máxima del servidor y Memoria mínima del servidor. Estas opciones solo reflejan el requisito de memoria del grupo de búferes del proceso de SQL Server. Estas opciones no incluyen la memoria asignada para otros componentes dentro del proceso de SQL Server. Estos componentes incluyen los siguientes:

    • Subprocesos de trabajo de SQL Server
    • Varios archivos DLL y componentes que el proceso de SQL Server carga dentro del espacio de direcciones del proceso de SQL Server
    • Operaciones de copia de seguridad y restauración.
  • Los archivos DLL y componentes incluyen varios proveedores OLE DB, procedimientos almacenados extendidos, objetos COM de Microsoft que se usan para el procedimiento almacenado sp_OACreate, servidores vinculados y CLR de SQL Server. La memoria asignada para estos componentes se encuentra en la región del grupo que no es de búfer del espacio de direcciones del proceso de SQL Server. Para determinar idealmente la cantidad máxima de memoria que puede usar todo el proceso de SQL Server, debe restar la memoria asignada para los componentes que no usan el grupo de búferes de la memoria total que desea que use el proceso de SQL Server. Después, puede usar el valor restante para establecer la opción de memoria máxima del servidor. Antes de establecer la opción memoria máxima del servidor y la opción memoria mínima del servidor, debe revisar cuidadosamente el tema "Establecer las opciones de memoria manualmente" en los Libros en pantalla de SQL Server.

  • Determine el requisito de memoria de otras aplicaciones y de los componentes del sistema operativo Windows. Las aplicaciones pueden incluir otros componentes de SQL Server, por ejemplo, Agente SQL Server, agentes de Replicación de SQL Server, SQL Server Reporting Services, SQL Server Analysis Services, SQL Server Integration Services y búsqueda de texto completo de SQL Server. Las aplicaciones que realizan operaciones de copia de seguridad y operaciones de copia de archivos pueden grandes cantidades de memoria. Considere operaciones como la copia masiva y el Agente de instantáneas que generan E/S de archivos. Debe tener en cuenta los requisitos de memoria de todas estas aplicaciones al determinar el valor de las opciones Memoria máxima del servidor y Memoria mínima del servidor. Puede usar el contador Bytes privados y el contador Espacio de trabajo en el objeto Proceso de cada proceso con el fin de determinar los requisitos de memoria de un proceso específico.

  • De manera predeterminada, el permiso del usuario Bloquear páginas en la memoria ya se ha asignado a la cuenta integrada del sistema local. Para obtener más información, visite el siguiente sitio web de Microsoft: ¿Tengo que asignar las páginas de bloqueo en privilegios de memoria para el sistema local?

  • Si usa una cuenta de usuario de Windows globalmente para todos los procesos de SQL Server de un dominio, determine los derechos de usuario que se asignan mediante una configuración de directiva de grupo. Un proceso de SQL Server de 32 bits puede usar esta cuenta como cuenta de inicio. Sin embargo, esta cuenta requiere el permiso del usuario Bloquear páginas en la memoria para habilitar la característica Address Windowing Extensions (AWE). Para obtener más información, vea el tema "Proporcionar la cantidad máxima de memoria a SQL Server" en los Libros en pantalla de SQL Server.

  • Antes de configurar la opción memoria máxima del servidor y la opción memoria mínima del servidor para varias instancias de SQL Server, tenga en cuenta los requisitos de memoria del grupo de no búferes para cada instancia de SQL Server. A continuación, configure estas opciones para cada instancia de SQL Server.

Lo ideal es recopilar esta información de línea de base durante las cargas máximas. Por lo tanto, puede determinar los requisitos de memoria para diferentes aplicaciones y componentes a fin de admitir la carga máxima. Los requisitos de memoria varían de un sistema a otro, en función de las actividades y las aplicaciones que se ejecutan en el sistema. Puede consultar la información que se proporciona en la vista de administración dinámica sys.dm_os_process_memory para comprender si el sistema encuentra condiciones de memoria insuficiente. Para más información, consulte sys.dm_os_process_memory (Transact-SQL).

Mejoras agregadas en Windows Server 2008 y R2

Windows Server 2008 y Windows Server 2008 R2 mejoran el mecanismo de asignación de la memoria contigua. Esta mejora permite a Windows Server 2008 y a Windows Server 2008 R2 reducir hasta cierto punto los efectos de la paginación del espacio de trabajo de las aplicaciones cuando llegan solicitudes de memoria nuevas.

A continuación se explican las mejoras de las notas del producto de Microsoft "Avances en la administración de memoria de Windows":

En Windows Server 2008, la asignación de memoria contigua física mejoró considerablemente. Es mucho más probable que las solicitudes de asignación de memoria contigua se realicen correctamente, ya que ahora el administrador de memoria reemplaza dinámicamente las páginas, por lo general sin recortar el espacio de trabajo ni realizar operaciones de E/S. Además, muchos más tipos de páginas, como las pilas de kernel y las páginas de metadatos del sistema de archivos, entre otras, ahora son candidatas para el reemplazo. Por consiguiente, hay más memoria contigua disponible con carácter general en un momento determinado. Además, se reduce en gran medida el costo de obtener tales asignaciones.

Para más información, consulte el artículo sobre los problemas con el recorte del espacio de trabajo de SQL Server.

Los productos de otros fabricantes que se mencionan en este artículo han sido creados por compañías independientes de Microsoft. Microsoft no ofrece ninguna garantía, ya sea implícita o de otro tipo, sobre la confiabilidad o el rendimiento de dichos productos.