Usar 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 la memoria.

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

Resumen

En este artículo se describe el resultado del DBCC MEMORYSTATUS comando. Este comando se usa con frecuencia para solucionar problemas de consumo de memoria de Microsoft SQL Server.

En este artículo se describen los elementos del resultado del administrador de memoria para el resumen del uso de la memoria, para la información de memoria agregada, para la información de la distribución del búfer, para la información del grupo de búferes y para la información de caché de procedimientos. También se describe el resultado sobre los objetos de memoria global, sobre los objetos de memoria de consulta, acerca de la optimización y sobre los agentes de memoria.

Introducción

El DBCC MEMORYSTATUS comando proporciona una instantánea del estado de la memoria actual de SQL Server. Puede usar el resultado de este comando para solucionar problemas de consumo de memoria en SQL Server o para solucionar errores específicos de memoria insuficiente. (Muchos errores de memoria insuficiente imprimen automáticamente este resultado en el registro de errores). Los servicios de soporte al cliente de Microsoft también pueden solicitarle que ejecute este comando durante un incidente de soporte técnico específico si tiene un error que puede estar asociado con una condición de memoria baja.

Nota

El monitor de rendimiento (PerfMon) y el administrador de tareas no tienen en cuenta correctamente la memoria si está habilitada la compatibilidad con extensiones de ventana de direcciones (AWE).

En este artículo se describen algunos de los datos que se pueden obtener en el resultado del DBCC MEMORYSTATUS comando. Varias secciones de este artículo incluyen detalles de implementación de propietario que no se explican aquí. Los servicios de soporte al cliente de Microsoft no responderán a preguntas ni proporcionarán más información acerca del significado de los contadores específicos más allá de la información que se proporciona en este artículo.

Más información

Importante

El DBCC MEMORYSTATUS comando tiene como objetivo ser una herramienta de diagnóstico para los servicios de soporte al cliente de Microsoft. El formato de los resultados y el nivel de detalle que se proporciona están sujetos a cambios entre los Service Packs y las versiones de producto. La funcionalidad que DBCC MEMORYSTATUS proporciona el comando puede reemplazarse por otro mecanismo en versiones posteriores del producto. Por lo tanto, en versiones de producto posteriores, es posible que este comando ya no funcione. No se realizarán más advertencias antes de cambiar o quitar este comando. Por lo tanto, las aplicaciones que usan este comando pueden interrumpirse sin advertencia.

El resultado del DBCC MEMORYSTATUS comando ha cambiado de versiones anteriores de SQL Server. El resultado ahora contiene varias secciones que no estaban disponibles en versiones anteriores del producto.

Administrador de memoria

La primera sección del resultado es el administrador de memoria. En esta sección se muestra el consumo de memoria general por parte de SQL Server.

Memory Manager             KB
------------------------------ --------------------
VM Reserved                1761400
VM Committed               1663556
AWE Allocated              0
Reserved Memory            1024
Reserved Memory In Use     0

(5 row(s) affected)

Los elementos de esta sección son los siguientes:

  • Reservado VM: este valor muestra la cantidad total de espacio de direcciones virtuales (VAS) que SQL Server ha reservado.
  • VM confirmada: este valor muestra la cantidad total de tareas que SQL Server ha confirmado. Los VAS que están comprometidos se han asociado a la memoria física.
  • AWE asignada: este valor muestra la cantidad total de memoria que se asigna mediante el mecanismo AWE en la versión de 32 bits de SQL Server. O bien, este valor muestra la cantidad total de memoria que consumen las páginas bloqueadas en la versión de 64 bits del producto.
  • Memoria reservada: este valor muestra la memoria reservada para la conexión de administrador dedicada (DAC).
  • Memoria reservada en uso: este valor muestra la memoria reservada que se usa.

Resumen del uso de la memoria

