Monitorizar o desempenho com o Arquivo de Consultas

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

Importante

O Banco de Dados do Azure para PostgreSQL - Servidor Único está no caminho da desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para PostgreSQL - Servidor Flexível, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único PostgreSQL?.

O recurso Repositório de Consultas no Banco de Dados do Azure para PostgreSQL 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 em um banco de dados chamado azure_sys na instância do Banco de Dados do Azure para PostgreSQL.

Importante

Não modifique o banco de dados azure_sys ou seus esquemas. Isso impedirá que o Repositório de Consultas e os recursos de desempenho relacionados funcionem corretamente.

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 armazenamento 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 servidor PostgreSQL.
  2. Selecione Parâmetros do servidor na seção Configurações do menu.
  3. Procure o pg_qs.query_capture_mode parâmetro.
  4. Defina o valor como TOP e Salvar.

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

  1. Procure o pgms_wait_sampling.query_capture_mode parâmetro.
  2. Defina o valor como ALL e Salvar.

Como alternativa, você pode definir esses parâmetros usando a CLI do Azure.

az postgres server configuration set --name pg_qs.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value TOP
az postgres server configuration set --name pgms_wait_sampling.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value ALL

Aguarde 20 minutos para o primeiro lote de dados se manter na base de dados azure_sys.

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.

Os cenários comuns para usar o Repositório de Consultas incluem:

  • 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
  • Identificação de consultas de execução mais longa nas últimas X horas
  • Identificando as principais consultas N que estão aguardando recursos
  • Compreender a natureza de espera para uma consulta específica

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.

Acessar informações do Repositório de Consultas

Os dados do Repositório de Consultas são armazenados no banco de dados azure_sys em seu servidor Postgres.

A consulta a seguir retorna informações sobre consultas no Repositório de Consultas:

SELECT * FROM query_store.qs_view; 

Ou esta consulta para estatísticas de espera:

SELECT * FROM query_store.pgms_wait_sampling_view;

Localizando consultas de espera

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, a fim de 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
pg_qs.query_capture_mode Define quais instruções são controladas. nenhum nenhum, topo, todos
pg_qs.max_query_text_length Define o comprimento máximo da consulta que pode ser salvo. Consultas mais longas serão truncadas. 6.000 100 - 10K
pg_qs.período_de_retenção_em_dias Define o período de retenção. 7 1 - 30
pg_qs.track_utilitário Define se os comandos do utilitário são rastreados em ligado, desligado

As opções a seguir se aplicam especificamente às estatísticas de espera.

Parâmetro Descrição Predefinição Intervalo
pgms_wait_sampling.query_capture_mode Define quais instruções são rastreadas para estatísticas de espera. nenhum nenhum, todos
Pgms_wait_sampling.período_história Defina a frequência, em milissegundos, na qual os eventos de espera são amostrados. 100 1-600000

Nota

pg_qs.query_capture_mode substitui pgms_wait_sampling.query _capture_mode. Se pg_qs.query_capture_mode for NONE, a configuração pgms_wait_sampling.query_capture_mode não terá efeito.

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 PostgreSQL pode usar essas exibições para ver os dados no Repositório de Consultas. Estas vistas só estão disponíveis na base de dados azure_sys .

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.

query_store.qs_view

Esta vista devolve dados de texto de consulta no Repositório de Consultas. Há uma linha para cada query_text distinta. Os dados não estão disponíveis através da seção Desempenho Inteligente no portal, APIs ou CLI - mas podem ser encontrados conectando-se ao azure_sys e consultando 'query_store.query_texts_view'.

