Compartilhar via


Logs de consultas lentas no Banco de Dados do Azure para MySQL

APLICA-SE A: Banco de Dados do Azure para MySQL – Servidor Único

Importante

O servidor único do Banco de Dados do Azure para MySQL está no caminho da desativação. É altamente recomendável que você atualize para o servidor flexível do Banco de Dados do Azure para MySQL. Para obter mais informações sobre a migração para o servidor flexível do Banco de Dados do Azure para MySQL, confira O que está acontecendo com o Servidor Único do Banco de Dados do Azure para MySQL?

No Banco de Dados do Azure para MySQL, o log de consultas lentas está disponível para os usuários. No entanto, não há suporte para acesso ao log de transação. O log de consultas lentas pode ser usado para identificar gargalos de desempenho para solução de problemas.

Para obter mais informações sobre o log de consultas lentas do MySQL, consulte o manual de referência de MySQL seção de log de consulta lenta.

Quando o Repositório de Consultas estiver habilitado no servidor, você poderá ver as consultas como "CALL mysql.az_procedure_collect_wait_stats (900, 30);" registradas em seus logs de consultas lentas. Esse comportamento é esperado, pois o recurso Repositório de Consultas coleta estatísticas sobre as consultas.

Configurar o registro em log de consultas lentas

Por padrão, o log de consultas lentas está desabilitado. Para habilitar, configure slow_query_log como ON. Isso pode ser habilitado usando o portal do Azure ou a CLI do Azure.

Outros parâmetros que você pode ajustar incluem:

  • long_query_time: se uma consulta demorar mais do que long_query_time (em segundos), essa consulta será registrada. O padrão é 10 segundos.
  • log_slow_admin_statements: se ON inclui instruções administrativas como ALTER_TABLE e ANALYZE_TABLE nas instruções gravadas para o slow_query_log.
  • log_queries_not_using_indexes: determina se as consultas que não usam índices são ou não registradas para o slow_query_log
  • log_throttle_queries_not_using_indexes: este parâmetro limita o número de consultas que não são de índice que podem ser gravadas no log de consultas lentas. Esse parâmetro tem efeito quando log_queries_not_using_indexes está definido como ON.
  • log_output: se for "File", permite que o log de consultas lentas seja gravado no armazenamento do servidor local e nos logs de diagnóstico do Azure Monitor. Se for "None", o log de consultas lentas só será gravado em logs de diagnóstico do Azure Monitor.

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.

Se você planeja registrar em log consultas lentas por um longo período de tempo, é recomendável definir log_output como "None". Se definido como "File", esses logs são gravados no armazenamento do servidor local e podem afetar o desempenho do MySQL.

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

Há duas opções para acessar logs de consultas lentas no Banco de Dados do Azure para MySQL: o armazenamento de servidor local ou os logs de diagnóstico do Azure Monitor. Isso é definido usando o parâmetro log_output.

Para o armazenamento do servidor local, você pode listar e baixar logs de consultas lentas usando o portal do Azure ou o CLI do Azure. Na portal do Azure, encontre o servidor. Sob o título Monitoramento, selecione a página Logs do Servidor. Para obter mais informações sobre a CLI do Azure, consulte Configurar e acessar logs de consultas lentas usando a CLI do Azure.

Os logs de diagnóstico do Azure Monitor permitem canalizar logs de consultas lentas para logs do Azure Monitor (análise de logs), Armazenamento do Azure ou Hubs de Eventos do Azure. Veja a seguir para obter mais informações.

Retenção de log de armazenamento do servidor local

Ao fazer logon no armazenamento local do servidor, os logs ficam disponíveis por até sete dias a partir de criação. Se o tamanho total dos logs disponíveis exceder 7 GB, os arquivos mais antigos serão excluídos até que haja espaço disponível. O limite de armazenamento de 7 GB para os logs do servidor está disponível gratuitamente e não pode ser estendido.

Logs são reciclados a cada 24 horas ou 7 GB, o que ocorrer primeiro.

Observação

A retenção de log acima não se aplica a logs que são canalizados usando logs de diagnóstico do Azure Monitor. Você pode alterar o período de retenção dos coletores de dados para os quais estão sendo emitidos (por exemplo, Armazenamento do Microsoft Azure).

Logs de diagnóstico

O Banco de Dados do Azure para MySQL é integrado aos Logs de Diagnóstico do Monitor do Azure. Depois de ativar os logs de consultas lentas em seu servidor MySQL, você pode optar por emiti-los para os logs do Azure Monitor, Hubs de Eventos ou Armazenamento do Azure. Para saber mais sobre como ativar logs de diagnóstico, consulte o como parte da documentação registros de diagnóstico.

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 o que está em cada log. 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_d 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, 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 LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_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 LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_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 LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_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 LogicalServerName_s
    
  • Grafar a distribuição de consultas lentas em um servidor específico

    AzureDiagnostics
    | where LogicalServerName_s == '<your server name>'
    | where Category == 'MySqlSlowLogs'
    | project TimeGenerated, LogicalServerName_s, start_time_t , query_time_d, sql_text_s 
    | summarize count() by LogicalServerName_s, bin(TimeGenerated, 5m)
    | render timechart
    
  • Exibir consultas com mais de 10 segundos em todos os servidores MySQL com logs de diagnóstico habilitados

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

Próximas etapas