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
- Entre no portal do Azure e selecione seu Banco de Dados do Azure para servidor PostgreSQL.
- Selecione Parâmetros do servidor na seção Configurações do menu.
- Procure o
pg_qs.query_capture_mode
parâmetro. - Defina o valor como
TOP
e Salvar.
Para ativar as estatísticas de espera no seu Repositório de Consultas:
- Procure o
pgms_wait_sampling.query_capture_mode
parâmetro. - 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:
- No portal, vá para Configurações de diagnóstico no menu de navegação do seu servidor Postgres.
- Selecione Adicionar configuração de diagnóstico.
- Nomeie essa configuração.
- Selecione seu endpoint preferido (conta de armazenamento, hub de eventos, análise de log).
- Selecione os tipos de log QueryStoreRuntimeStatistics e QueryStoreWaitStatistics.
- 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
- Saiba mais sobre cenários em que o Repositório de Consultas pode ser especialmente útil.
- Saiba mais sobre as práticas recomendadas para usar o Repositório de Consultas.