La sección del 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 la memoria no uniforme (NUMA), habrá una entrada de nodo de memoria correspondiente para cada nodo NUMA de hardware. En un sistema SMP, habrá una sola entrada de nodo de memoria.

Nota

Es posible que el identificador del nodo de memoria no corresponda con el identificador de nodo de hardware.

Memory node Id = 0      KB
------------------------------ --------------------
VM Reserved             1757304
VM Committed            1659612
AWE Allocated           0
MultiPage Allocator     10760
SinglePage Allocator    73832

(5 row(s) affected)

Nota

Estos valores muestran la memoria que están asignadas por los subprocesos que se ejecutan en este nodo NUMA. Estos valores no son la memoria local del nodo NUMA.

Los elementos de esta sección son los siguientes:

  • Reservado VM: este valor muestra los elementos VAS reservados por los subprocesos que se están ejecutando en este nodo.

  • VM confirmada: este valor muestra los elementos VAS comprometidos por los subprocesos que se ejecutan en este nodo.

  • AWE asignada: este valor muestra la memoria que se asigna mediante el mecanismo AWE en la versión de 32 bits del producto. O bien, este valor muestra la cantidad total de memoria que consumen las páginas bloqueadas en la versión de 64 bits del producto.

    En un sistema con NUMA habilitado, este valor puede ser incorrecto o negativo. Sin embargo, el valor global asignado a AWE en la sección administrador de memoria es un valor correcto. Para realizar un seguimiento de la memoria asignada por nodos NUMA individuales, use SQL Server: objetos de rendimiento de nodo de búfer. (Para obtener más información, vea los libros en pantalla de SQL Server).

  • Asignador multipágina: este valor muestra la memoria asignada a través del asignador de multipágina por los subprocesos que se están ejecutando en este nodo. Esta memoria procede de fuera del grupo de búferes.

  • Asignador SinglePage: este valor muestra la memoria asignada a través de un asignador de página por los subprocesos que se están ejecutando en este nodo. Esta memoria es robada del grupo de búferes.

Nota

Las sumas de los valores reservados de VM y los valores de VM confirmados en todos los nodos de memoria serán ligeramente inferiores a los valores correspondientes que se indican en la sección administrador de memoria.

Agregar memoria

La siguiente sección contiene información de memoria agregada para cada tipo de empleado y para cada nodo NUMA. Para un sistema habilitado para NUMA, es posible que vea un resultado similar al siguiente.

Nota

La tabla siguiente contiene sólo parte del resultado.

MEMORYCLERK_SQLGENERAL (node 0) KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            592
MultiPage Allocator             2160

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (node 1) KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            136
MultiPage Allocator             0

(7 row(s) affected)

MEMORYCLERK_SQLGENERAL (Total)  KB
---------------------------------------------------------------- --------------------
VM Reserved                     0
VM Committed                    0
AWE Allocated                   0
SM Reserved                     0
SM Commited                     0
SinglePage Allocator            728
MultiPage Allocator             2160

(7 row(s) affected)

Nota

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

Para un sistema SMP, verá sólo una sección para cada tipo de funcionario. Esta sección es similar a la siguiente.

MEMORYCLERK_SQLGENERAL (Total)     KB
---------------------------------------------------------------- --------------------
VM Reserved                        0
VM Committed                       0
AWE Allocated                      0
SM Reserved                        0
SM Commited                        0
SinglePage Allocator               768
MultiPage Allocator                2160

(7 row(s) affected)

En estas secciones se ofrece más información acerca de la memoria compartida:

  • Reservado SM: este valor muestra los elementos VAS reservados 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: este valor muestra los elementos VAS comprometidos por todos los empleados de este tipo que usan la API de archivos asignados a memoria.

Puede obtener información de resumen para cada tipo de empleado para todos los nodos de memoria mediante el 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],
sum(single_pages_kb) as [SinlgePage Allocator]
from
sys.dm_os_memory_clerks
group by type

