Una base de datos está experimentando una degradación del rendimiento. Es necesario identificar las consultas que consumen más recursos, rastrear los cambios de plan y encontrar regresiones de rendimiento.
→Habilitar y utilizar Query Store.
Por qué: Query Store es la "caja negra" incorporada para el rendimiento de las consultas. Captura automáticamente el historial de consultas, los planes y las estadísticas de espera, lo que la convierte en la herramienta principal para diagnosticar problemas de rendimiento a lo largo del tiempo.
Referencia↗
Una consulta se ejecuta bien a veces pero mal otras veces debido a problemas de parameter sniffing, donde un plan de ejecución se optimiza para un valor de parámetro no representativo.
→Usar Query Store para identificar los diferentes planes y forzar el plan de ejecución consistentemente bueno.
Por qué: El forzado de planes en Query Store proporciona una forma rápida y efectiva de estabilizar el rendimiento de consultas problemáticas sin cambios en el código. Anula la elección del optimizador con un plan conocido y bueno.
Mejorar el rendimiento de las consultas sin cambios en el código aprovechando características como el modo por lotes en rowstore, la retroalimentación de la concesión de memoria y la compilación diferida de variables de tabla.
→Establecer el nivel de compatibilidad de la base de datos en 150 (para características de SQL 2019) o superior.
Por qué: El conjunto de características de Intelligent Query Processing (IQP) se habilita mediante el nivel de compatibilidad de la base de datos. El nivel 150+ activa una amplia gama de mejoras de rendimiento "sin cambios de código" en el procesador de consultas.
El equipo de operaciones necesita ser notificado cuando las métricas clave de rendimiento, como el porcentaje de CPU o los interbloqueos, superan un umbral definido.
→Usar Azure Monitor para crear alertas de métricas (para CPU) y alertas de registro (para interbloqueos) que activen un Grupo de Acciones.
Por qué: Azure Monitor es la plataforma centralizada para monitorear y alertar sobre los recursos de Azure. Los Grupos de Acciones proporcionan canales de notificación flexibles (correo electrónico, SMS, webhook, etc.).
Mejorar el rendimiento de escritura identificando y eliminando índices que no están siendo utilizados por ninguna consulta de lectura.
→Consultar la DMV `sys.dm_db_index_usage_stats`.
Por qué: Esta DMV rastrea el uso del índice (búsquedas, exploraciones, búsquedas) frente a las actualizaciones. Los índices con muchas actualizaciones pero cero o muy poco uso son candidatos principales para la eliminación, reduciendo la sobrecarga de mantenimiento.
Necesidad de capturar información detallada sobre problemas de bloqueo intermitentes, incluyendo las sentencias y sesiones involucradas en la cadena de bloqueo.
→Configurar una sesión de Extended Events que capture el evento `blocked_process_report`.
Por qué: Este evento proporciona un informe XML detallado de las cadenas de bloqueo cuando se excede el `blocked process threshold`, ofreciendo información de diagnóstico profunda no disponible en las DMVs.
Una base de datos necesita que su estrategia de índices se adapte automáticamente a los patrones de carga de trabajo cambiantes sin intervención manual.
→Habilitar la opción CREATE_INDEX en la sintonización automática de Azure SQL Database.
Por qué: Esta característica permite a Azure analizar la carga de trabajo, identificar índices faltantes de alto impacto, crearlos y validar su beneficio de rendimiento, automatizando una tarea clave de DBA.
Descargar cargas de trabajo de informes intensivas en lectura de la base de datos OLTP principal en un nivel Business Critical o Premium.
→Modificar las cadenas de conexión de solo lectura de la aplicación para incluir `ApplicationIntent=ReadOnly`.
Por qué: Estos niveles incluyen una réplica secundaria legible gratuita e integrada. La propiedad `ApplicationIntent` en la cadena de conexión enruta automáticamente las conexiones de solo lectura a esta réplica, aislando las cargas de trabajo de lectura.
Una tabla de hechos grande en un almacén de datos se utiliza con frecuencia para consultas de agregación (SUM, COUNT, AVG) que se están ejecutando lentamente.
→Crear un índice columnstore agrupado en la tabla de hechos.
Por qué: Los índices columnstore almacenan datos en formato columnar, proporcionando una compresión de datos muy alta y permitiendo la ejecución en modo por lotes, lo que acelera drásticamente las consultas analíticas intensivas en agregación y escaneo.
Una base de datos experimenta una contención de bloqueo significativa entre las consultas de lectura (informes) y las consultas de escritura (transacciones).
→Habilitar Read Committed Snapshot Isolation (RCSI) en la base de datos.
Por qué: RCSI utiliza el versionado de filas, permitiendo a los lectores ver la última versión confirmada de los datos sin tomar bloqueos compartidos, eliminando así los bloqueos de los escritores. Los escritores no bloquean a los lectores.
Una aplicación que utiliza una base de datos Serverless experimenta tiempos de conexión iniciales lentos después de un período de inactividad.
→Disminuir el retardo de auto-pausa o configurar un valor mínimo de vCore mayor que cero.
Por qué: El retardo es causado por la reanudación de la base de datos desde un estado de pausa (arranque en frío). Establecer un valor mínimo de vCore evita que la base de datos se pause por completo, eliminando la latencia de reanudación a costa de cierta facturación de cómputo continua.