Use el comando DBCC MEMORYSTATUS para supervisar el uso de memoria en SQL Server

En este artículo se describe cómo usar el DBCC MEMORYSTATUS comando para supervisar el uso de memoria.

Versión del producto original: SQL Server
Número de KB original: 907877

Introducción

El DBCC MEMORYSTATUS comando proporciona una instantánea del estado de memoria actual de Microsoft SQL Server y del sistema operativo. Proporciona una de las salidas más detalladas de distribución y uso de memoria en SQL Server. Puede usar la salida para solucionar problemas de consumo de memoria en SQL Server o para solucionar errores específicos de memoria insuficiente. Muchos errores de memoria insuficiente generan automáticamente esta salida en el registro de errores. Si experimenta un error relacionado con una condición de memoria baja, puede ejecutar el DBCC MEMORYSTATUS comando y proporcionar la salida cuando se pone en contacto con Soporte técnico de Microsoft.

La salida del comando incluye secciones para la DBCC MEMORYSTATUS administración de memoria, el uso de memoria, la información de memoria agregada, la información del grupo de búferes y la información de caché de procedimientos. También describe la salida de objetos de memoria globales, objetos de memoria de consulta, optimización y agentes de memoria.

Nota:

Monitor de rendimiento (PerfMon) y el Administrador de tareas no tienen en cuenta el uso de memoria completa si la opción Páginas bloqueadas en memoria está habilitada. No hay contadores de rendimiento que muestren el uso de memoria de la API extensiones de ventana de direcciones (AWE).

Importante

El DBCC MEMORYSTATUS comando está diseñado para ser una herramienta de diagnóstico para Soporte técnico de Microsoft. El formato de la salida y el nivel de detalle que se proporciona están sujetos a cambios entre service packs y versiones de producto. La funcionalidad que proporciona el DBCC MEMORYSTATUS comando puede reemplazarse por un mecanismo diferente en versiones posteriores del producto. Por lo tanto, en versiones posteriores del producto, es posible que este comando ya no funcione. No se proporcionarán advertencias adicionales antes de cambiar o quitar este comando. Por lo tanto, las aplicaciones que usan este comando pueden interrumpirse sin advertencia.

La salida del DBCC MEMORYSTATUS comando ha cambiado con respecto a las versiones anteriores de SQL Server. Actualmente, contiene varias tablas que no estaban disponibles en las versiones anteriores del producto.

Uso de DBCC MEMORYSTATUS

DBCC MEMORYSTATUSse usa normalmente para investigar los problemas de memoria baja que notifica SQL Server. Puede producirse poca memoria si hay presión de memoria externa desde fuera del proceso de SQL Server o presión interna que se origina dentro del proceso. La presión interna puede deberse a la SQL Server motor de base de datos o a otros componentes que se ejecutan dentro del proceso (como servidores vinculados, XP, SQLCLR, protección contra intrusiones o software antivirus). Para obtener más información sobre cómo solucionar problemas de presión de memoria, consulte Solución de problemas de memoria insuficiente o problemas de memoria insuficiente en SQL Server.

