Logs de consultas lentas no Banco de Dados do Azure para MySQL – Servidor Flexível

APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor flexível

No servidor flexível do Banco de Dados do Azure para MySQL, o log de consultas lentas está disponível para os usuários configurarem e acessarem. Os logs de consultas lentas estão desabilitados por padrão e podem ser habilitados para auxiliar na identificação de gargalos de desempenho durante a solução de problemas.

Para obter mais informações sobre o log de consultas lentas do MySQL, consulte a seção de log de consulta lenta na documentação do mecanismo MySQL.

Configurar o registro em log de consultas lentas

Por padrão, o log de consultas lentas está desabilitado. Para habilitar os logs, defina o parâmetro de servidor slow_query_log como ON. Isso pode ser configurado por meio do portal do Azure ou da CLI do Azure.

Outros parâmetros que você pode ajustar para controlar o comportamento do log de consultas lentas incluem:

  • long_query_time: registra uma consulta se demorar mais do que long_query_time (em segundos) para ser concluída. O padrão é 10 segundos. O parâmetro do servidor long_query_time se aplica globalmente a todas as conexões recém-estabelecidas no MySQL. No entanto, isso não afeta os threads que já estão conectados. É recomendável reconectar-se ao servidor flexível do Banco de Dados do Azure para MySQL a partir do aplicativo ou reiniciar o servidor ajudará a limpar threads com valores mais antigos de "long_query_time" e aplicar o valor do parâmetro atualizado.
  • log_slow_admin_statements: determina se instruções administrativas (ex. ALTER_TABLE, ANALYZE_TABLE) são registradas.
  • log_queries_not_using_indexes: determina se as consultas que não usam índices são registradas.
  • log_throttle_queries_not_using_indexes: limita o número de consultas não indexadas que podem ser gravadas no log de consultas lentas. Esse parâmetro entra em vigor quando log_queries_not_using_indexes é definido como ON

Importante

Se as tabelas não estiverem indexadas, a definição de parâmetros log_queries_not_using_indexes e log_throttle_queries_not_using_indexes como ON poderá afetar o desempenho do MySQL, pois todas as consultas em execução nessas tabelas não indexadas serão gravadas no log de consultas lentas.

Consulte a documentação de log de consulta lenta MySQL para descrições completas dos parâmetros de log de consultas lentas.

Acessar logs de consultas lentas

Os logs de consultas lentas são integrados às configurações de diagnóstico do Azure Monitor. Após habilitar os logs de consultas lentas na instância de servidor flexível do Banco de Dados do Azure para MySQL, é possível emiti-los para logs do Azure Monitor, hubs de eventos ou armazenamento do Azure. Para saber mais sobre as configurações de diagnóstico, confira a documentação de logs de diagnóstico. Para saber mais sobre como habilitar as configurações de diagnóstico no portal do Azure, confira o artigo sobre o portal de log de consultas lentas.

Observação

As contas de Armazenamento Premium não têm suporte se você envia os logs para o Armazenamento do Azure por meio de diagnóstico e configurações.

A tabela a seguir descreve a saída do log de consultas lentas. Dependendo do método de saída, os campos incluídos e a ordem em que aparecem podem variar.

Propriedade Descrição
TenantId Sua ID de locatário
SourceSystem Azure
TimeGenerated [UTC] Carimbo de data/hora quando o log foi gravado, em UTC
Type Tipo do log. Sempre AzureDiagnostics
SubscriptionId GUID para a assinatura a que o servidor pertence
ResourceGroup Nome do grupo de recursos ao qual o servidor pertence
ResourceProvider Nome do provedor de recursos. Sempre MICROSOFT.DBFORMYSQL
ResourceType Servers
ResourceId URI de recurso
Resource Nome do servidor
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Nome do servidor
start_time_t [UTC] Horário em que a consulta começou
query_time_s Tempo total em segundos que a consulta levou para ser executada
lock_time_s Tempo total em segundos em que a consulta ficou bloqueada
user_host_s Nome de Usuário
rows_sent_s Número de linhas enviadas
rows_examined_s Número de linhas verificadas
last_insert_id_s last_insert_id
insert_id_s Inserir ID
sql_text_s Consulta completa
server_id_s O ID do servidor
thread_id_s ID do thread
\_ResourceId URI de recurso

Observação

Para sql_text_s, o log será truncado se exceder 2048 caracteres.

Exibir logs nos Logs do Azure Monitor

Depois que os logs de consultas lentas são canalizados para os Logs do Azure Monitor por meio dos Logs de Diagnóstico, você pode executar uma análise adicional das consultas lentas. Abaixo estão algumas consultas de exemplo para ajudar você a começar. Atualize as informações abaixo com o nome do servidor.

  • Consultas com mais de 10 segundos em um servidor específico

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | where query_time_d > 10
    
  • Listar as 5 principais consultas mais longas em um servidor específico

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | order by query_time_d desc
    | take 5
    
  • Resumir consultas lentas pelo tempo de consulta mínimo, máximo, médio e de desvio padrão em um servidor específico

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | summarize count(), min(query_time_d), max(query_time_d), avg(query_time_d), stdev(query_time_d), percentile(query_time_d, 95) by Resource 
    
  • Grafar a distribuição de consultas lentas em um servidor específico

    AzureDiagnostics
    | where Resource  == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | summarize count() by Resource , bin(TimeGenerated, 5m)
    | render timechart
    
  • Exibir consultas com mais de 10 segundos em todas as instâncias de servidor flexível do Banco de Dados do Azure para MySQL com Logs de Diagnóstico habilitados

    AzureDiagnostics
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, Resource , event_class_s, start_time_t , query_time_d, sql_text_s
    | where query_time_d > 10
    

Próximas etapas