Um banco de dados está enfrentando degradação de desempenho. É necessário identificar as consultas que mais consomem recursos, rastrear alterações de plano e encontrar regressões de desempenho.
→Habilitar e utilizar o Query Store.
Por quê: O Query Store é o "gravador de dados de voo" integrado para o desempenho de consultas. Ele captura automaticamente o histórico de consultas, planos e estatísticas de espera, tornando-se a ferramenta principal para diagnosticar problemas de desempenho ao longo do tempo.
Referência↗
Uma consulta funciona bem às vezes, mas mal em outras, devido a problemas de parameter sniffing, onde um plano de execução é otimizado para um valor de parâmetro não representativo.
→Usar o Query Store para identificar os diferentes planos e forçar o plano de execução consistentemente bom.
Por quê: A imposição de plano no Query Store oferece uma maneira rápida e eficaz de estabilizar o desempenho de consultas problemáticas sem alterações de código. Ela substitui a escolha do otimizador por um plano comprovadamente bom.
Para melhorar o desempenho de consultas sem alterações de código, aproveitando recursos como o modo de lote em rowstore, feedback de concessão de memória e compilação adiada de variáveis de tabela.
→Definir o nível de compatibilidade do banco de dados para 150 (para recursos do SQL 2019) ou superior.
Por quê: O conjunto de recursos Intelligent Query Processing (IQP) é habilitado pelo nível de compatibilidade do banco de dados. O nível 150+ ativa uma ampla gama de aprimoramentos de desempenho "sem alteração de código" no processador de consultas.
A equipe de operações precisa ser notificada quando métricas chave de desempenho, como percentual de CPU ou deadlocks, excederem um limite definido.
→Usar o Azure Monitor para criar alertas de métrica (para CPU) e alertas de log (para deadlocks) que acionam um Grupo de Ação.
Por quê: O Azure Monitor é a plataforma centralizada para monitoramento e alertas em recursos do Azure. Os Grupos de Ação fornecem canais de notificação flexíveis (e-mail, SMS, webhook, etc.).
Melhorar o desempenho de gravação identificando e removendo índices que não estão sendo usados por nenhuma consulta de leitura.
→Consultar a DMV `sys.dm_db_index_usage_stats`.
Por quê: Esta DMV rastreia o uso do índice (buscas, varreduras, lookups) versus atualizações. Índices com muitas atualizações, mas uso zero ou muito baixo, são os principais candidatos à remoção, reduzindo a sobrecarga de manutenção.
É necessário capturar informações detalhadas sobre problemas de bloqueio intermitentes, incluindo as instruções e sessões envolvidas na cadeia de bloqueio.
→Configurar uma sessão de Extended Events que capture o evento `blocked_process_report`.
Por quê: Este evento fornece um relatório XML detalhado das cadeias de bloqueio quando o `blocked process threshold` é excedido, oferecendo informações diagnósticas profundas não disponíveis em DMVs.
Um banco de dados precisa que sua estratégia de índice se adapte automaticamente a padrões de carga de trabalho em mudança sem intervenção manual.
→Habilitar a opção CREATE_INDEX no ajuste automático do Azure SQL Database.
Por quê: Este recurso permite que o Azure analise a carga de trabalho, identifique índices ausentes com alto impacto, os crie e valide seu benefício de desempenho, automatizando uma tarefa chave do DBA.
Descarregar cargas de trabalho de relatório intensivas em leitura do banco de dados OLTP primário em um nível Business Critical ou Premium.
→Modificar as strings de conexão somente leitura do aplicativo para incluir `ApplicationIntent=ReadOnly`.
Por quê: Esses níveis incluem uma réplica secundária legível gratuita e integrada. A propriedade `ApplicationIntent` na string de conexão roteia automaticamente as conexões somente leitura para esta réplica, isolando as cargas de trabalho de leitura.
Uma grande tabela de fatos em um data warehouse é frequentemente usada para consultas de agregação (SUM, COUNT, AVG) que estão com desempenho lento.
→Criar um índice columnstore clusterizado na tabela de fatos.
Por quê: Os índices columnstore armazenam dados em formato colunar, proporcionando altíssima compressão de dados e habilitando a execução em modo de lote, o que acelera drasticamente as consultas analíticas de agregação e intensivas em varredura.
Um banco de dados apresenta contenção de bloqueio significativa entre consultas de leitura (relatórios) e consultas de gravação (transações).
→Habilitar Read Committed Snapshot Isolation (RCSI) no banco de dados.
Por quê: O RCSI usa versionamento de linha, permitindo que os leitores vejam a última versão confirmada dos dados sem adquirir bloqueios compartilhados, eliminando assim os bloqueios dos escritores. Os escritores não bloqueiam os leitores.
Um aplicativo usando um banco de dados Serverless experimenta tempos de conexão iniciais lentos após um período de inatividade.
→Diminuir o atraso de auto-pausa ou configurar um valor mínimo de vCore maior que zero.
Por quê: O atraso é causado pelo banco de dados que retoma de um estado pausado (cold start). Definir um valor mínimo de vCore impede que o banco de dados pause completamente, eliminando a latência de retomada ao custo de alguma cobrança contínua de computação.