Explorar cenários de desempenho
Para decidir como usar ferramentas e recursos de desempenho, é importante examinar o desempenho do SQL do Azure por meio de cenários.
Entender cenários comuns de desempenho
Uma técnica comum para solução de problemas de desempenho do SQL Server é examinar se um problema de desempenho está em execução (CPU alta) ou aguardando (aguardando um recurso). O diagrama a seguir mostra uma árvore de decisão para determinar se um problema de desempenho do SQL Server está em execução ou aguardando e como usar as ferramentas de desempenho para determinar a causa e a solução.
Primeiro, examine o uso geral dos recursos. Para uma implantação do SQL Server padrão, você pode usar ferramentas como o Monitor de Desempenho no Windows ou Linux. Para o SQL Azure, você pode usar os seguintes métodos:
Portal do Azure/PowerShell/alertas
O Azure Monitor tem métricas integradas para exibir o uso de recursos do SQL Azure. Você também pode configurar alertas para buscar condições de uso de recursos.
sys.dm_db_resource_statsPara o Banco de Dados SQL do Azure, você pode examinar essa DMV para ver o uso de recursos de CPU, memória e E/S para a implantação do banco de dados. Essa DMV faz um instantâneo desses dados a cada 15 segundos.
sys.server_resource_statsEssa DMV se comporta exatamente como
sys.dm_db_resource_stats, mas é usada para ver o uso de recursos da Instância Gerenciada de SQL em termos de CPU, memória e E/S. Essa DMV também faz um instantâneo a cada 15 segundos.sys.dm_user_db_resource_governancePara o Banco de Dados SQL do Azure, este DMV retorna as definições reais de capacidade e de configuração usadas pelos mecanismos de governança de recursos no banco de dados atual ou no pool elástico.
sys.dm_instance_resource_governancePara a Instância Gerenciada de SQL do Azure, esta DMV retorna informações semelhantes a
sys.dm_user_db_resource_governance, mas da Instância Gerenciada do Banco de Dados SQL atual.
Em execução
Se você determinou que o problema é a alta utilização da CPU, trata-se de um cenário de execução. Um cenário de execução pode envolver consultas que consomem recursos por meio da compilação ou da execução. Use as seguintes ferramentas para análise adicional:
Repositório de Consultas
Use os relatórios de Recursos com maior consumo de recursos no SSMS, s exibições de catálogo do Repositório de Consultas ou a Análise de Desempenho de Consultas no portal do Azure (somente para o Banco de Dados SQL do Azure) para descobrir quais consultas estão consumindo a maioria dos recursos da CPU.
sys.dm_exec_requestsUse essa DMV no SQL Azure para ter um instantâneo do estado das consultas ativas. Procure consultas com o estado
RUNNABLEe o tipo de esperaSOS_SCHEDULER_YIELDpara ver se você tem capacidade de CPU suficiente.sys.dm_exec_query_statsEssa DMV pode ser usada de maneira muito semelhante ao Repositório de Consultas para detectar as consultas com maior consumo de recursos. Ele só está disponível para planos de consulta armazenados em cache, enquanto o Repositório de Consultas fornece um registro histórico persistente de desempenho. Essa DMV também permite localizar o plano de consulta de uma consulta armazenada em cache.
sys.dm_exec_procedure_statsEssa DMV fornece informações muito parecidas àquelas fornecidas por
sys.dm_exec_query_stats, exceto pelo fato de que as informações de desempenho podem ser exibidas no nível do procedimento armazenado.Após determinar quais consultas estão consumindo mais recursos, talvez você precise examinar se tem recursos de CPU suficientes para sua carga de trabalho. Você pode depurar os planos de consulta com ferramentas como a criação de perfil de consulta leve, as instruções SET, o Repositório de Consultas ou o rastreamento de eventos estendidos.
Aguardando
Se o problema não parece ser o uso elevado de recursos da CPU, pode se tratar de um problema de desempenho relacionado à espera por um recurso. Cenários que envolvem a espera por recursos incluem:
- Esperas de E/S
- Esperas de bloqueio
- Tempos de espera de trava
- Limites de pool de buffers
- Concessões de memória
- Remoção do cache de planos
Para executar a análise em cenários de espera, você normalmente utiliza as seguintes ferramentas:
sys.dm_os_wait_statsUse essa DMV para ver os principais tipos de espera para o banco de dados ou a instância. Ela pode orientar você quanto à próxima ação a ser adotada dependendo dos principais tipos de espera.
sys.dm_exec_requestsUse essa DMV para localizar tipos de espera específicos para consultas ativas e ver qual recurso elas estão aguardando. Poderia ser um cenário de bloqueio padrão com espera por bloqueios de outros usuários.
sys.dm_os_waiting_tasksVocê pode usar essa DMV para encontrar tipos de espera para uma tarefa específica para uma consulta específica que está em execução no momento, talvez para ver por que ela está demorando mais do que o normal.
sys.dm_os_waiting_taskscontém as estatísticas de espera ao vivo que sys.dm_os_wait_stats agrega ao longo do tempo.Repositório de Consultas
O Repositório de Consultas fornece relatórios e exibições do catálogo que mostram uma agregação das principais esperas para a execução do plano de consulta. É importante saber que uma espera de CPU é equivalente a um problema de execução.
Cenários específicos do SQL Azure
Alguns cenários de desempenho, tanto de execução quanto de espera, são específicos do SQL Azure. Entre eles, estão a governança de logs, os limites de trabalho, as esperas que ocorrem ao usar a camada de serviço Comercialmente Crítico e as esperas específicas de uma implantação da Hiperescala.
Governança de log
O SQL Azure pode usar a governança de taxa de log para impor limites de recursos quanto ao uso do log de transações. Essa imposição pode ser necessária para garantir os limites de recursos e atender ao SLA prometido. A governança de log pode ser vista nos seguintes tipos de espera:
LOG_RATE_GOVERNOR: espera pelo Banco de dados SQL do AzurePOOL_LOG_RATE_GOVERNOR: espera por Pools ElásticosINSTANCE_LOG_GOVERNOR: espera pela Instância Gerenciada de SQL do AzureHADR_THROTTLE_LOG_RATE*: espera pela latência de replicação geográfica e Comercialmente Crítica
Limites de trabalho
O SQL Server usa um pool de trabalho de threads, mas tem limites quanto ao número máximo de trabalhadores. Aplicativos com um grande número de usuários simultâneos podem ficar perto dos limites de trabalho impostos para o Banco de Dados SQL do Azure e a Instância Gerenciada SQL:
- O Banco de Dados SQL do Azure tem limites com base na camada de serviço e no tamanho. Se você ultrapassar esse limite, uma nova consulta receberá um erro.
- No momento, a Instância Gerenciada de SQL usa
max worker threads, de modo que os trabalhos que ultrapassarem esse limite poderão apresentar esperasTHREADPOOL.
Esperas do HADR Comercialmente Crítico
Se você usar uma camada de serviço Comercialmente Crítico, poderá ver inesperadamente os seguintes tipos de espera:
HADR_SYNC_COMMITHADR_DATABASE_FLOW_CONTROLHADR_THROTTLE_LOG_RATE_SEND_RECV
Embora essas esperas possam não deixar o aplicativo mais lento, talvez você não espere vê-las. Normalmente, elas são específicas do uso de um grupo de disponibilidade Always On. As camadas Comercialmente Crítico usam a tecnologia de grupo de disponibilidade para implementar os recursos de SLA e disponibilidade de uma camada de serviço Comercialmente Crítico, de modo que esses tipos de espera são esperados. Tempos de espera longos podem indicar um gargalo, como latência de E/S ou réplica atrasada.
Hiperescala
A arquitetura de Hiperescala pode levar a alguns tipos de espera exclusivos prefixados com RBIO (uma possível indicação de governança de log). Além disso, DMVs, visualizações de catálogo e eventos estendidos foram aprimorados para mostrar métricas de leituras do servidor de páginas.
No próximo exercício, você aprenderá a monitorar e a resolver um problema de desempenho no SQL do Azure usando as ferramentas e os conhecimentos adquiridos nesta unidade.