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