Estos son los pasos generales para usar el comando e interpretar sus resultados. Es posible que los escenarios específicos requieran un enfoque de la salida un poco diferente, pero el enfoque general se describe aquí.

  1. Ejecute el comando DBCC MEMORYSTATUS.
  2. Use las secciones Recuentos de procesos/sistemas y Administrador de memoria para establecer si hay presión de memoria externa (por ejemplo, el equipo tiene poca memoria física o virtual, o el SQL Server conjunto de trabajo está paginado). Además, use estas secciones para determinar cuánta memoria ha asignado el motor de base de datos SQL Server en comparación con la memoria general del sistema.
  3. Si establece que hay presión de memoria externa, intente reducir el uso de memoria por otras aplicaciones y por el sistema operativo, o agregue más RAM.
  4. Si establece que el motor de SQL Server usa la mayor parte de la memoria (presión de memoria interna), puede usar las secciones restantes de DBCC MEMORYSTATUS para identificar qué componentes (almacén de memoria, Almacén de caché, UserStore o Almacén de objetos) son los que más contribuyen a este uso de memoria.
  5. Examine cada componente: MEMORYCLEARK, CACHESTORE, USERSTOREy OBJECTSTORE. Examine su valor Pages Allocated (Páginas asignadas) para determinar cuánta memoria consume ese componente dentro de SQL Server. Para obtener una breve descripción de la mayoría de los componentes de memoria del motor de base de datos, consulte la tabla Tipos del empleado de memoria .
    1. En raras ocasiones, la asignación es una asignación virtual directa en lugar de pasar por el administrador de memoria SQL Server. En esos casos, examine el valor De confirmación de máquina virtual en el componente específico en lugar de Páginas asignadas.
    2. Si el equipo usa NUMA, algunos componentes de memoria se desglosan por nodo. Por ejemplo, puede observar OBJECTSTORE_LOCK_MANAGER (node 0), OBJECTSTORE_LOCK_MANAGER (node 1), OBJECTSTORE_LOCK_MANAGER (node 2)y así sucesivamente y, por último, observar un valor sumado de cada nodo en OBJECTSTORE_LOCK_MANAGER (Total). El mejor lugar para empezar está en la sección que informa del valor total y, a continuación, examina el desglose, según sea necesario. Para obtener más información, consulte Uso de memoria con nodos NUMA.
  6. Algunas secciones de DBCC MEMORYSTATUS proporcionan información detallada y especializada sobre asignadores de memoria concretos. Puede usar esas secciones para comprender detalles adicionales y ver un desglose adicional de las asignaciones dentro de un empleado de memoria. Algunos ejemplos de estas secciones son El grupo de búferes (caché de datos e índices), la caché de procedimientos o plan, los objetos de memoria de consulta (concesiones de memoria), la cola de optimización y las puertas de enlace pequeñas y medianas y grandes (memoria del optimizador). Si ya sabe que un componente determinado de la memoria de SQL Server es el origen de la presión de memoria, es posible que prefiera ir directamente a esa sección específica. Por ejemplo, si ha establecido de alguna otra manera que haya un uso elevado de concesiones de memoria que provoque errores de memoria, puede revisar la sección Objetos de memoria de consulta .

En el resto de este artículo se describen algunos de los contadores útiles de la DBCC MEMORYSTATUS salida que pueden permitirle diagnosticar problemas de memoria de forma más eficaz.

Recuentos de procesos o sistemas

En esta sección se proporciona una salida de ejemplo en formato tabular y se describen sus valores.

Process/System Counts                Value
------------------------------------ ------------
Available Physical Memory            5060247552
Available Virtual Memory             140710048014336
Available Paging File                7066804224
Working Set                          430026752
Percent of Committed Memory in WS    100
Page Faults                          151138
System physical memory high          1
System physical memory low           0
Process physical memory low          0
Process virtual memory low           0

En la lista siguiente se describen los valores y sus descripciones:

  • Memoria física disponible: este valor muestra la cantidad total de memoria libre en el equipo. En el ejemplo, la memoria libre es de 5.060.247.552 bytes.
  • Memoria virtual disponible: este valor muestra la cantidad total de memoria virtual libre para SQL Server proceso es de 140 710 048 014 336 bytes (128 TB). Para obtener más información, vea Límites de espacio de direcciones y memoria.
  • Archivo de paginación disponible: este valor muestra el espacio libre del archivo de paginación. En el ejemplo, el valor es de 7.066.804.224 bytes.
  • Conjunto de trabajo: este valor muestra la cantidad total de memoria virtual que el proceso de SQL Server tiene en RAM (no está paginado) es de 430 026 752 bytes.
  • Porcentaje de memoria confirmada en WS: este valor muestra el porcentaje de SQL Server memoria virtual asignada reside en ram (o es un conjunto de trabajo). El valor del 100 % muestra que toda la memoria confirmada se almacena en RAM y el 0 por ciento se pagina hacia fuera.
  • Errores de página: este valor muestra la cantidad total de errores de página rígida y temporal para el SQL Server. En el ejemplo, el valor es 151 138.

