Cómo utilizar el comando DBCC MEMORYSTATUS para supervisar el uso de memoria en SQL Server 2005

Se aplica: Microsoft SQL Server 2005 Developer EditionMicrosoft SQL Server 2005 Enterprise EditionMicrosoft SQL Server 2005 Enterprise X64 Edition

Resumen


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

Este artículo describe los elementos de la salida para el Administrador de memoria, el resumen de uso de memoria, la información de memoria agregado, la información de distribución de búfer, la información de grupo de búfer y la información de caché de procedimiento. También describe el resultado sobre objetos de memoria global, acerca de los objetos de memoria de consulta, acerca de la optimización y sobre corredores de memoria.

INTRODUCCIÓN


El comando DBCC MEMORYSTATUS proporciona una instantánea del estado de memoria actual de Microsoft SQL Server. El resultado de este comando puede utilizar para solucionar problemas de consumo de memoria en SQL Server o para solucionar determinados errores de la memoria. (Muchos errores de la memoria imprimirán automáticamente esta salida en el registro de errores.) Servicios de soporte al cliente de Microsoft podrán solicitar también ejecutar este comando durante un incidente de soporte específico si experimenta un error que puede asociarse con una condición de memoria baja.

Nota: Monitor de rendimiento (PerfMon) y el Administrador de tareas no tiene en cuenta memoria correctamente si está habilitada la compatibilidad con extensiones de ventana de dirección (AWE).

Este artículo describe algunos de los datos que puede obtener de la salida del comando DBCC MEMORYSTATUS. Varias secciones de este artículo incluyen los detalles de la implementación propietaria que no se explican aquí. Servicios de soporte técnico de Microsoft no responda a las preguntas o proporcionan 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 comando DBCC MEMORYSTATUS pretende ser una herramienta de diagnóstico de los servicios de soporte técnico de Microsoft. El formato del resultado y el nivel de detalle que se proporciona están sujetos a cambios entre los service packs y versiones del producto. La funcionalidad que proporciona el comando DBCC MEMORYSTATUS podrá sustituirse por un mecanismo diferente en versiones posteriores del producto. Por lo tanto, en versiones posteriores del producto, este comando ya no funcionen. Advertencias adicionales no se realizará antes de que este comando cambia o desaparece. Por lo tanto, las aplicaciones que utilizan este comando pueden interrumpir sin previo aviso.

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

Administrador de memoria

La primera sección de la salida es el Administrador de memoria. Esta sección muestra el consumo de memoria total 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:
  • Máquina virtual reservada: este valor muestra la cantidad total de espacio de direcciones virtual (VAS) que SQL Server ha reservado.
  • Comprometido de VM: este valor muestra el importe total de VAS que SQL Server se ha comprometido. VAS comprometida se ha asociado con la memoria física.
  • AWE asignada: este valor muestra la cantidad total de memoria que se asigna a través del mecanismo AWE en la versión de 32 bits de SQL Server. O bien, este valor muestra la cantidad total de memoria que páginas bloqueadas que se consumen en la versión de 64 bits del producto.
  • Memoria reservada: este valor muestra la memoria que está reservada para la conexión de administrador dedicada (DAC).

  • Memoria reservada en uso: Este valor muestra la memoria reservada que se utiliza.

Resumen de uso de memoria

La sección del Administrador de memoria va seguida de un resumen del uso de memoria para cada nodo de la memoria. En un sistema habilitado el acceso (NUMA) de memoria no uniforme, habrá una entrada de nodo de memoria correspondiente para cada nodo NUMA de hardware. En un sistema SMP, habrá una entrada única de nodo de memoria.

Nota: El identificador de nodo de memoria puede no coincidir con el identificador de nodo del 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 se asigna por subprocesos que se ejecutan en este nodo NUMA. Estos valores no son la memoria local en el nodo NUMA.

Los elementos de esta sección son los siguientes:
  • Máquina virtual reservada: este valor muestra el VAS que está reservado por subprocesos que se ejecutan en este nodo.
  • Comprometido de VM: este valor muestra el VAS que se compromete por subprocesos que se ejecutan en este nodo.
  • AWE asignada: este valor muestra la memoria que se asigna a través del mecanismo AWE en la versión de 32 bits del producto. O bien, este valor muestra la cantidad total de memoria que consume las páginas bloqueadas en la versión de 64 bits del producto.

    En un sistema NUMA habilitado, este valor puede ser incorrecto o negativo. Sin embargo, el valor global de AWE asignada en la sección Administrador de memoria es un valor correcto. Para controlar la memoria asignada por nodos NUMA individuales, utilice de SQL Server: nodo de búfer objetos de rendimiento. (Para obtener más información, consulte de Libros en pantalla de SQL Server.)
  • Asignador de multiPage: este valor muestra la memoria que se asigna mediante el asignador de multipage por subprocesos que se ejecutan en este nodo. Esta memoria proviene de fuera del grupo de búfer.
  • Asignador de SinglePage: este valor muestra la memoria que se asigna mediante el asignador de una página por los subprocesos que se ejecutan en este nodo. Esta memoria se roba desde el grupo de búferes.
