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

  1. Entre no portal do Azure e selecione seu Banco de Dados do Azure para o servidor MySQL.
  2. Selecione Parâmetros do servidor na seção Configurações do menu.
  3. Procure o parâmetro query_store_capture_mode.
  4. Defina o valor como ALL e Save.

Para ativar as estatísticas de espera no seu Repositório de Consultas:

  1. Procure o parâmetro query_store_wait_sampling_capture_mode.
  2. 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_modequanto 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