O diagnóstico de SQL do AnalyticDB for MySQL coleta estatísticas de execução nos níveis de consulta, stage e operador para identificar problemas de desempenho e apresentar sugestões de otimização. Este tópico descreve os quatro tipos de diagnóstico no nível de consulta e como resolver cada um deles.
Para visualizar os resultados de diagnóstico no nível de consulta para uma consulta específica, consulte
Visualizar resultados de diagnóstico
.
Tipos de diagnóstico
|
Tipo de diagnóstico |
Impacto |
|
Torna as consultas lentas e consome largura de banda de rede do frontend |
|
|
Pode causar falhas em outras consultas e reduzir a estabilidade geral do cluster |
|
|
Consome recursos de rede e aumenta a complexidade do sistema |
|
|
Consome recursos de I/O de disco e afeta outras consultas e gravações de dados |
Grande volume de dados retornado ao cliente
Problema: Quando uma consulta retorna um grande volume de dados ao cliente, ela ocupa recursos de rede do frontend e causa lentidão na execução. Verifique o campo Returned Data na seção Query Properties da página de detalhes da consulta para confirmar o volume. Para mais informações, consulte Visualizar propriedades da consulta.
Solução: Reduza a quantidade de dados retornados ao cliente:
Adicione uma cláusula
LIMITou torne as condições de filtro mais restritivas na consulta.Exporte grandes conjuntos de resultados para o Object Storage Service (OSS) usando tabelas externas, em vez de retorná-los ao cliente. A exportação é compatível apenas com arquivos CSV e Parquet. Para mais informações, consulte Usar tabelas externas para exportar dados do AnalyticDB for MySQL para o OSS.
Alto consumo de recursos de memória por uma consulta
Problema: Uma consulta está consumindo muitos recursos de memória. Isso pode causar falhas de execução em outras consultas, reduzir a velocidade de execução e afetar a estabilidade geral do seu cluster AnalyticDB for MySQL. Verifique o campo Peak Memory na seção Query Properties da página de detalhes da consulta para confirmar o uso de memória. Para mais informações, consulte Visualizar propriedades da consulta.
Solução: Utilize os planos de execução no diagnóstico de SQL para localizar o stage ou operador que consome memória excessiva e aplique a otimização adequada:
Para consultas lentas devido ao alto uso de memória, consulte Consultas lentas que consomem recursos de memória.
Para obter um guia passo a passo sobre como ler planos de execução, consulte Usar planos de execução para analisar consultas.
Grande número de stages gerados para uma consulta
Problema: Uma consulta está gerando um grande número de stages, o que consome recursos de rede, aumenta a complexidade de processamento do sistema e apresenta riscos à estabilidade geral do cluster. Quanto maior o número de joins nas instruções SQL, maior será o número de stages gerados. Para entender o que afeta a contagem de stages, consulte Fatores que afetam o desempenho da consulta.
Solução: Reduza o número de stages gerados:
Faça o join das tabelas antes de gravar dados no AnalyticDB for MySQL para reduzir o número total de tabelas no cluster.
Diminua a quantidade de joins nas instruções SQL. Menos joins produzem menos stages.
Utilize visualizações materializadas. O AnalyticDB for MySQL reutiliza stages ao executar consultas em visualizações materializadas, o que reduz a contagem total de stages. Para mais informações, consulte Visão geral.
Grande volume de dados lido por uma consulta
Problema: Uma consulta está fazendo varredura em um grande volume de dados, consumindo recursos de I/O de disco e afetando o desempenho de outras consultas e gravações de dados. Verifique o campo Scanned Data na seção Query Properties da página de detalhes da consulta para confirmar o volume da varredura. Para mais informações, consulte Visualizar propriedades da consulta.
Solução: Primeiro, identifique o stage e o operador TableScan responsáveis pela grande varredura. Na seção Statistics do plano de execução (nível de stage), verifique Scanned Rows e Scan Size. Na seção Statistics no nível de operador, verifique Input Rows e Amount of Input Data do operador TableScan. Como referência, consulte Estatísticas de stage e Estatísticas de operador.
Após identificar o operador TableScan com a grande varredura, use uma das seguintes abordagens para reduzir o volume da varredura:
Adicione uma condição de filtro
ANDà consulta.Ajuste as condições de filtro existentes para reduzir a quantidade de dados filtrados no stage de varredura.
Verifique se alguma condição de filtro não foi propagada (pushed down) para a varredura. Nesse caso, siga as sugestões de otimização em Condições de filtro não propagadas.