Monitorar o Banco de Dados do Azure para o desempenho do MySQL com o Repositório de Consultas
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?
Aplica-se a: Banco de Dados do Azure para MySQL 5.7, 8.0
O recurso Repositório de Consultas no Banco de Dados do Azure para MySQL fornece uma maneira de acompanhar o desempenho da consulta ao longo do tempo. O Repositório de Consultas simplifica a solução de problemas de desempenho, ajudando você a encontrar rapidamente as consultas de execução mais longa e que consomem mais recursos. O Repositório de Consultas captura automaticamente um histórico de consultas e estatísticas de tempo de execução e as retém para sua revisão. Ele separa os dados por janelas de tempo para que você possa ver os padrões de uso do banco de dados. Os dados de todos os usuários, bancos de dados e consultas são armazenados no banco de dados do esquema mysql na instância do Banco de Dados do Azure para MySQL.
Cenários comuns para usar o Repositório de Consultas
O repositório de consultas pode ser usado em vários cenários, incluindo o seguinte:
- Detetando consultas regredidas
- Determinar o número de vezes que uma consulta foi executada numa determinada janela de tempo
- Comparando o tempo médio de execução de uma consulta entre janelas de tempo para ver deltas grandes
Habilitando o repositório de consultas
O Repositório de Consultas é um recurso de aceitação, portanto, não está ativo por padrão em um servidor. O repositório de consultas está habilitado ou desabilitado globalmente para todos os bancos de dados em um determinado servidor e não pode ser ativado ou desativado por banco de dados.
Habilitar o Repositório de Consultas usando o portal do Azure
- Entre no portal do Azure e selecione seu Banco de Dados do Azure para o servidor MySQL.
- Selecione Parâmetros do servidor na seção Configurações do menu.
- Procure o parâmetro query_store_capture_mode.
- Defina o valor como ALL e Save.
Para ativar as estatísticas de espera no seu Repositório de Consultas:
- Procure o parâmetro query_store_wait_sampling_capture_mode.
- Defina o valor como ALL e Save.
Aguarde até 20 minutos para que o primeiro lote de dados persista no banco de dados mysql.
Informações no Repositório de Consultas
O Repositório de Consultas tem dois armazenamentos:
- Um armazenamento de estatísticas de tempo de execução para persistir as informações de estatísticas de execução de consulta.
- Um armazenamento de estatísticas de espera para informações de estatísticas de espera persistentes.
Para minimizar o uso de espaço, as estatísticas de execução de tempo de execução no repositório de estatísticas de tempo de execução são agregadas em uma janela de tempo fixa e configurável. As informações nesses repositórios são visíveis consultando as exibições do repositório de consultas.
A consulta a seguir retorna informações sobre consultas no Repositório de Consultas:
SELECT * FROM mysql.query_store;
Ou esta consulta para estatísticas de espera:
SELECT * FROM mysql.query_store_wait_stats;
Localizando consultas de espera
Nota
As estatísticas de espera não devem ser ativadas durante as horas de pico de carga de trabalho ou ser ativadas indefinidamente para cargas de trabalho confidenciais.
Para cargas de trabalho executadas com alta utilização da CPU ou em servidores configurados com vCores mais baixos, tenha cuidado ao ativar estatísticas de espera. Não deve ser ligado indefinidamente.
Os tipos de evento de espera combinam diferentes eventos de espera em buckets por semelhança. O Repositório de Consultas fornece o tipo de evento de espera, o nome do evento de espera específico e a consulta em questão. Ser capaz de correlacionar essas informações de espera com as estatísticas de tempo de execução da consulta significa que você pode obter uma compreensão mais profunda do que contribui para as características de desempenho da consulta.
Aqui estão alguns exemplos de como você pode obter mais informações sobre sua carga de trabalho usando as estatísticas de espera no Repositório de Consultas:
Observação | Ação |
---|---|
High Lock espera | Verifique os textos de consulta para as consultas afetadas e identifique as entidades de destino. Procure no Repositório de Consultas outras consultas modificando a mesma entidade, que é executada com freqüência e/ou tem alta duração. Depois de identificar essas consultas, considere alterar a lógica do aplicativo para melhorar a simultaneidade ou usar um nível de isolamento menos restritivo. |
E/S de buffer alto aguarda | Encontre as consultas com um elevado número de leituras físicas no Repositório de Consultas. Se eles corresponderem às consultas com esperas de E/S altas, considere introduzir um índice na entidade subjacente, para fazer buscas em vez de verificações. Isso minimizaria a sobrecarga de E/S das consultas. Verifique as Recomendações de desempenho para o seu servidor no portal para ver se existem recomendações de índice para este servidor que otimizariam as consultas. |
Alta memória espera | Encontre as principais consultas que consomem memória no Repositório de Consultas. Essas consultas provavelmente estão atrasando o progresso das consultas afetadas. Verifique as Recomendações de desempenho para o seu servidor no portal para ver se há recomendações de índice que otimizariam essas consultas. |
Opções de configuração
Quando o Repositório de Consultas está habilitado, ele salva dados em janelas de agregação de 15 minutos, até 500 consultas distintas por janela.
As opções a seguir estão disponíveis para configurar os parâmetros do Repositório de Consultas.
Parâmetro | Descrição | Predefinição | Intervalo |
---|---|---|---|
query_store_capture_mode | Ative ou desative o recurso de armazenamento de consultas com base no valor. Nota: Se performance_schema estiver DESATIVADO, ativar query_store_capture_mode ativará performance_schema e um subconjunto de instrumentos de esquema de desempenho necessários para esse recurso. | TODOS | NENHUM, TODOS |
query_store_capture_interval | O intervalo de captura do repositório de consultas em minutos. Permite especificar o intervalo em que as métricas de consulta são agregadas | 15 | 5 - 60 |
query_store_capture_utility_queries | Ligar ou desligar para capturar todas as consultas do utilitário que estão sendo executadas no sistema. | Não | SIM, NÃO |
query_store_retention_period_in_days | Janela de tempo em dias para reter os dados no repositório de consultas. | 7 | 1 - 30 |
As opções a seguir se aplicam especificamente às estatísticas de espera.
Parâmetro | Descrição | Predefinição | Intervalo |
---|---|---|---|
query_store_wait_sampling_capture_mode | Permite ligar / desligar as estatísticas de espera. | NENHUM | NENHUM, TODOS |
query_store_wait_sampling_frequency | Altera a frequência de amostragem em espera em segundos. 5 a 300 segundos. | 30 | 5-300 |
Nota
Atualmente, query_store_capture_mode substitui essa configuração, o que significa que tanto query_store_capture_mode quanto query_store_wait_sampling_capture_mode precisam ser habilitados para ALL para que as estatísticas de espera funcionem. Se query_store_capture_mode estiver desativado, as estatísticas de espera também serão desativadas, pois as estatísticas de espera utilizam o performance_schema habilitado e o query_text capturado pelo repositório de consultas.
Use o portal do Azure ou a CLI do Azure para obter ou definir um valor diferente para um parâmetro.
Vistas e funções
Visualize e gerencie o Repositório de Consultas usando as seguintes exibições e funções. Qualquer pessoa na função pública de privilégio de seleção pode usar esses modos de exibição para ver os dados no Repositório de Consultas. Essas visualizações só estão disponíveis no banco de dados mysql .
As consultas são normalizadas observando sua estrutura depois de remover literais e constantes. Se duas consultas forem idênticas, exceto nos valores literais, terão o mesmo hash.
mysql.query_store
Esta vista devolve todos os dados no Repositório de Consultas. Há uma linha para cada ID de banco de dados distinto, ID de usuário e ID de consulta.
Nome | Tipo de Dados | IS_NULLABLE | Descrição |
---|---|---|---|
schema_name |
Varchar(64) | Não | Nome do esquema |
query_id |
Bigint(20) | Não | ID exclusivo gerado para a consulta específica, se a mesma consulta for executada em esquema diferente, uma nova ID será gerada |
timestamp_id |
carimbo de data/hora | Não | Carimbo de data/hora no qual a consulta é executada. Isso é baseado na configuração query_store_interval |
query_digest_text |
texto longo | Não | O texto de consulta normalizado depois de remover todos os literais |
query_sample_text |
texto longo | Não | Primeira aparência da consulta real com literais |
query_digest_truncated |
bit | SIM | Se o texto da consulta foi truncado. O valor será Sim se a consulta tiver mais de 1 KB |
execution_count |
Bigint(20) | Não | O número de vezes que a consulta foi executada para este ID de carimbo de data/hora / durante o período de intervalo configurado |
warning_count |
Bigint(20) | Não | Número de avisos que esta consulta gerou durante o |
error_count |
Bigint(20) | Não | Número de erros gerados por esta consulta durante o intervalo |
sum_timer_wait |
duplo | SIM | Tempo total de execução desta consulta durante o intervalo em milissegundos |
avg_timer_wait |
duplo | SIM | Tempo médio de execução desta consulta durante o intervalo em milissegundos |
min_timer_wait |
duplo | SIM | Tempo mínimo de execução desta consulta em milissegundos |
max_timer_wait |
duplo | SIM | Tempo máximo de execução em milissegundos |
sum_lock_time |
Bigint(20) | Não | Tempo total gasto para todos os bloqueios para a execução desta consulta durante esta janela de tempo |
sum_rows_affected |
Bigint(20) | Não | Número de linhas afetadas |
sum_rows_sent |
Bigint(20) | Não | Número de linhas enviadas ao cliente |
sum_rows_examined |
Bigint(20) | Não | Número de linhas examinadas |
sum_select_full_join |
Bigint(20) | Não | Número de adesões completas |
sum_select_scan |
Bigint(20) | Não | Número de verificações selecionadas |
sum_sort_rows |
Bigint(20) | Não | Número de linhas ordenadas |
sum_no_index_used |
Bigint(20) | Não | Número de vezes em que a consulta não usou nenhum índice |
sum_no_good_index_used |
Bigint(20) | Não | Número de vezes em que o mecanismo de execução de consulta não usou bons índices |
sum_created_tmp_tables |
Bigint(20) | Não | Número total de tabelas temporárias criadas |
sum_created_tmp_disk_tables |
Bigint(20) | Não | Número total de tabelas temporárias criadas no disco (gera E/S) |
first_seen |
carimbo de data/hora | Não | A primeira ocorrência (UTC) da consulta durante a janela de agregação |
last_seen |
carimbo de data/hora | Não | A última ocorrência (UTC) da consulta durante esta janela de agregação |
mysql.query_store_wait_stats
Esta vista devolve dados de eventos de espera no Repositório de Consultas. Há uma linha para cada ID de banco de dados distinto, ID de usuário, ID de consulta e evento.
Nome | Tipo de Dados | IS_NULLABLE | Descrição |
---|---|---|---|
interval_start |
carimbo de data/hora | Não | Início do intervalo (incremento de 15 minutos) |
interval_end |
carimbo de data/hora | Não | Fim do intervalo (incremento de 15 minutos) |
query_id |
Bigint(20) | Não | ID exclusivo gerado na consulta normalizada (do repositório de consultas) |
query_digest_id |
Varchar(32) | Não | O texto de consulta normalizado depois de remover todos os literais (do repositório de consultas) |
query_digest_text |
texto longo | Não | Primeira aparência da consulta real com literais (do repositório de consultas) |
event_type |
Varchar(32) | Não | Categoria do evento de espera |
event_name |
Varchar(128) | Não | Nome do evento de espera |
count_star |
Bigint(20) | Não | Número de eventos de espera amostrados durante o intervalo para a consulta |
sum_timer_wait_ms |
duplo | Não | Tempo total de espera (em milissegundos) desta consulta durante o intervalo |
Funções
Name | Descrição |
---|---|
mysql.az_purge_querystore_data(TIMESTAMP) |
Limpa todos os dados do armazenamento de consultas antes do carimbo de data/hora fornecido |
mysql.az_procedure_purge_querystore_event(TIMESTAMP) |
Limpa todos os dados de eventos de espera antes do carimbo de data/hora fornecido |
mysql.az_procedure_purge_recommendation(TIMESTAMP) |
Expurga recomendações cuja expiração é anterior ao carimbo de data/hora dado |
Problemas conhecidos e de limitações
- Se um servidor MySQL tiver o parâmetro
read_only
ativado, o Repositório de Consultas não poderá capturar dados. - A funcionalidade do Repositório de Consultas pode ser interrompida se encontrar consultas Unicode longas (>= 6000 bytes).
- O período de retenção para estatísticas de espera é de 24 horas.
- As estatísticas de espera usam amostras para capturar uma fração de eventos. A frequência pode ser modificada usando o parâmetro
query_store_wait_sampling_frequency
.
Próximos passos
- Saiba mais sobre o Query Performance Insights