Skip to content

SQL Server Counters

0. Overview MetricsSQL Server

UID: sql_server_countersVersión: 1.3.1 Paneles: ~72

Propósito

Este dashboard permite revisar el estado global de las instancias de SQL Server, incluyendo aspectos críticos como:

  • Tamaño de bases de datos y ficheros de log
  • Uso de memoria y estado del buffer pool
  • Contadores de rendimiento internos de SQL Server
  • Page Life Expectancy y Buffer Cache Hit Ratio
  • Métricas de I/O y latencia de disco
  • Estado de alta disponibilidad (Availability Groups)

Variables

VariableDescripción
$InstanceInstancia SQL Server a monitorizar

Secciones

Instance Info

Información general de la instancia seleccionada, incluyendo tiempo de actividad, configuración de memoria y contadores clave.


Up Time stat

Tiempo transcurrido desde el último inicio de la instancia SQL Server.

Importancia: Un reinicio reciente puede indicar mantenimiento planificado, actualización de parches, o un problema inesperado como un crash o falta de memoria.

Umbrales:

ValorColorEstado
< 1 díaMagentaRevisar - reinicio reciente
>= 1 díaVerdeNormal

Recomendación práctica

Tras un reinicio, SQL Server necesita tiempo para "calentar" su caché. El Buffer Cache Hit Ratio y PLE serán bajos inicialmente. Monitorice estos valores durante las primeras horas para asegurar que se estabilizan.


Max SQL Server Memory stat

Valor máximo de memoria que SQL Server puede utilizar (Target Server Memory).

Importancia: Según la documentación oficial de Microsoft, configurar correctamente la memoria máxima es crítico para evitar que SQL Server consuma toda la RAM del servidor, dejando sin recursos al sistema operativo.

Fórmula recomendada por Microsoft:

  • Servidores dedicados: RAM Total - 4 GB (para el SO) - RAM para otros servicios
  • Servidores con 16+ GB: Dejar 4 GB para los primeros 16 GB, más 1 GB por cada 8 GB adicionales

Buena práctica

Nunca dejar este valor en el predeterminado (2,147,483,647 MB). Un servidor con 32 GB de RAM debería tener Max Server Memory configurado aproximadamente en 26-28 GB.


Used SQL Server Memory stat

Cantidad de memoria que SQL Server está utilizando actualmente (Total Server Memory).

Importancia: La diferencia entre Target y Total Server Memory indica si SQL Server está bajo presión de memoria. Si Total es significativamente menor que Target, puede indicar que el sistema no tiene suficiente carga o que hay problemas de configuración.


Free Space in Tempdb stat

Espacio libre dentro de los ficheros de tempdb. Indica la diferencia entre el espacio asignado y el espacio utilizado por objetos.

Importancia: TempDB es utilizado por SQL Server para ordenaciones, hash joins, tablas temporales, versionado de filas (RCSI/Snapshot) y operaciones internas. Es una de las bases de datos más críticas para el rendimiento.

Umbrales:

ValorColorAcción
< 512 MBRojoCrítico - liberar espacio
512 MB - 1 GBMagentaRevisar
> 1 GBVerdeNormal

Mejores prácticas para TempDB (Microsoft)

Según las recomendaciones de Microsoft:

  1. Múltiples archivos de datos: Crear un archivo por cada core lógico (hasta 8 archivos)
  2. Tamaño igual: Todos los archivos deben tener el mismo tamaño inicial y crecimiento
  3. Disco dedicado: Ubicar TempDB en discos rápidos (SSD/NVMe) separados de los datos de usuario
  4. Pre-dimensionar: Configurar un tamaño inicial adecuado para evitar autocrecimientos frecuentes

Page Life Expectancy (PLE) stat

Tiempo en segundos que una página de datos permanece en el buffer pool antes de ser descartada. Es el indicador más importante de presión de memoria en SQL Server.

Importancia: El PLE es uno de los contadores más críticos según la documentación de Microsoft sobre Buffer Manager. Un PLE bajo significa que las páginas se expulsan rápidamente del buffer pool, forzando lecturas constantes desde disco.

Interpretación:

ValorEstadoAcción
< 300 segRojo - CríticoInvestigar inmediatamente
300 - 1000 segMagenta - RevisarMonitorizar tendencia
1000 - 3000 segAmarilloAceptable pero mejorable
> 3000 segVerde - NormalSistema saludable

Causas comunes de PLE bajo

  1. Memoria insuficiente: Max Server Memory configurado muy bajo
  2. Table scans: Queries que escanean tablas completas en lugar de usar índices
  3. Índices faltantes: Falta de índices apropiados para las queries ejecutadas
  4. Queries con resultados grandes: SELECT * de tablas grandes sin filtros
  5. Carga de trabajo pico: Aumento temporal de actividad

Recomendación práctica

Fórmula moderna para PLE: Microsoft ya no recomienda un valor fijo de 300. La fórmula actualizada es:

PLE mínimo = (Max Server Memory en GB / 4) × 300

Ejemplo: Servidor con 64 GB → PLE mínimo = (64/4) × 300 = 4,800 segundos

Acciones de remediación:

  1. Revisar queries con alto logical reads usando sys.dm_exec_query_stats
  2. Identificar índices faltantes con sys.dm_db_missing_index_details
  3. Evaluar incrementar Max Server Memory
  4. Analizar si hay table scans innecesarios

Buffer Cache Hit Ratio stat

Porcentaje de páginas de datos encontradas en memoria caché sin necesidad de leer desde disco.

Importancia: Este contador mide la eficiencia del buffer pool. Según Microsoft, un valor alto indica que la mayoría de las solicitudes de datos se satisfacen desde memoria.

Interpretación:

ValorEstadoAcción
< 95%RojoCrítico - problema serio de memoria
95% - 98%MagentaRevisar configuración de memoria
98% - 99%AmarilloAceptable
> 99%VerdeÓptimo

Nota importante

Para sistemas OLTP, este valor debería estar siempre por encima del 99%. Valores más bajos son aceptables solo para:

  • Sistemas de Data Warehouse con queries ad-hoc
  • Inmediatamente después de un reinicio (período de calentamiento)
  • Cargas de trabajo que leen datos históricos raramente accedidos

Diferencia entre PLE y Buffer Cache Hit Ratio:

  • Buffer Cache Hit Ratio: Mide el porcentaje de aciertos (instantáneo)
  • PLE: Mide cuánto tiempo permanecen las páginas (estabilidad)

Un sistema puede tener buen Hit Ratio pero mal PLE si las páginas se están rotando constantemente.


Backup/Restore Throughput stat

Velocidad de operaciones de backup y restore en bytes por segundo.

Importancia: Permite evaluar si los backups están operando a velocidad óptima o si hay cuellos de botella de I/O.

Optimización de backups

Para mejorar el throughput de backups:

  1. Usar backup compression (reducción típica del 60-80%)
  2. Realizar backups a múltiples archivos en paralelo
  3. Configurar BUFFERCOUNT y MAXTRANSFERSIZE apropiados
  4. Usar almacenamiento rápido para destino de backups

CPU Count stat

Número de núcleos de CPU disponibles para SQL Server.

Importancia: Este valor afecta directamente la configuración de MAXDOP y el licenciamiento. SQL Server Standard Edition está limitado a 24 cores.


Memory Grants Pending stat

Número de procesos esperando que se les asigne memoria de workspace para ejecutar operaciones.

Importancia: Según Microsoft, este contador indica si hay queries esperando memoria para realizar ordenaciones, hash joins u otras operaciones que requieren workspace memory.

Interpretación:

ValorEstadoAcción
0VerdeNormal - no hay esperas
1-5MagentaRevisar queries con memory grants altos
> 5RojoCrítico - investigar inmediatamente

Impacto de Memory Grants Pending > 0

Cuando hay queries esperando memory grants:

  1. Las queries se encolan y esperan, aumentando la latencia
  2. El rendimiento general del sistema se degrada
  3. Los usuarios experimentan timeouts

El valor debe ser SIEMPRE cero en un sistema saludable.

Acciones de remediación:

  1. Identificar queries con memory grants excesivos usando sys.dm_exec_query_memory_grants
  2. Revisar queries con estimaciones de cardinalidad incorrectas
  3. Actualizar estadísticas con UPDATE STATISTICS
  4. Considerar Resource Governor para limitar memory grants por query

Active Temp Tables stat

