Registos de consultas lentas na Base 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 de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?

No Banco de Dados do Azure para MySQL, o log de consulta lenta está disponível para os usuários. O acesso ao log de transações não é suportado. 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 consulta lenta do MySQL, consulte a seção de log de consulta lenta do manual de referência do MySQL.

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

Configurar o log de consultas lentas

Por padrão, o log de consulta lenta está desabilitado. Para habilitá-lo, defina 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 de long_query_time (em segundos) essa consulta será registrada. A predefinição é 10 segundos.
  • log_slow_admin_statements: se a ON incluir declarações administrativas como ALTER_TABLE e ANALYZE_TABLE nas declarações escritas ao slow_query_log.
  • log_queries_not_using_indexes: Determina se as consultas que não usam índices são registradas no slow_query_log
  • log_throttle_queries_not_using_indexes: Este parâmetro limita o número de consultas sem índice que podem ser gravadas no log de consultas lentas. Este parâmetro entra em vigor quando log_queries_not_using_indexes está definido como ON.
  • log_output: se "Arquivo", permite que o log de consulta lenta seja gravado no armazenamento do servidor local e nos Logs de Diagnóstico do Azure Monitor. Se for “Nenhum”, o registo de consultas lentas só será escrito nos Registos de Diagnósticos do Azure Monitor.

Importante

Se as tabelas não estiverem indexadas, a definição dos parâmetros log_queries_not_using_indexes e log_throttle_queries_not_using_indexes como Ativados poderá afetar o desempenho do MySQL, uma vez que todas as consultas em execução nestas tabelas não indexadas serão escritas no registo de consultas lentas.

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

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

Aceder a registos de consultas lentas

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

Para armazenamento de servidor local, você pode listar e baixar logs de consulta lenta usando o portal do Azure ou a CLI do Azure. No portal do Azure, navegue para o seu servidor. No título Monitoramento, selecione a página Logs do Servidor. Para obter mais informações sobre a CLI do Azure, veja Configurar e aceder a registos de consultas lentas na CLI do Azure.

Os Logs de Diagnóstico do Azure Monitor permitem canalizar logs de consulta lentos para Logs do Monitor do Azure (Análise de Log), Armazenamento do Azure ou Hubs de Eventos. Veja abaixo mais informações.

Retenção de log de armazenamento do servidor local

Ao efetuar o registro no armazenamento local do servidor, os logs ficam disponíveis por até sete dias a partir de sua 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.

Os logs são alternados a cada 24 horas ou 7 GB, o que ocorrer primeiro.

Nota

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

Registos de diagnósticos

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

Nota

As contas de Armazenamento Premium não são suportadas se enviar os registos para o armazenamento do Azure através de diagnósticos e definiçõ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 O seu ID de inquilino
SourceSystem Azure
TimeGenerated [UTC] Carimbo de data/hora quando o log foi gravado em UTC
Type Tipo de log. Sempre AzureDiagnostics
SubscriptionId GUID para a assinatura à qual 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 do recurso
Resource Nome do servidor
Category MySqlSlowLogs
OperationName LogEvent
Logical_server_name_s Nome do servidor
start_time_t [UTC] Hora de início da consulta
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 foi bloqueada
user_host_s Username
rows_sent_d Número de linhas enviadas
rows_examined_s Número de linhas examinadas
last_insert_id_s last_insert_id
insert_id_s Inserir ID
sql_text_s Consulta completa
server_id_s ID do servidor
thread_id_s Thread ID
\_ResourceId URI do recurso

Nota

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

Analisar logs nos Logs do Azure Monitor

Depois que seus logs de consulta lenta são canalizados para os Logs do Azure Monitor por meio dos Logs de Diagnóstico, você pode executar uma análise adicional de suas consultas lentas. Abaixo estão alguns exemplos de consultas para ajudá-lo a começar. Certifique-se de atualizar o abaixo com o nome do servidor.

  • Consultas com mais de 10 segundos em um determinado servidor

    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 consultas mais longas em um determinado servidor

    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 por tempo de consulta mínimo, máximo, médio e 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
    
  • Representar graficamente a distribuição lenta de consultas 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 os 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
    

Passos Seguintes