Nome Tipo Referências Descrição
runtime_stats_entry_id bigint ID da tabela runtime_stats_entries
user_id Oide pg_authid.oid OID do usuário que executou a instrução
db_id Oide pg_database.oid OID do banco de dados no qual a instrução foi executada
query_id bigint Código hash interno, calculado a partir da árvore de análise da instrução
query_sql_text Varchar(10000) Texto de uma declaração representativa. Consultas diferentes com a mesma estrutura são agrupadas; Este texto é o texto para a primeira das consultas no cluster.
plan_id bigint ID do plano correspondente a esta consulta, ainda não disponível
hora de início carimbo de data/hora As consultas são agregadas por intervalos de tempo - o período de tempo de um bucket é de 15 minutos por padrão. Esta é a hora de início correspondente ao intervalo de tempo para esta entrada.
end_time carimbo de data/hora Hora de término correspondente ao intervalo de tempo para esta entrada.
Convocatórias bigint Número de vezes que a consulta foi executada
total_time precisão dupla Tempo total de execução da consulta, em milissegundos
min_time precisão dupla Tempo mínimo de execução da consulta, em milissegundos
max_time precisão dupla Tempo máximo de execução da consulta, em milissegundos
mean_time precisão dupla Tempo médio de execução da consulta, em milissegundos
stddev_time precisão dupla Desvio padrão do tempo de execução da consulta, em milissegundos
linhas bigint Número total de linhas recuperadas ou afetadas pela instrução
shared_blks_hit bigint Número total de acessos de cache de bloco compartilhado pela instrução
shared_blks_read bigint Número total de blocos compartilhados lidos pela instrução
shared_blks_dirtied bigint Número total de blocos compartilhados sujo pela declaração
shared_blks_written bigint Número total de blocos compartilhados escritos pela instrução
local_blks_hit bigint Número total de acessos ao cache de bloco local pela instrução
local_blks_read bigint Número total de blocos locais lidos pela instrução
local_blks_dirtied bigint Número total de blocos locais sujo pela declaração
local_blks_written bigint Número total de blocos locais escritos pela instrução
temp_blks_read bigint Número total de blocos temporários lidos pela instrução
temp_blks_written bigint Número total de blocos temporários escritos pela instrução
blk_read_time precisão dupla Tempo total gasto na leitura de blocos da instrução, em milissegundos (se track_io_timing estiver habilitado, caso contrário, zero)
blk_write_time precisão dupla Tempo total gasto na instrução escrevendo blocos, em milissegundos (se track_io_timing estiver habilitado, caso contrário, zero)

query_store.query_texts_view

Esta vista devolve dados de texto de consulta no Repositório de Consultas. Há uma linha para cada query_text distinta.

Nome Tipo Descrição
query_text_id bigint ID da tabela query_texts
query_sql_text Varchar(10000) Texto de uma declaração representativa. Consultas diferentes com a mesma estrutura são agrupadas; Este texto é o texto para a primeira das consultas no cluster.

query_store.pgms_wait_sampling_view

Esta vista devolve dados de texto de consulta no Repositório de Consultas. Há uma linha para cada query_text distinta. Os dados não estão disponíveis através da seção Desempenho Inteligente no portal, APIs ou CLI - mas podem ser encontrados conectando-se ao azure_sys e consultando 'query_store.query_texts_view'.

Nome Tipo Referências Descrição
user_id Oide pg_authid.oid OID do usuário que executou a instrução
db_id Oide pg_database.oid OID do banco de dados no qual a instrução foi executada
query_id bigint Código hash interno, calculado a partir da árvore de análise da instrução
event_type texto O tipo de evento para o qual o back-end está aguardando
evento texto O nome do evento de espera se o back-end estiver aguardando no momento
Convocatórias Número inteiro Número do mesmo evento capturado

Funções

Query_store.qs_reset() retorna void

qs_reset descarta todas as estatísticas reunidas até agora pelo Query Store. Esta função só pode ser executada pela função de administrador do servidor.

Query_store.staging_data_reset() retorna void

staging_data_reset descarta todas as estatísticas coletadas na memória pelo Repositório de Consultas (ou seja, os dados na memória que ainda não foram liberados para o banco de dados). Esta função só pode ser executada pela função de administrador do servidor.