Número de tablas temporales (#temp) existentes actualmente en el servidor.

Importancia: Un número muy alto puede indicar que las aplicaciones están creando muchas tablas temporales sin liberarlas, o que hay sesiones de larga duración acumulando objetos temporales.


Version Store Size stat

Tamaño del almacén de versiones en TempDB utilizado para Snapshot Isolation y RCSI.

Importancia: El Version Store es usado por:

  • Read Committed Snapshot Isolation (RCSI): Permite lecturas consistentes sin bloqueos
  • Snapshot Isolation: Aislamiento a nivel de transacción
  • Online Index Operations: Reconstrucción de índices sin bloquear lecturas
  • Always On Readable Secondaries: Lecturas en réplicas secundarias

Según Microsoft

Un Version Store muy grande puede indicar:

  • Transacciones de larga duración que mantienen versiones antiguas
  • Alta carga de escrituras con RCSI habilitado
  • Queries de larga duración en réplicas secundarias de Always On

Monitorizar con: sys.dm_tran_version_store_space_usage


Checkpoint pages/sec stat

Páginas modificadas (dirty pages) escritas a disco durante operaciones de checkpoint.

Importancia: Los checkpoints escriben páginas modificadas del buffer pool al disco para garantizar la durabilidad de las transacciones. Un valor muy alto sostenido puede indicar:

  • Alta carga de escrituras
  • Checkpoints muy frecuentes
  • Posible cuello de botella de I/O

Indirect Checkpoints (SQL Server 2016+)

Microsoft recomienda usar Indirect Checkpoints con TARGET_RECOVERY_TIME configurado a 60 segundos. Esto proporciona tiempos de recuperación más predecibles y reduce los picos de I/O.


Page lookups/sec stat

Número de solicitudes por segundo para localizar una página en el buffer pool.

Importancia: Indica el nivel de actividad de lectura lógica. Valores muy altos pueden indicar queries ineficientes que leen muchas páginas.


Average User Connections stat

Promedio de conexiones de usuario simultáneas. SQL Server soporta un máximo de 32,767 conexiones.

Umbrales:

ValorEstadoAcción
< 25,000VerdeNormal
>= 25,000MagentaRevisar - cercano al límite

Connection Pooling

Un número muy alto de conexiones puede indicar problemas de connection pooling en las aplicaciones. Cada conexión consume memoria (~1.5 MB por conexión). Verificar:

  1. Que las aplicaciones usen connection pooling
  2. Que las conexiones se cierren correctamente
  3. Que no haya conexiones huérfanas

Databases Info

Estado y salud de las bases de datos en la instancia.


Databases Health stat

Indicador agregado de salud. Suma de bases de datos en estados problemáticos.

Interpretación:

ValorTextoEstado
0HEALTHYVerde - todas las bases de datos operativas
>= 1NOT HEALTHYMagenta - investigar inmediatamente

Estados de Base de Datos stat

Contadores individuales por estado de base de datos.

Estados de base de datos según Microsoft:

EstadoDescripciónAcción
ONLINEBase de datos accesibleEstado normal
OFFLINEDesconectada manualmenteVerificar si es intencional
SUSPECTPosible corrupción detectadaEjecutar DBCC CHECKDB, restaurar si es necesario
RECOVERINGEn proceso de recuperaciónEsperar a que termine
PENDINGError de recursos durante recoveryRevisar logs de errores
RESTORINGRestauración en progresoEstado transitorio normal

Estado SUSPECT

Una base de datos SUSPECT indica que el filegroup primario puede estar dañado. Acciones inmediatas:

  1. Revisar el SQL Server Error Log
  2. Ejecutar DBCC CHECKDB('database_name') WITH NO_INFOMSGS
  3. Si hay corrupción, evaluar opciones de reparación o restauración
  4. Nunca usar DBCC CHECKDB WITH REPAIR_ALLOW_DATA_LOSS sin entender las consecuencias

Database Size

Visualización del tamaño de bases de datos individuales y evolución temporal.


Data File Size / Log File Size piechart

Distribución visual del tamaño de archivos de datos y log por base de datos.

Buenas prácticas de gestión de archivos

  1. Pre-dimensionar archivos: Evitar autocrecimientos frecuentes
  2. Crecimiento en MB, no en %: Usar incrementos fijos (512 MB - 1 GB)
  3. Separar data y log: Ubicar en discos diferentes si es posible
  4. Monitorizar crecimiento: Detectar crecimientos anormales temprano

Performance Counters

Gráficos de evolución temporal de los principales contadores de rendimiento.


SQL Stats timeseries

Métricas de actividad SQL: batch requests, compilaciones, logins y bloqueos.

Métricas incluidas y su significado:

MétricaDescripciónValor ideal
Batch Requests/secNúmero de lotes SQL recibidosDepende de la carga
SQL Compilations/secNuevos planes de ejecución creados< 10% de Batch Requests
SQL Re-Compilations/secPlanes recompilados< 1% de Compilations
Processes blockedProcesos esperando locks0

Ratio de Compilaciones

Si SQL Compilations/sec es alto respecto a Batch Requests/sec, indica que los planes no se están reutilizando. Causas comunes:

  • Queries ad-hoc sin parametrización
  • Uso excesivo de SQL dinámico
  • OPTION (RECOMPILE) innecesario
  • Estadísticas desactualizadas

Solución: Habilitar "Optimize for Ad Hoc Workloads" y parametrizar queries.


Access Methods timeseries

Contadores que muestran cómo SQL Server accede a los datos: scans, seeks, lookups.

Métricas clave de Access Methods:

MétricaSignificadoObjetivo
Index Searches/secOperaciones de búsqueda por índice (seeks)Alto = bueno
Full Scans/secEscaneos completos de tabla/índiceBajo = bueno
Range Scans/secEscaneos de rango en índicesDepende
Page Splits/secDivisiones de página por insercionesBajo = bueno

Ratio Scans vs Seeks

Un ratio alto de Full Scans/sec respecto a Index Searches/sec indica posibles índices faltantes o queries mal optimizadas. Investigar con el DMV sys.dm_db_missing_index_details.


Guía de Interpretación

Indicadores Críticos

MétricaValor CríticoImpactoAcción Recomendada
Page Life Expectancy< 300 segRendimiento degradadoAumentar memoria, optimizar queries
Buffer Cache Hit Ratio< 95%Lecturas excesivas a discoAumentar RAM, revisar índices
Memory Grants Pending> 0Queries en colaActualizar estadísticas, revisar queries
Databases SUSPECT>= 1Posible pérdida de datosDBCC CHECKDB, restaurar si necesario

Correlación de Métricas

Para diagnosticar problemas de rendimiento, correlacione estas métricas:

SíntomaMétricas a revisarCausa probable
Queries lentasPLE, Buffer Cache, Memory GrantsPresión de memoria
TimeoutsProcesses Blocked, User ConnectionsBloqueos o límite de conexiones
I/O altoCheckpoint pages/sec, Full Scans/secÍndices faltantes o checkpoints
CPU altoBatch Requests, CompilationsAlta carga o recompilaciones

Frecuencia de Revisión

TareaFrecuenciaHerramienta
Revisar PLE y Buffer CacheDiarioEste dashboard
Verificar estado de bases de datosDiarioEste dashboard
Analizar tendencias de crecimientoSemanalDatabase Growth dashboard
Revisar Memory Grants y bloqueosSemanalProcess Status dashboard
Auditoría completa de rendimientoMensualTodos los dashboards

Referencias de Microsoft

| Tema | Enlace | |------|--------|6 | Buffer Manager Object | learn.microsoft.com | | Memory Manager Object | learn.microsoft.com | | Server Memory Options | learn.microsoft.com | | TempDB Best Practices | learn.microsoft.com | | Database States | learn.microsoft.com | | Database Checkpoints | learn.microsoft.com |


Stored Procedures Utilizados

Este dashboard utiliza procedimientos almacenados del esquema [Counters]:

ProcedimientoDescripción
spUpTimeDatabaseCalcula el tiempo de actividad
spLastPerformanceCountersObtiene el último valor de un contador
spAVGPerformanceCountersGroupByIntervalPromedio de contadores agrupado por intervalo
spMaxPerformanceCountersGroupByIntervalMáximo de contadores agrupado por intervalo

Vistas Utilizadas

VistaDescripción
[Counters].[vwDatabaseStatus]Estado de las bases de datos por servidor