Los cuatro valores restantes son binarios o booleanos.

  • El valor alto de memoria física del sistema de 1 indica que SQL Server considera que la memoria física disponible en el equipo es alta. Es por eso que el valor de Memoria física del sistema baja es 0, lo que significa que no hay memoria baja. Se aplica una lógica similar a Procesar memoria física baja y Procesar memoria virtual baja, donde 0 significa que es false y 1 significa que es true. En este ejemplo, ambos valores son 0, lo que significa que hay mucha memoria física y virtual para el proceso de SQL Server.

Administrador de memoria

En esta sección se proporciona una salida de ejemplo del Administrador de memoria que muestra el consumo total de memoria por SQL Server.

Memory Manager             KB
-------------------------- --------------------
VM Reserved                36228032
VM Committed               326188
Locked Pages Allocated     0
Large Pages Allocated      0
Emergency Memory           1024
Emergency Memory In Use    16
Target Committed           14210416
Current Committed          326192
Pages Allocated            161904
Pages Reserved             0
Pages Free                 5056
Pages In Use               286928
Page Alloc Potential       15650992
NUMA Growth Phase          0
Last OOM Factor            0
Last OS Error              0

En la lista siguiente se describen los valores de la salida y sus descripciones:

  • Máquina virtual reservada: este valor muestra la cantidad total de espacio de direcciones virtuales (VAS) o memoria virtual (VM) que SQL Server ha reservado. La reserva de memoria virtual no usa realmente memoria física; simplemente significa que las direcciones virtuales se reservan de dentro del VAS grande. Para obtener más información, vea VirtualAlloc(), MEM_RESERVE.

  • Máquina virtual confirmada: este valor muestra la cantidad total de memoria virtual (VM) que SQL Server ha confirmado (en KB). Esto significa que la memoria usada por el proceso está respaldada por memoria física o con menos frecuencia por el archivo de página. Las direcciones de memoria reservadas anteriormente ahora están respaldadas por un almacenamiento físico; es decir, se asignan. Si páginas bloqueadas en memoria está habilitada, SQL Server usa un método alternativo para asignar memoria, api de AWE y la mayoría de la memoria no se refleja en este contador. Consulte [Páginas bloqueadas asignadas](#Locked Páginas asignadas) para esas asignaciones. Para obtener más información, vea VirtualAlloc(), MEM_COMMIT.

  • Páginas asignadas: este valor muestra el número total de páginas de memoria asignadas por SQL Server motor de base de datos.

  • Páginas bloqueadas asignadas: este valor representa la cantidad de memoria, en kilobytes (KB), que SQL Server ha asignado y bloqueado en la RAM física mediante la API de AWE. Indica cuánta memoria SQL Server está usando activamente y ha solicitado que se conserve en memoria para optimizar el rendimiento. Al bloquear páginas en memoria, SQL Server garantiza que las páginas críticas de la base de datos estén disponibles y no se intercambien en el disco. Para obtener más información, vea Address Windows Extensions (AWE) memory (Address Windows Extensions (AWE) memory(Dirección de la memoria de extensiones de Windows [AWE]). Un valor de cero indica que la característica "páginas bloqueadas en memoria" está deshabilitada actualmente y SQL Server usa memoria virtual en su lugar. En tal caso, el valor confirmado de la máquina virtual representaría la memoria asignada a SQL Server.

  • Páginas grandes asignadas: este valor representa la cantidad de memoria asignada por SQL Server mediante páginas grandes. Páginas grandes es una característica de administración de memoria proporcionada por el sistema operativo. En lugar de usar el tamaño de página estándar (normalmente 4 KB), esta característica usa un tamaño de página mayor, como 2 MB o 4 MB. Un valor de cero indica que la característica no está habilitada. Para obtener más información, consulte Virtual Alloc(), MEM_LARGE_PAGES.

  • Destino confirmado: este valor indica la cantidad de memoria de destino que SQL Server pretende haber confirmado, una cantidad ideal de memoria SQL Server podría consumir, en función de la carga de trabajo reciente.

  • Confirmación actual: este valor indica la cantidad de memoria del sistema operativo (en KB) que el administrador de memoria SQL Server ha confirmado actualmente (asignado en el almacén físico). Este valor incluye "páginas bloqueadas en memoria" (API de AWE) o memoria virtual. Por lo tanto, este valor está cerca o igual que la máquina virtual confirmada o las páginas bloqueadas asignadas. Tenga en cuenta que, cuando SQL Server usa la API de AWE, el Administrador de memoria virtual del sistema operativo sigue asignando memoria y se reflejará como VM confirmada.

  • Fase de crecimiento NUMA: este valor indica si SQL Server está actualmente en una fase de crecimiento NUMA. Para obtener más información sobre esta rampa inicial de memoria cuando existen nodos NUMA en la máquina, vea How It Works: SQL Server (NUMA Local, Foreign and Away Memory Blocks).

  • Último error del sistema operativo: este valor muestra el último error del sistema operativo que se produjo cuando se produjo una presión de memoria en el sistema. SQL Server registra ese error del sistema operativo y lo muestra en la salida. Para obtener una lista completa de errores del sistema operativo, consulte Códigos de error del sistema.

Uso de memoria con nodos NUMA

La sección Administrador de memoria va seguida de un resumen del uso de memoria para cada nodo de memoria. En un sistema habilitado para el acceso a memoria no uniforme (NUMA), hay una entrada de nodo de memoria correspondiente para cada nodo NUMA de hardware. En un sistema SMP, hay una entrada de nodo de memoria única. El mismo patrón se aplica a otras secciones de memoria.

Memory node Id = 0      KB
----------------------- -----------
VM Reserved             21289792
VM Committed            272808
Locked Pages Allocated  0
Pages Allocated         168904
Pages Free              3040
Target Committed        6664712
Current Committed       272808
Foreign Committed       0
Away Committed          0
Taken Away Committed    0

Nota:

  • Es Memory node Id posible que el valor no se corresponda con el identificador del nodo de hardware.
  • Estos valores muestran la memoria que asignan los subprocesos que se ejecutan en este nodo NUMA. Estos valores no son la memoria local del nodo NUMA.
  • Las sumas de los valores reservados de máquina virtual y los valores confirmados de máquina virtual en todos los nodos de memoria serán ligeramente inferiores a los valores correspondientes que se notifican en la tabla Administrador de memoria.
  • El nodo NUMA 64 (nodo 64) está reservado para DAC y rara vez es de interés en la investigación de memoria porque esta conexión usa recursos de memoria limitados. Para obtener más información sobre la conexión de administrador dedicada (DAC), consulte Conexión de diagnóstico para administradores de bases de datos.

En la lista siguiente se describen los valores de la tabla de salida y sus descripciones:

  • Máquina virtual reservada: muestra el espacio de direcciones virtuales (VAS) reservado por los subprocesos que se ejecutan en este nodo.
  • Máquina virtual confirmada: muestra el VAS que confirman los subprocesos que se ejecutan en este nodo.

Agregar memoria

La tabla siguiente contiene información de memoria agregada para cada tipo de empleado y nodo NUMA. Para un sistema habilitado para NUMA, es posible que vea una salida similar a la siguiente:

MEMORYCLERK_SQLGENERAL (node 0) KB
------------------------------  --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5416

MEMORYCLERK_SQLGENERAL (node 1) KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 136

MEMORYCLERK_SQLGENERAL (Total)  KB
------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
Locked Pages Allocated          0
SM Reserved                     0
SM Commited                     0
Pages Allocated                 5552

El valor de Pages Allocated muestra el número total de páginas de memoria asignadas por un componente específico (almacén de memoria, almacén de usuarios, almacén de objetos o almacén de caché).

Nota:

Estos identificadores de nodo corresponden a la configuración del nodo NUMA del equipo que ejecuta SQL Server. Los identificadores de nodo incluyen posibles nodos NUMA de software que se definen sobre nodos NUMA de hardware o sobre un sistema SMP. Para buscar la asignación entre los identificadores de nodo y las CPU de cada nodo, consulte Id. de evento de información 17152. Este evento se registra en el registro de la aplicación en Visor de eventos al iniciar SQL Server.

Para un sistema SMP, solo verá una tabla para cada tipo de empleado, sin contar el nodo = 64 usado por DAC. Esta tabla es similar al ejemplo siguiente.

MEMORYCLERK_SQLGENERAL (Total)     KB
--------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
Pages Allocated                    2928

Otra información de estas tablas es sobre la memoria compartida:

  • SM Reservado: muestra el VAS reservado por todos los empleados de este tipo que usan la API de archivos asignados a memoria. Esta API también se conoce como memoria compartida.
  • SM Confirmado: muestra el VAS que confirman todos los empleados de este tipo que usan la API de archivos asignados a memoria.

Como método alternativo, puede obtener información de resumen para cada tipo de empleado para todos los nodos de memoria mediante la sys.dm_os_memory_clerks vista de administración dinámica (DMV). Para ello, ejecute la consulta siguiente:

SELECT
  TYPE,
  SUM(virtual_memory_reserved_kb) AS [VM Reserved],
  SUM(virtual_memory_committed_kb) AS [VM Committed],
  SUM(awe_allocated_kb) AS [AWE Allocated],
  SUM(shared_memory_reserved_kb) AS [SM Reserved],
  SUM(shared_memory_committed_kb) AS [SM Committed],
  -- SUM(multi_pages_kb) AS [MultiPage Allocator],          /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  -- SUM(single_pages_kb) AS [SinlgePage Allocator],        /*Applies to: SQL Server 2008   (10.0.x) through SQL Server 2008 R2 (10.50.x).*/
  SUM(pages_kb) AS [Page Allocated]                      /*Applies to: SQL Server 2012 (11.  x) and later.*/
FROM sys.dm_os_memory_clerks
GROUP BY TYPE

Detalles del grupo de búferes

Se trata de una sección importante que proporciona un desglose de los diferentes estados de datos y páginas de índice dentro del grupo de búferes, también conocido como caché de datos. En la tabla de salida siguiente se enumeran los detalles sobre el grupo de búferes y otra información.

Buffer Pool                                       Pages
------------------------------------------------- ---------
Database                                          5404
Simulated                                         0
Target                                            16384000
Dirty                                             298
In IO                                             0
Latched                                           0
IO error                                          125
In Internal Pool                                  0
Page Life Expectancy                              3965

En la lista siguiente se describen los valores de la salida y sus descripciones:

  • Base de datos: muestra el número de búferes (páginas) que tienen contenido de base de datos (páginas de datos e índices).
  • Destino: muestra el tamaño de destino del grupo de búferes (recuento de búferes). Consulte Memoria confirmada de destino en las secciones anteriores de este artículo.
  • Sucio: muestra las páginas que tienen contenido de base de datos y se han modificado. Estos búferes contienen cambios que el proceso de punto de control normalmente debe vaciar en el disco.
  • En E/S: muestra los búferes que están esperando una operación de E/S pendiente. Esto significa que el contenido de estas páginas se escribe en o se lee desde el almacenamiento.
  • Bloqueo temporal: muestra los búferes con bloqueo temporal. Un búfer se bloqueo cuando un subproceso lee o modifica el contenido de una página. Un búfer también se bloquea cuando la página se lee desde el disco o se escribe en el disco. Un bloqueo temporal se usa para mantener la coherencia física de los datos de la página mientras se leen o modifican. Por el contrario, se usa un bloqueo para mantener la coherencia lógica y transaccional.
  • Error de E/S: muestra el recuento de búferes que pueden haber encontrado errores de sistema operativo relacionados con E/S (esto no indica necesariamente un problema).
  • Esperanza de vida de la página: este contador mide la cantidad de tiempo en segundos que la página más antigua ha permanecido en el grupo de búferes.

Puede obtener información detallada sobre el grupo de búferes para las páginas de base de datos mediante la sys.dm_os_buffer_descriptors DMV. Pero use esta DMV con precaución porque puede ejecutarse mucho tiempo y generar una salida enorme si el servidor basado en SQL Server tiene permiso para tener una gran cantidad de RAM a su disposición.

Caché de planes

En esta sección se describe la memoria caché del plan a la que anteriormente se hacía referencia como caché de procedimientos.

Procedure Cache         Value
----------------------- -----------
TotalProcs              4
TotalPages              25
InUsePages              0

En la lista siguiente se describen los valores de la salida y sus descripciones:

  • TotalProcs: este valor muestra el total de objetos almacenados en caché actualmente en la caché de procedimientos. Este valor coincide con el número de entradas en la sys.dm_exec_cached_plans DMV.

    Nota:

    Debido a la naturaleza dinámica de esta información, es posible que la coincidencia no sea exacta. Puede usar PerfMon para supervisar el objeto SQL Server: Plan Cache y la sys.dm_exec_cached_plans DMV para obtener información detallada sobre el tipo de objetos almacenados en caché, como desencadenadores, procedimientos y objetos ad hoc.

  • TotalPages: muestra las páginas acumulativas usadas para almacenar todos los objetos almacenados en caché en la caché de planes o procedimientos. Puede multiplicar este número por 8 KB para obtener el valor expresado en KB.

  • InUsePages: muestra las páginas de la memoria caché de procedimientos que pertenecen a los procedimientos que están activos actualmente. Estas páginas no se pueden descartar.

Objetos de memoria global

Esta sección contiene información sobre varios objetos de memoria global y la cantidad de memoria que usan.

Global Memory Objects               Buffers
----------------------------------  ----------------
Resource                            576
Locks                               96
XDES                                61
DirtyPageTracking                   52
SETLS                               8
SubpDesc Allocators                 8
SE SchemaManager                    139
SE Column Metadata Cache            159
SE Column Metadata Cache Store      2
SE Column Store Metadata Cache      8
SQLCache                            224
Replication                         2
ServerGlobal                        1509
XP Global                           2
SortTables                          3

En la lista siguiente se describen los valores de la salida y sus descripciones:

  • Recurso: muestra la memoria que usa el objeto Resource. El motor de almacenamiento lo usa para varias estructuras de todo el servidor.
  • Bloqueos: muestra la memoria usada por el Administrador de bloqueos.
  • XDES: muestra la memoria usada por el Administrador de transacciones.
  • SETLS: muestra la memoria que se usa para asignar la estructura por subproceso específica del motor de almacenamiento que usa el almacenamiento local de subprocesos (TLS). Para obtener más información, vea Almacenamiento local de subprocesos.
  • Asignadores de SubpDesc: muestra la memoria que se usa para administrar subprocesos para consultas paralelas, operaciones de copia de seguridad, operaciones de restauración, operaciones de base de datos, operaciones de archivo, creación de reflejo y cursores asincrónicos. Estos subprocesos también se conocen como "procesos paralelos".
  • SE SchemaManager: muestra la memoria que usa el Administrador de esquemas para almacenar metadatos específicos del motor de almacenamiento.
  • SQLCache: muestra la memoria que se usa para guardar el texto de instrucciones ad hoc y preparadas.
  • Replicación: muestra la memoria que el servidor usa para los subsistemas de replicación internos.
  • ServerGlobal: muestra el objeto de memoria del servidor global que usan genéricamente varios subsistemas.
  • XP Global: muestra la memoria utilizada por los procedimientos almacenados extendidos.
  • Tablas de ordenación: muestra la memoria utilizada por las tablas de ordenación.

Consulta de objetos de memoria

En esta sección se describe la información de concesión de memoria de consulta. También incluye una instantánea del uso de la memoria de consulta. La memoria de consulta también se conoce como "memoria del área de trabajo".

Query Memory Objects (default)           Value
---------------------------------------- -------
Grants                                    0
Waiting                                   0
Available                                 436307
Current Max                               436307
Future Max                                436307
Physical Max                              436307
Next Request                              0
Waiting For                               0
Cost                                      0
Timeout                                   0
Wait Time                                 0

Si el tamaño y el costo de una consulta satisfacen umbrales de memoria de consulta "pequeños", la consulta se coloca en una pequeña cola de consultas. Este comportamiento impide que las consultas más pequeñas se retrasen detrás de consultas más grandes que ya están en la cola.

En la lista siguiente se describen los valores de la salida y sus descripciones:

  • Concesiones: muestra el número de consultas en ejecución que tienen concesiones de memoria.
  • En espera: muestra el número de consultas que están esperando para obtener concesiones de memoria.
  • Disponible: muestra los búferes que están disponibles para las consultas que se usan como área de trabajo hash y ordenan el área de trabajo. El Available valor se actualiza periódicamente.
  • Siguiente solicitud: muestra el tamaño de la solicitud de memoria, en búferes, para la siguiente consulta en espera.
  • Esperando: muestra la cantidad de memoria que debe estar disponible para ejecutar la consulta a la que hace referencia el valor de Solicitud siguiente. El valor Esperando es el Next Request valor multiplicado por un factor de espacio para la cabeza. Este valor garantiza eficazmente que una cantidad específica de memoria estará disponible cuando se ejecute la siguiente consulta en espera.
  • Costo: muestra el costo de la siguiente consulta en espera.
  • Tiempo de espera: muestra el tiempo de espera, en segundos, para la siguiente consulta en espera.
  • Tiempo de espera: muestra el tiempo transcurrido, en milisegundos, desde que se puso la siguiente consulta en espera en la cola.
  • Max actual: muestra el límite de memoria general para la ejecución de consultas. Este valor es el límite combinado para la cola de consultas de gran tamaño y la cola de consulta pequeña.

Para obtener más información sobre qué son las concesiones de memoria, qué significan estos valores y cómo solucionar problemas de concesiones de memoria, consulte Solución de problemas de rendimiento lento o memoria baja causados por concesiones de memoria en SQL Server.

Memoria de optimización

Las consultas se envían al servidor para su compilación. El proceso de compilación incluye análisis, algebraización y optimización. Las consultas se clasifican en función de la memoria que consume cada consulta durante el proceso de compilación.

Nota:

Esta cantidad no incluye la memoria necesaria para ejecutar la consulta.

Cuando se inicia una consulta, no hay ningún límite en el número de consultas que se pueden compilar. A medida que el consumo de memoria aumenta y alcanza un umbral, la consulta debe pasar una puerta de enlace para continuar. Hay un límite decreciente progresivamente de consultas compiladas simultáneamente después de cada puerta de enlace. El tamaño de cada puerta de enlace depende de la plataforma y la carga. Los tamaños de puerta de enlace se eligen para maximizar la escalabilidad y el rendimiento.

Si la consulta no puede pasar una puerta de enlace, espera hasta que la memoria esté disponible o devuelva un error de tiempo de espera (error 8628). Además, es posible que la consulta no adquiera una puerta de enlace si cancela la consulta o si se detecta un interbloqueo. Si la consulta pasa varias puertas de enlace, no libera las puertas de enlace más pequeñas hasta que se completa el proceso de compilación.

Este comportamiento permite que solo se produzcan algunas compilaciones que consumen mucha memoria al mismo tiempo. Además, este comportamiento maximiza el rendimiento de las consultas más pequeñas.

En la tabla siguiente se proporcionan detalles de las esperas de memoria que se producen debido a una memoria insuficiente para la optimización de consultas. Las cuentas de memoria internas para la memoria del optimizador que usan las consultas del sistema, mientras que la memoria de optimización predeterminada notifica la memoria de optimización para las consultas de usuario o aplicación.

Optimization Queue (internal)      Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3673882624
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (internal)           Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (internal)          Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            0
Threshold Factor                   12
Threshold                          -1

Big Gateway (internal)             Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Optimization Queue (default)       Value
---------------------------------- ----------------
Overall Memory                     4013162496
Target Memory                      3542319104
Last Notification                  1
Timeout                            6
Early Termination Factor           5

Small Gateway (default)            Value
---------------------------------- ----------------
Configured Units                   32
Available Units                    32
Acquires                           0
Waiters                            0
Threshold Factor                   380000
Threshold                          380000

Medium Gateway (default)           Value
---------------------------------- ----------------
Configured Units                   8
Available Units                    8
Acquires                           0
Waiters                            2
Threshold Factor                   12
Threshold                          -1

Big Gateway (default)              Value
---------------------------------- ----------------
Configured Units                   1
Available Units                    1
Acquires                           0
Waiters                            0
Threshold Factor                   8
Threshold                          -1

Esta es una descripción de algunos de estos valores:

  • Unidades configuradas : indica el número de consultas simultáneas que pueden usar la memoria de compilación de la puerta de enlace. En el ejemplo, 32 consultas simultáneas pueden usar memoria de la puerta de enlace pequeña (valor predeterminado), ocho consultas simultáneas de la puerta de enlace mediana y una consulta de la puerta de enlace grande. Como se mencionó anteriormente, si una consulta necesita más memoria de la que la puerta de enlace pequeña puede asignar, iría a Puerta de enlace mediana y esa consulta se cuenta para haber tomado una unidad en ambas puertas de enlace. Cuanto mayor sea la cantidad de memoria de compilación que necesita una consulta, menos unidades configuradas en una puerta de enlace.
  • Unidades disponibles : indica el número de ranuras o unidades disponibles para que las consultas simultáneas se compilen desde la lista de unidades configuradas. Por ejemplo, si hay 32 unidades disponibles, pero tres consultas usan actualmente memoria de compilación, Available Units serían 32 menos 3 o 29 unidades.
  • Adquiere : indica el número de unidades o ranuras adquiridas por las consultas que se van a compilar. Si tres consultas usan actualmente la memoria de una puerta de enlace, adquiere = 3.
  • Waiters : indica cuántas consultas están esperando memoria de compilación en una puerta de enlace. Si se agotan todas las unidades de una puerta de enlace, el valor waiters es distinto de cero que muestra el recuento de consultas en espera.
  • Umbral : indica un límite de memoria de puerta de enlace que determina de dónde obtiene su memoria una consulta o en qué puerta de enlace permanece. Si una consulta no necesita más que el valor de umbral, permanece en la puerta de enlace pequeña (una consulta siempre comienza con la puerta de enlace pequeña). Si necesita más memoria para la compilación, se dirigiría al medio uno y, si ese umbral sigue siendo insuficiente, se dirige a la puerta de enlace grande. Para la puerta de enlace pequeña, el factor de umbral es de 380 000 bytes (podría estar sujeto a cambios en versiones futuras) para la plataforma x64.
  • Factor de umbral: determina el valor de umbral de cada puerta de enlace. En el caso de la puerta de enlace pequeña, dado que el umbral está predefinido, el factor también se establece en el mismo valor. Los factores de umbral para la puerta de enlace mediana y grande son fracciones de la memoria total del optimizador (memoria general en la cola de optimización) y se establecen en 12 y 8, respectivamente. Por lo tanto, si se ajusta la memoria general porque otros consumidores de memoria SQL Server requieren memoria, los factores de umbral también harían que los umbrales se ajustaran dinámicamente.
  • Tiempo de espera: indica el valor en minutos que define cuánto tiempo espera una consulta para la memoria del optimizador. Si se alcanza este valor de tiempo de espera, la sesión deja de esperar y genera el error 8628: A time out occurred while waiting to optimize the query. Rerun the query.

Agentes de memoria

En esta sección se proporciona información sobre los agentes de memoria que controlan la memoria almacenada en caché, la memoria robada y la memoria reservada. Puede usar la información de estas tablas solo para diagnósticos internos. Por lo tanto, esta información no se detalla.

MEMORYBROKER_FOR_CACHE (internal)       Value
--------------------------------------- -------------
Allocations                             20040
Rate                                    0
Target Allocations                      3477904
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (internal)       Value
--------------------------------------- -------------
Allocations                             129872
Rate                                    40
Target Allocations                      3587776
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (internal)     Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3457864
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_CACHE (default)        Value
--------------------------------------- -------------
Allocations                             44592
Rate                                    8552
Target Allocations                      3511008
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_STEAL (default)        Value
--------------------------------------- -------------
Allocations                             1432
Rate                                    -520
Target Allocations                      3459296
Future Allocations                      0
Overall                                 3919104
Last Notification                       1

MEMORYBROKER_FOR_RESERVE (default)      Value
--------------------------------------- -------------
Allocations                             0
Rate                                    0
Target Allocations                      3919104
Future Allocations                      872608
Overall                                 3919104
Last Notification                       1