Azure Monitor

O Banco de Dados do Azure para PostgreSQL é integrado às configurações de diagnóstico do Azure Monitor. As configurações de diagnóstico permitem que você envie seus logs do Postgres no formato JSON para Logs do Azure Monitor para análise e alertas, Hubs de Eventos para streaming e Armazenamento do Azure para arquivamento.

Importante

Esse recurso de diagnóstico para só está disponível nos níveis de preços de uso geral e memória otimizada.

Configurar definições de diagnóstico

Você pode habilitar as configurações de diagnóstico para seu servidor Postgres usando o portal do Azure, a CLI, A API REST e o PowerShell. As categorias de log a serem configuradas são QueryStoreRuntimeStatistics e QueryStoreWaitStatistics.

Para habilitar logs de recursos usando o portal do Azure:

  1. No portal, vá para Configurações de diagnóstico no menu de navegação do seu servidor Postgres.
  2. Selecione Adicionar configuração de diagnóstico.
  3. Nomeie essa configuração.
  4. Selecione seu endpoint preferido (conta de armazenamento, hub de eventos, análise de log).
  5. Selecione os tipos de log QueryStoreRuntimeStatistics e QueryStoreWaitStatistics.
  6. Salve sua configuração.

Para habilitar essa configuração usando PowerShell, CLI ou API REST, visite o artigo de configurações de diagnóstico.

Formato de log JSON

As tabelas a seguir descrevem os campos para os dois tipos de log. Dependendo do ponto de extremidade de saída escolhido, os campos incluídos e a ordem em que aparecem podem variar.

QueryStoreRuntimeStatistics

Campo Descrição
TimeGenerated [UTC] Carimbo de data/hora quando o log foi gravado em UTC
ResourceId URI do recurso do Azure do servidor Postgres
Categoria QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Nome do servidor Postgres
runtime_stats_entry_id_s ID da tabela runtime_stats_entries
user_id_s OID do usuário que executou a instrução
db_id_s OID do banco de dados no qual a instrução foi executada
query_id_s Código hash interno, calculado a partir da árvore de análise da instrução
end_time_s Hora de término correspondente ao intervalo de tempo para esta entrada
calls_s Número de vezes que a consulta foi executada
total_time_s Tempo total de execução da consulta, em milissegundos
min_time_s Tempo mínimo de execução da consulta, em milissegundos
max_time_s Tempo máximo de execução da consulta, em milissegundos
mean_time_s Tempo médio de execução da consulta, em milissegundos
ResourceGroup O grupo de recursos
SubscriptionId ID da sua subscrição
ResourceProvider Microsoft.DBForPostgreSQL
Recurso Nome do servidor Postgres
ResourceType Servers

QueryStoreWaitStatistics

Campo Descrição
TimeGenerated [UTC] Carimbo de data/hora quando o log foi gravado em UTC
ResourceId URI do recurso do Azure do servidor Postgres
Categoria QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s OID do usuário que executou a instrução
db_id_s OID do banco de dados no qual a instrução foi executada
query_id_s Código hash interno da consulta
calls_s Número do mesmo evento capturado
event_type_s O tipo de evento para o qual o back-end está aguardando
event_s O nome do evento de espera se o back-end estiver aguardando no momento
start_time_t Hora de início do evento
end_time_s Hora de fim do evento
LogicalServerName_s Nome do servidor Postgres
ResourceGroup O grupo de recursos
SubscriptionId ID da sua subscrição
ResourceProvider Microsoft.DBForPostgreSQL
Recurso Nome do servidor Postgres
ResourceType Servers

Problemas conhecidos e de limitações

  • Se um servidor PostgreSQL tiver o parâmetro default_transaction_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).
  • As réplicas de leitura replicam dados do Repositório de Consultas do servidor primário. Isso significa que o Repositório de Consultas de uma réplica de leitura não fornece estatísticas sobre consultas executadas na réplica de leitura.

Próximos passos