Nota: Las sumas de los valores de VM reservados y los valores de VM comprometida en todos los nodos de memoria será ligeramente inferior a los valores correspondientes que figuran en la sección Administrador de memoria.

Memoria de agregado

La sección siguiente contiene información sobre la memoria agregado para cada tipo de empleado y para cada nodo NUMA. Para un sistema NUMA habilitado, puede que vea resultados que es similar a la siguiente.

Nota: En la siguiente tabla contiene sólo una parte de la salida.
   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 nodos NUMA del equipo que está ejecutando SQL Server. El nodo ID incluir nodos NUMA de software posibles que se definen sobre nodos NUMA de hardware o sobre un sistema SMP. Para buscar la asignación entre identificadores de nodo y de CPU para cada nodo, ver la información de número de identificador de suceso 17152. Este suceso se registra en el registro de aplicación en el Visor de sucesos cuando se inicia SQL Server.

Para un sistema SMP, verá sólo una sección para cada tipo de empleado. 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)
Memoria compartida es otra información en estas secciones:
  • SM reservada: este valor muestra el VAS que está reservado por todos los empleados de este tipo que están utilizando los archivos asignados en memoria API. Esta API es también conocida como memoria compartida.
  • SM comprometido: este valor muestra el VAS que está comprometido por todos los empleados de esta clase que están utilizando archivos asignados en memoria API.


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

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

La sección siguiente 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:
  • Robados: memoria robados describe búferes de 8 KB que utiliza el servidor para varios propósitos. Estos búferes servir como asignaciones de almacén de memoria genérico. Diferentes componentes del servidor usan estos búferes para almacenar estructuras de datos internas. No se permite el proceso de escritura diferida para vaciar los búferes robados fuera del grupo de búferes.
  • Libre: este valor muestra los búferes comprometidos que actualmente no se utilizan. Estos búferes están disponibles para almacenar datos. O bien, otros componentes podrán solicitar estos búferes y marcar estos búferes como robados.
  • En caché: este valor muestra los búferes que se utilizan para varias cachés.
  • Base de datos (limpia): este valor muestra los búferes que tienen contenido de base de datos y que no han sido modificados.
  • Base de datos (dirty): 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.

  • ENTRADA-salida: Este valor muestra los búferes que están esperando una operación de E/S pendiente.
  • Latched: este valor muestra los búferes bloqueado . Un búfer está bloqueado cuando un subproceso está leyendo o modificando el contenido de una página. Un búfer también está bloqueado cuando la página se lee desde el disco o se escriben en disco. Un pestillo se utiliza para mantener la coherencia física de los datos en la página mientras está siendo leído o modificado. Un bloqueo se utiliza para mantener la coherencia lógica y transaccional.

Detalles de grupo de búfer

Puede obtener información detallada acerca de los búferes de grupo de búfer para las páginas de la base de datos mediante la DMV sys.dm_os_buffer_descriptors . Y se puede obtener información detallada acerca de las páginas de bloque de búfer que se utilizan para diversos propósitos utilizando sys.dm_os_memory_clerks DMV.

La siguiente sección muestra detalles sobre el grupo de búferes e 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:
  • Comprometido: este valor muestra el número total de búferes que se confirman. Los búferes que se confirman tengan memoria física asociada con ellos. El valor de comprometido es el tamaño actual del grupo de búferes. Este valor incluye la memoria física asignada si está habilitada la compatibilidad con AWE.
  • Destino: este valor muestra el tamaño de destino del grupo de búferes. Si el valor de destino es mayor que el valor de comprometido , el grupo de búferes está creciendo. Si el valor de destino es menor que el valor de comprometido , es reducir el grupo de búferes.
  • Hashed: este valor muestra las páginas de datos y páginas de índice se almacenan en el búfer.
  • Robo potencial: este valor muestra las páginas máximo que pueden obtenerse desde el grupo de búferes.
  • ExternalReservation: este valor muestra las páginas que se han reservado para las consultas que se llevará a cabo una operación de ordenación o hash. Estas páginas no hayan sido robadas aún.
  • Min 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 son visibles al mismo tiempo. Estos búferes pueden acceder directamente al mismo tiempo. Este valor es normalmente igual que el número total de búferes. Sin embargo, cuando se habilita la compatibilidad con AWE, este valor puede ser menor que el número total de búferes.
  • El archivo de paginación disponible: este valor muestra la memoria que está disponible para comprometerse. Este valor se expresa como el número de búferes de 8 KB. Para obtener más información, vea el tema "GlobalMemoryStatusEx función" en la documentación de la API de Windows.

Caché de procedimientos

La siguiente sección 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 están actualmente en la caché de procedimientos. Este valor coincidirá con las entradas de sys.dm_exec_cached_plans DMV.

    Nota: Debido a la naturaleza dinámica de esta información, la coincidencia puede no ser exacta. Puede utilizar PerfMon para supervisar el de SQL Server: planear caché objeto y el sys.dm_exec_cached_plans DMV para obtener información detallada acerca del tipo de los objetos almacenados en caché, como desencadenadores, procedimientos y objetos ad hoc.
  • TotalPages: este valor muestra las páginas acumulativas que debe tener que almacenar todos los objetos almacenados 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 puede descartarse.

