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