Distribución de búfer

En la siguiente sección se muestra la distribución de búferes de 8 kilobytes (KB) en el grupo de búferes.

Buffer Distribution    Buffers
------------------------------ -----------
Stolen                 553
Free                   103
Cached                 161
Database (clean)       1353
Database (dirty)       38
I/O 0
Latched 0

(7 row(s) affected)

Los elementos de esta sección son los siguientes:

  • Robado: la memoria robada describe los búferes de 8 KB que el servidor usa con fines diversos. Estos búferes sirven como asignaciones de almacén de memoria genérica. Los diferentes componentes del servidor usan estos búferes para almacenar las estructuras de datos internas. No se permite que el proceso de escritura diferida vacíe búferes robados del grupo de búferes.

  • Free: este valor muestra los búferes confirmados que no se usan actualmente. Estos búferes están disponibles para contener datos. O bien, otros componentes pueden solicitar estos búferes y, a continuación, marcar estos búferes como robados.

  • En caché: este valor muestra los búferes que se usan para varias cachés.

  • Base de datos (limpiar): este valor muestra los búferes que tienen contenido de base de datos y que no se han modificado.

  • Base de datos (sucio): este valor muestra los búferes que tienen contenido de base de datos y que se han modificado. Estos búferes contienen cambios que se deben vaciar en el disco.

  • E/s: este valor muestra los búferes que están esperando una operación de e/s pendiente.

  • Bloqueado: este valor muestra los búferes bloqueados . Un búfer se cierra cuando un subproceso lee o modifica el contenido de una página. También se cierra un búfer 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 se modifican. Se usa un bloqueo para mantener la coherencia lógica y transaccional.

Detalles del grupo de búferes

Puede obtener información detallada acerca de los búferes de grupo de búferes para las páginas de base de datos mediante el sys.dm_os_buffer_descriptors DMV. Además, puede obtener información detallada sobre las páginas de grupo de búferes que se usan para varios fines del servidor mediante el sys.dm_os_memory_clerks DMV.

En la siguiente sección se enumeran detalles sobre el grupo de búferes y más información adicional.

Buffer Counts             Buffers
------------------------------ --------------------
Committed                 1064
Target                    17551
Hashed                    345
Stolen Potential          121857
External Reservation      645
Min Free                  64
Visible                   17551
Available Paging File     451997

(8 row(s) affected)

Los elementos de esta sección son los siguientes:

  • Confirmado: este valor muestra los búferes totales que se han confirmado. Los búferes confirmados tienen una memoria física asociada con ellos. El valor confirmado es el tamaño actual del grupo de búferes. Este valor incluye la memoria física que se asigna si la compatibilidad con AWE está habilitada.
  • Destino: este valor muestra el tamaño de destino del grupo de búferes. Si el valor del objetivo es mayor que el valor confirmado, el grupo de búferes está creciendo. Si el valor del objetivo es menor que el valor confirmado, el grupo de búferes se está reduciendo.
  • Hashed: este valor muestra las páginas de datos y las páginas de índice que se almacenan en el grupo de búferes.
  • Posible robo: este valor muestra el número máximo de páginas que se pueden robar desde el grupo de búferes.
  • ExternalReservation: este valor muestra las páginas que se han reservado para las consultas que realizarán una operación de ordenación o de hash. Estas páginas todavía no se han robado.
  • Mín. libre: este valor muestra las páginas que el grupo de búferes intenta tener en la lista libre.
  • Visible: este valor muestra los búferes que están visibles simultáneamente. Se puede tener acceso directamente a estos búferes al mismo tiempo. Este valor es igual al número total de búferes. Sin embargo, cuando la compatibilidad con AWE está habilitada, este valor puede ser menor que el total de búferes.
  • Archivo de paginación disponible: este valor muestra la memoria que está disponible para la confirmación. Este valor se expresa como el número de búferes de 8 KB. Para obtener más información, consulte el tema de la función GlobalMemoryStatusEx en la documentación de la API de Windows.