Objetos de memoria global

La sección siguiente contiene información acerca de diversos objetos de memoria global. Esta sección también contiene información sobre el uso de objetos de memoria la memoria global de cuánto.
   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 utiliza el objeto de recurso . El objeto de recurso se utiliza el motor de almacenamiento de información y de diversas estructuras de todo el servidor.
  • Bloquea: este valor muestra la memoria que utiliza Administrador de bloqueos.
  • XDES: este valor muestra la memoria que utiliza Administrador de transacciones.
  • SETLS: este valor muestra la memoria que se utiliza para asignar la estructura de cada subproceso específicas del motor de almacenamiento que utiliza almacenamiento local de subprocesos.
  • Asignadores de conjunto de datos SE: este valor muestra la memoria que se utiliza para asignar estructuras de acceso a la tabla mediante el establecimiento de Métodos de acceso .
  • Asignadores de SubpDesc: este valor muestra la memoria que se utiliza para la administración de subprocesos para las consultas en paralelo, las operaciones de backup, las operaciones de restauración, operaciones de base de datos, las operaciones con archivos, reflejo y cursores asincrónicos. Estos subprocesos son también conocidos como procesos en paralelo.
  • SchemaManager Sureste: este valor muestra la memoria que utiliza el Administrador de esquema para almacenar los metadatos específicos del motor de almacenamiento.
  • SQLCache: este valor muestra la memoria que se utiliza para almacenar el texto de instrucciones ad hoc y de instrucciones preparadas.
  • Replicación: este valor muestra la memoria que utiliza el servidor para subsistemas de réplica internos.
  • ServerGlobal: este valor muestra el objeto de memoria global del servidor que se utiliza de forma genérica por varios subsistemas.
  • XP Global: este valor muestra la memoria que extiende el uso de procedimientos almacenados.
  • Ordenar tablas: este valor muestra la memoria que ordenar el uso de tablas.

Objetos de memoria de consulta

La sección siguiente describe la información de concesión de memoria de consulta. Esta sección incluye una instantánea del uso de memoria de consulta. Memoria de consulta también es conocida como memoria de á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ño", la consulta se coloca en una cola de consulta pequeña. Este comportamiento impide que se retrase detrás de las consultas más grandes que ya están en la cola de consultas más pequeñas.

Los elementos de esta sección son los siguientes:
  • Concede: este valor muestra las consultas de ejecución que tienen concesiones de memoria.
  • En espera: este valor muestra las consultas que se esperan obtener concesiones de memoria.
  • Disponible: este valor muestra los búferes que están disponibles para las consultas para su uso como área de trabajo de hash y como ordenar el área de trabajo. El valor disponible se actualiza periódicamente.
  • Máximo: este valor muestra el número total de búferes que se puede dar a todas las consultas para su uso como área de trabajo.
  • Límite: este valor muestra el destino de la ejecución de consulta para la cola de consultas grandes. Este valor difiere del valor de máximo (búferes) porque el valor máximo (búferes) no se actualiza hasta que no hay cambio en la cola.
  • Siguiente solicitud: este valor muestra el tamaño de la solicitud de memoria, buffers, la siguiente consulta en espera.
  • Esperando para: este valor muestra la cantidad de memoria que debe estar disponible para ejecutar la consulta a la que hace referencia el valor de la Siguiente solicitud . El valor de Espera para es el valor de La solicitud siguiente multiplicado por un factor de espacio. Este valor garantiza de forma eficaz que una cantidad específica de memoria estará disponible cuando se ejecuta la siguiente consulta en espera.
  • Costo: este valor muestra el costo de la siguiente consulta en espera.
  • Tiempo de espera: este valor muestra el tiempo de espera, en segundos, para 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 global para la ejecución de la consulta. Este valor es el límite combinado para la cola de consulta grandes y la cola de consulta pequeña.

Optimización

La sección siguiente 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, algebraization y optimización. Las consultas se clasifican según la cantidad de memoria que consumirá cada consulta durante el proceso de compilación.

Nota: Este monto no incluye la memoria que se requiere para ejecutar la consulta.


Cuando se inicia una consulta, no hay ningún límite en cuántas consultas pueden compilarse. Que el consumo de memoria aumenta y alcanza un umbral, la consulta debe pasar una puerta de enlace para continuar. Hay un límite progresivamente decreciente de consultas simultáneamente compiladas después de cada puerta de enlace. El tamaño de cada puerta de enlace depende de la plataforma y la carga. 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, la consulta no puede adquirir 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 más pequeños hasta que haya finalizado el proceso de compilación.


Este comportamiento permite que sólo unos pocos consumen memoria compilaciones se producen al mismo tiempo. Además, este comportamiento maximiza el rendimiento de las consultas más pequeñas.

Agentes de memoria

Las tres secciones siguientes mostrar información sobre agentes de memoria que control almacena en caché la memoria, la memoria robado y memoria reservada. Información que proporcionan estas secciones sólo puede utilizarse para diagnósticos internos. Por lo tanto, esta información no se incluyen 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)