Contexto
Servidor de ejemplo con las siguientes características: 30GB de disco, 2 vCPU, 4GB de RAM, collation Modern_Spanish_CI_AS. Este tipo de diagnóstico es útil cuando un servidor de SQL Server empieza a mostrar señales de presión de memoria, o simplemente para confirmar exactamente qué versión y edición está corriendo antes de planificar un cambio.
1. Versión y edición del motor
Lo primero es confirmar exactamente qué se está ejecutando — la edición determina límites como cuánta RAM puede usar el buffer pool:
SELECT
SERVERPROPERTY('Edition') AS edition,
SERVERPROPERTY('ProductVersion') AS version,
SERVERPROPERTY('EngineEdition') AS engine_edition;2. Límite de memoria configurado (max server memory)
SQL Server, por defecto, puede intentar usar prácticamente toda la RAM disponible del servidor si no se configura un límite explícito. Esta consulta muestra qué valor está configurado actualmente:
SELECT name, value_in_use
FROM sys.configurations
WHERE name = 'max server memory (MB)';3. Uso total de memoria del proceso SQL Server
Para ver cuánta memoria está usando realmente el proceso completo, incluyendo memoria virtual comprometida:
SELECT
physical_memory_in_use_kb / 1024 AS memory_in_use_MB,
large_page_allocations_kb / 1024 AS large_page_MB,
locked_page_allocations_kb / 1024 AS locked_page_MB,
total_virtual_address_space_kb / 1024 AS total_virtual_MB,
virtual_address_space_committed_kb / 1024 AS committed_virtual_MB
FROM sys.dm_os_process_memory;4. Uso de memoria por tipo (memory clerks)
SQL Server organiza internamente su consumo de memoria en «clerks» según el componente que la usa (buffer pool, caché de planes de ejecución, etc.). Esta consulta agrupa el consumo por tipo, de mayor a menor:
SELECT
type,
SUM(pages_kb) / 1024 AS memory_MB
FROM sys.dm_os_memory_clerks
GROUP BY type
ORDER BY memory_MB DESC;5. Buffer pool específico
El buffer pool es el componente que cachea páginas de datos en memoria para evitar lecturas a disco — es justo lo que las ediciones Express y Standard limitan agresivamente. Esta consulta aísla específicamente cuánto está usando:
SELECT
SUM(pages_kb) / 1024 AS buffer_pool_MB
FROM sys.dm_os_memory_clerks
WHERE type = 'MEMORYCLERK_SQLBUFFERPOOL';Resumen de lo que responde cada consulta
| Pregunta | DMV / Vista utilizada |
|---|---|
| ¿Qué edición y versión está corriendo? | SERVERPROPERTY |
| ¿Cuánto está configurado como límite de RAM? | sys.configurations |
| ¿Cuánta RAM usa el proceso completo de SQL? | sys.dm_os_process_memory |
| ¿Qué componentes están consumiendo más memoria? | sys.dm_os_memory_clerks |
| ¿Cuánto usa el buffer pool (el que se limita)? | sys.dm_os_memory_clerks |