Caché de procedimientos

En la siguiente sección se describe la composición de la caché de procedimientos.

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

(3 row(s) affected)

Los elementos de esta sección son los siguientes:

  • TotalProcs: este valor muestra el total de objetos en caché que se encuentran actualmente en la caché de procedimientos. Este valor coincidirá con las entradas de la sys.dm_exec_cached_plans DMV.

    Nota

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

  • TotalPages: este valor muestra las páginas acumulativas que debe tener para almacenar todos los objetos en caché en la caché de procedimientos.

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

Objetos de memoria global

La siguiente sección contiene información sobre varios objetos de memoria global. Esta sección también contiene información sobre la cantidad de memoria que usan los objetos de memoria global.

Global Memory Objects     Buffers
------------------------------ --------------------
Resource                  126
Locks                     85
XDES                      10
SETLS                     2
SE Dataset Allocators     4
SubpDesc Allocators       2
SE SchemaManager          44
SQLCache                  41
Replication               2
ServerGlobal              25
XP Global                 2
SortTables                2

(12 row(s) affected)

Los elementos de esta sección son los siguientes:

  • Recurso: este valor muestra la memoria que usa el objeto de recurso. El motor de almacenamiento y para varias estructuras de servidor usan el objeto Resource.
  • Bloqueos: este valor muestra la memoria que usa el administrador de bloqueos.
  • XDES: este valor muestra la memoria que usa el administrador de transacciones.
  • SETLS: este valor 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.
  • Asignadores de DataSet: este valor muestra la memoria que se usa para asignar estructuras para el acceso a la tabla a través de la configuración de los métodos de acceso .
  • Asignadores SubpDesc: este valor muestra la memoria que se usa para administrar subprocesos para las consultas paralelas, las operaciones de copia de seguridad, las operaciones de restauración, las operaciones de base de datos, las operaciones de archivo, la creación de reflejos y los cursores asincrónicos. Estos subprocesos también se conocen como procesos en paralelo.
  • SE SchemaManager: este valor muestra la memoria que el administrador de esquema usa para almacenar metadatos específicos del motor de almacenamiento.
  • SQLCache: este valor muestra la memoria que se usa para almacenar el texto de las instrucciones ad hoc y de las instrucciones preparadas.
  • Replication: este valor muestra la memoria que usa el servidor para los subsistemas de replicación interna.
  • ServerGlobal: este valor muestra el objeto de memoria del servidor global que usan varios subsistemas de forma genérica.
  • Global de XP: este valor muestra la memoria que usan los procedimientos almacenados extendidos.
  • Sort Tables: este valor muestra la memoria que usan las tablas de ordenación.

Objetos de memoria de consulta

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

Query Memory Objects             Value
------------------------------ -----------
Grants                           0
Waiting                          0
Available (Buffers)              14820
Maximum (Buffers)                14820
Limit                            10880
Next Request                     0
Waiting For                      0
Cost                             0
Timeout                          0
Wait Time                        0
Last Target                      11520

(11 row(s) affected)

Small Query Memory Objects       Value
------------------------------ -----------

Grants                           0
Waiting                          0
Available (Buffers)              640
Maximum (Buffers)                640
Limit                            640

(5 row(s) affected)

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

Los elementos de esta sección son los siguientes:

  • Subvenciones: este valor muestra las consultas en ejecución que tienen concesiones de memoria.
  • En espera: este valor muestra las consultas que esperan para obtener las concesiones de memoria.
  • Disponible: este valor muestra los búferes que están disponibles para las consultas para usar como área de trabajo hash y como área de trabajo de ordenación. El valor disponible se actualiza periódicamente.
  • Maximum: este valor muestra los búferes totales que se pueden dar a todas las consultas para usarlas como área de trabajo.
  • Límite: este valor muestra el destino de ejecución de consulta para la cola de consulta grande. Este valor difiere del valor máximo (búferes) porque el valor máximo (búferes) no se actualiza hasta que haya un cambio en la cola.
  • Siguiente solicitud: este valor muestra el tamaño de la solicitud de memoria, en búferes, para la siguiente consulta en espera.
  • Esperando a: este valor 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 en espera es el siguiente valor de solicitud multiplicado por un factor de espacio. Este valor garantiza de forma efectiva que una cantidad específica de memoria estará disponible cuando se ejecute la siguiente consulta en espera.
  • Costo: este valor muestra el costo de la siguiente consulta en espera.
  • Timeout: este valor muestra el tiempo de espera, en segundos, de la siguiente consulta en espera.
  • Tiempo de espera: este valor muestra el tiempo transcurrido, en milisegundos, desde que se colocó la siguiente consulta en espera en la cola.
  • Último destino: este valor muestra el límite de memoria general para la ejecución de la consulta. Este valor es el límite combinado de la cola de consultas de gran tamaño y de la cola de consultas pequeña.

Optimiza

La siguiente sección es un resumen de los usuarios que intentan optimizar las consultas al mismo tiempo.

Optimization Queue                 Value
------------------------------ --------------------
Overall Memory                     156672000
Last Notification                  1
Timeout                            6
Early Termination Factor           5

(4 row(s) affected)

Small Gateway                     Value
------------------------------ --------------------
Configured Units                  8
Available Units                   8
Acquires                          0
Waiters                           0
Threshold Factor                  250000
Threshold                         250000

(6 row(s) affected)

Medium Gateway                    Value
------------------------------ --------------------
Configured Units                  2
Available Units                   2
Acquires                          0
Waiters                           0
Threshold Factor                  12

(5 row(s) affected)

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

(5 row(s) affected)

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

Nota

Esta cantidad no incluye la memoria que se requiere para ejecutar la consulta.

Cuando se inicia una consulta, no hay ningún límite en cuanto a la cantidad 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. Después de cada puerta de enlace, se produce un límite decreciente de consultas simultáneamente que se realiza de forma progresiva. El tamaño de cada puerta de enlace depende de la plataforma y de 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, la consulta esperará hasta que haya memoria disponible. O bien, la consulta devolverá un error de tiempo de espera (error 8628). Además, es posible que la consulta no adquiera una puerta de enlace si el usuario cancela la consulta o si se detecta un interbloqueo. Si una consulta pasa varias puertas de enlace, la consulta no libera las puertas de enlace menores hasta que el proceso de compilación haya finalizado.

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

Agentes de memoria

En las tres secciones siguientes se muestra información sobre los agentes de memoria que controlan la memoria caché, la memoria robada y la memoria reservada. La información que proporcionan estas secciones solo se puede usar para el diagnóstico interno. Por lo tanto, esta información no se detalla aquí.

MEMORYBROKER_FOR_CACHE        Value
-------------------------------- --------------------
Allocations                   1843
Rate                          0
Target Allocations            1843
Future Allocations            0
Last Notification             1

(4 row(s) affected)

MEMORYBROKER_FOR_STEAL        Value
-------------------------------- --------------------
Allocations                   380
Rate                          0
Target Allocations            1195
Future Allocations            0
Last Notification             1

(4 row(s) affected)

MEMORYBROKER_FOR_RESERVE      Value
-------------------------------- --------------------
Allocations                   0
Rate                          0
Target Allocations            1195
Future Allocations            0
Last Notification             1

(4 row(s) affected)

Se aplica a

  • SQL Server 2005 Developer Edition
  • SQL Server 2005 Enterprise Edition
  • SQL Server 2005 Enterprise x64 Edition
  • SQL Server 2005 Standard Edition
  • SQL Server 2005 Standard x64 Edition
  • SQL Server 2005 Workgroup Edition