Como funcionam os relatórios de resumo de desempenho
Os relatórios de resumo de desempenho são uma ferramenta integrada do AlloyDB Omni que captura e analisa dados de desempenho para ajudar a identificar a causa dos problemas de desempenho.
Os relatórios de resumo de desempenho apresentam métricas da base de dados entre duas datas/horas num único relatório. Pode usar as informações do relatório de resumo do desempenho para identificar problemas de desempenho com a instância do relatório de resumo do desempenho, como o desempenho reduzido da base de dados durante determinadas horas do dia ou o desempenho reduzido durante um determinado período.
Com o relatório de resumo de desempenho, compara as métricas com uma base de referência de desempenho para obter estatísticas sobre as métricas de desempenho da carga de trabalho, que pode usar para otimizar ou resolver problemas de desempenho da base de dados. Uma base é um conjunto personalizado de instantâneos da base de dados que medem o desempenho e o comportamento padrão de uma base de dados para uma configuração e uma carga de trabalho específicas.
Para ver informações sobre eventos de espera no relatório de resumo do desempenho, consulte o referência do relatório de resumo do desempenho da base de dados.
Funções necessárias
Certifique-se de que tem a função de pg_monitor
.
Esta função é concedida a superutilizadores, que podem, em seguida, conceder pg_monitor
a outros utilizadores.
Por exemplo, postgres
é o superutilizador por predefinição. Pode executar
GRANT pg_monitor TO my_user
como postgres
para permitir que my_user
use a ferramenta de instantâneo de desempenho, conforme descrito neste documento.
Relatório de resumo do desempenho de instalações
perfsnap
é o nome do esquema que contém funções SQL que permitem aos utilizadores capturar instantâneos ou gerar relatórios. Este esquema faz parte da extensão g_stats
do AlloyDB Omni. Use a função de superutilizador para instalar o relatório de resumo de desempenho.
Para usar as APIs perfsnap
, estabeleça ligação a qualquer base de dados onde os utilizadores queiram instalar a extensão e crie a extensão g_stats
com o seguinte comando:
CREATE EXTENSION IF NOT EXISTS g_stats;
Crie um instantâneo das métricas do sistema
Crie um instantâneo no início e no fim da carga de trabalho que lhe interessa. O intervalo de tempo entre as duas capturas de ecrã permite tempo suficiente para que a carga de trabalho avance, de modo que o sistema possa acumular métricas que reflitam a carga de trabalho. Depois de obter as métricas do relatório de resumo de desempenho resultante, pode tirar outro conjunto de resumos e repetir o processo.
- Associe um cliente
psql
a uma instância do AlloyDB. Corrida
SELECT perfsnap.snap()
. O resultado tem um aspeto semelhante ao seguinte:postgres=# select perfsnap.snap(); snap ------ 1 (1 row)
Veja uma lista de resumos
- Associe um cliente
psql
a uma instância do AlloyDB. Corrida
SELECT * FROM perfsnap.g$snapshots
. O resultado tem um aspeto semelhante ao seguinte:postgres=# select * from perfsnap.g$snapshots; snap_id | snap_time | instance_id | node_id | snap_description | snap_type | is_baseline ---------+-------------------------------+-------------+---------+--------------------+-----------+------------- 1 | 2023-11-13 22:13:43.159237+00 | sr-primary | | Manual snapshot | Manual | f 2 | 2023-11-13 22:53:40.49565+00 | sr-primary | | Automatic snapshot | Automatic | f (2 rows)
Gere um relatório de instantâneo
Para gerar um relatório que capture a diferença entre os resumos 1 e 2, por exemplo, execute SELECT perfsnap.report(1,2)
.
A segunda imagem instantânea numa operação diferencial não tem de seguir imediatamente a primeira imagem instantânea. No entanto, certifique-se de que captura a segunda imagem instantânea na diferença após a primeira imagem instantânea.
O relatório de resumo de desempenho gerado tem um aspeto semelhante ao seguinte exemplo abreviado:
Exemplo de relatório de resumo de desempenho
$ psql -d postgres -U alloydbsuperuser postgres=> select perfsnap.report(22, 23); report -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- PGSNAP DB Report for: Snapshot details -------------------------------------- Host i841-sr-primary-2a34f46e-06bc Release 14.12 Startup Time 2024-10-08 03:23:15+00 Snap Id Snap Time ------------ ---------- ------------------------ Begin Snap: 22 24.10.2024 04:33:56 (UTC) Automatic snapshot End Snap: 23 25.10.2024 04:38:56 (UTC) Automatic snapshot Elapsed: 1 day 00:04:59.979321 Database Cache sizes ~~~~~~~~~~~~~ Shared Buffers: 31 GB Block Size: 8192 Effective Cache Size: 25 GB WAL Buffers: 16384 Host CPU ~~~~~~~~~~ %User %Nice %System %Idle %WIO %IRQ %SIRQ %Steal %Guest ------- ------- ------- ------- ------- ------- ------- ------- ------- 1.07 0.22 0.91 97.40 0.09 0.00 0.31 0.00 0.00 Host Memory ~~~~~~~~~~~~ Total Memory: 63 GB Available Memory: 11 GB Free Memory: 726 MB Buffers Memory: 3706 MB Load profile (in bytes) ~~~~~~~~~~~~~~~~~~~~~~~ Per Second Per Transaction ------------ --------------- Redo size: 63083.64 4489.93 Logical reads: 1961.21 139.59 ... Response Time Profile (in s) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ CPU time: 5399 ( 0.39%) Wait time: 1386906 ( 99.61%) Total time: 1392306 Backend Processes Wait Class Breakdown (in s) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ IO 119.300 ( 98.91%) LWLock 1.305 ( 1.08%) IPC .010 ( 0.01%) Lock .000 ( 0.00%) Backend Processes Wait Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Event Class Waits Time (us) Avg (us) -------------------------------------- ------------- ------------- -------------- ------------- CPU 1995948632 WALInsert LWLock 1 6656 6656 Vacuum Information ~~~~~~~~~~~~~~~~~~~ Num Analyze operations: 1976 Num Vacuum operations: 3435 Per Database Information ~~~~~~~~~~~~~~~~~~~~~~~~~ Name Commits Rollbacks BlkRds Blkhits TempFiles TempBytes ------------------------- ------------- ------------- ------------- ------------- ------------- ------------- bench 27939 0 0 7823038 0 0 bytes postgres 39792 0 7 11089243 0 0 bytes Per Database DML & DQL Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Tuples returned Tuples fetched Tuples inserted Tuples updated Tuples deleted Index splits Index Only heap fetches HOT updates ------------------------- ---------------- ---------------- ---------------- ---------------- ---------------- ---------------- ------------------------- ---------------- bench 16119481 4843262 0 0 0 0 16 0 postgres 25415473 6327188 0 10 0 0 0 8 Per Database Conflict Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Lock Timeout Old Snapshot Buffer Pins Deadlock ------------------------- ------------- ------------- ------------- ------------- bench 0 0 0 0 postgres 0 0 0 0 Per Database Vacuum Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Frozen XID % Consumed Aggregate Vacuum Gap ------------------------- ------------- ------------- -------------------- bench 179460916 9.00% 20539084 postgres 179339239 9.00% 20660761 Per Database Sizing Information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Conn. Name Collation Limit Tablespace DB Size Growth -------------------- ------------- ------- -------------------- ---------- ---------- bench C.UTF-8 -1 pg_default 80 GB 0 bytes postgres C.UTF-8 -1 pg_default 135 MB 0 bytes Backend Wait Event Histogram ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Event Class Waits <= 1us <= 2us <= 4us <= 8us <= 16us <= 32us <= 64us <= 128us <= 256us <= 512us -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- -------- WALInsert LWLock 1 0 0 0 0 0 0 0 0 0 0 Background Wait Event Histogram ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Event Class Waits <= 1us <= 2us <= 4us <= 8us <= 16us <= 32us <= 64us <= 128us <= 256us <= 512us -------------------------------------- ------------- ----------- --------- --------- --------- --------- --------- --------- --------- --------- --------- -------- WALInsert LWLock 542 107 174 39 113 93 8 1 1 0 1 Write Ahead Log (WAL) Statistics -------------------------------- Records Full Page Images Bytes Buffers Full Write Sync Write Time Sync Time ----------- ---------------- ----------- ------------ ----------- ----------- ----------- ----------- 2936305 100 805989345 0 0 0 0 0 Summary Stats (across all databases) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Name Value -------------------------------- ---------------------------------- Buffers evicted 0 Commits 1216693 ... Parameter Settings ~~~~~~~~~~~~~~~~~~~ Parameter Value --------------------------------- -------------------------------------------------------------- DateStyle ISO, MDY TimeZone UTC autovacuum on work_mem 4096 Columnar Engine available size Columnar Engine configured size ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 14959MB 19293MB Columnar Engine Statistics ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ name count ---------------------------------------------------------- ------------ CU Populations/Refreshes 13197 CU Auto Refreshes 10975 ... Columnar Engine Ultra-fast Cache Statistics ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ultra-fast Cache Size (MB): 19200 Ultra-fast Cache Used Size (MB): 0 Ultra-fast Cache Block Size (MB): 80 ---------------------------------------------------- Created by G_STATS v1.0.100 ---------------------------------------------------- (xxx rows)
Para informações sobre os campos de relatórios e as recomendações de otimização do desempenho, consulte o artigo Recomendações de otimização do desempenho da base de dados. Para mais informações acerca dos eventos de espera nos relatórios de resumo de desempenho, consulte a referência do relatório de resumo de desempenho da base de dados.
Elimine um instantâneo
Antes de poder eliminar as imagens instantâneas que fazem parte de uma base de referência existente, tem de limpar a base de referência .
Para eliminar um instantâneo, execute SELECT perfsnap.delete(n)
. Depois de eliminar uma captura de ecrã, não a pode recuperar.
Marque uma análise detalhada como base de referência de desempenho
Por exemplo, para marcar todas as capturas instantâneas com IDs entre 1 e 3 como uma base de referência de desempenho do sistema, execute SELECT perfsnap.make_baseline(1, 3)
.
Limpe as bases de referência de desempenho
Para limpar todas as linhas de base com IDs entre 1 e 3, por exemplo, execute o comando
SELECT perfsnap.clear_baseline(1, 3)
.
Otimize o desempenho da base de dados com os resultados do relatório de instantâneo
Siga estes passos para otimizar o desempenho da base de dados do AlloyDB:
- Crie instantâneos de base quando a base de dados estiver inativa ou quando estiver a ter uma carga média.
- Inicie a carga de trabalho ou a consulta cujo desempenho quer melhorar.
- Quando a carga de trabalho ou a consulta atingir o pico de utilização de recursos, crie outro conjunto de instantâneos. Recomendamos que use o mesmo intervalo para ambos os relatórios.
- Compare os relatórios que criou com ambos os conjuntos de capturas de ecrã e identifique alterações que possam melhorar o desempenho. Para mais informações sobre as recomendações de desempenho, consulte o artigo Recomendações de otimização do desempenho da base de dados.
Recomendações de otimização do desempenho da base de dados
A tabela seguinte lista as secções do relatório de resumo de desempenho e as melhorias recomendadas para cada secção do relatório. Para mais informações sobre as secções do relatório de resumo de desempenho e os eventos de espera, consulte o relatório de resumo de desempenho da base de dados: referência.
Secção | Campo do relatório | Descrição do campo do relatório | Recomendações de otimização |
---|---|---|---|
Detalhes do instantâneo | Detalhes do instantâneo | Fornece o anfitrião, a versão de lançamento compatível com o PostgreSQL e a hora em que a máquina está em funcionamento. | N/A |
ID do resumo | Apresenta o ID e o momento específico das capturas de ecrã usadas para criar este relatório. | N/A | |
Estatísticas do sistema | CPU do anfitrião | Detalhes da utilização da CPU do anfitrião. | Se a utilização da CPU for superior a 80%, recomendamos que mude para um sistema com mais CPUs virtuais. |
Memória do anfitrião | Detalhes da utilização da memória do anfitrião. | Se a memória livre for inferior a 15%, recomendamos que aumente para o tamanho disponível seguinte. | |
Carregar perfil | Lista os contadores que ajudam a caraterizar a sua carga de trabalho em termos de registo antecipado (WAL) gerado, requisitos de E/S e gestão de ligações. | Se as leituras físicas forem superiores às leituras lógicas, considere aumentar a escala para o tamanho disponível seguinte para suportar uma colocação em cache de dados maior. | |
Tempo de resposta e discriminação da classe de espera | Análise detalhada do tempo que o Postgres processa durante a execução da carga de trabalho. | Concentre a otimização na redução do tempo de espera de E/S se os processos estiverem principalmente num estado de espera, por exemplo. | |
Informações sobre a carga de trabalho da base de dados | Informações sobre a carga de trabalho por base de dados | Métricas principais para cada base de dados, incluindo commits, reversões, taxa de acertos e informações sobre tabelas temporárias e operações de ordenação. | Se os reversões forem elevadas, considere diagnosticar a sua app. |
Informações de DML e DQL por base de dados | Contadores para operações de consulta. | Qualifique a sua carga de trabalho como de leitura intensiva ou de escrita intensiva. | |
Informações de conflito da base de dados | Contadores para problemas comuns de aplicações e bases de dados. | Localize problemas na sua aplicação se existir um impasse. | |
Base de dados Informações de dimensionamento |
Mostra o crescimento da base de dados durante o intervalo entre duas capturas de ecrã. Este campo também mostra se a base de dados tem limites de associação estabelecidos. | Localize problemas na sua aplicação se o crescimento da base de dados for demasiado grande. | |
Informações sobre o aspirador | Informações sobre o aspirador | Detalhes de E/S e contadores para operações de vácuo. | Por predefinição, o AlloyDB executa a limpeza adaptativa. Pode substituir algumas das definições de vácuo para se adequarem à sua carga de trabalho. Por exemplo, reduza as operações de vácuo se for gasto demasiado I/O nestes pedidos. |
Informações de vácuo por base de dados | Mostra as seguintes informações:
|
Se a idade do campo XID congelado for demasiado antiga ou se a percentagem de transações consumidas estiver perto de 90%, considere fazer a limpeza. Se a diferença de vácuo agregada diminuir, isto indica que o vácuo vai ser aplicado pelo Postgres para evitar a repetição. | |
Detalhes de espera dos processos da base de dados | Informações detalhadas sobre processos em segundo plano e de back-end |
Detalhes de todas as esperas por processos de back-end e em segundo plano no intervalo do relatório. As informações incluem o tempo de espera cumulativo, o tempo de CPU e o tempo médio por tipo de espera. | Para diminuir o tempo de espera em WALWrite, por exemplo, aumente o número de
wal_buffers disponíveis para a base de dados. |
Histograma detalhado de eventos de espera de back-end e em segundo plano | Esta opção está incluída no relatório de resumo de desempenho por predefinição. A lista contém o histograma de eventos de espera para processos de back-end e em segundo plano, que estão divididos em 32 intervalos, de 1 us a mais de 16 segundos. | Localize os eventos de espera e determine se existem demasiados eventos de espera no intervalo de tempo de espera maior. Pode haver um problema com o número excessivo de eventos de espera ou com o tempo de espera consumido. | |
Estatísticas diversas | Estatísticas do registo de escrita antecipada (WAL) | Resumo das estatísticas de WAL. | Se a sincronização demorar demasiado tempo, ajuste as flags da base de dados relacionadas (GUC) para melhorar a sua carga de trabalho. GUC é o subsistema PostgreSQL que processa a configuração do servidor. |
Estatísticas de resumo (em todas as bases de dados) | Resumo de todas as operações da base de dados que ocorrem durante o intervalo de instantâneos. | N/A | |
Definições de parâmetros | Definições de parâmetros | Parâmetros de configuração do Postgres principais no momento do instantâneo final. | Verifique as definições do parâmetro GUC (as flags da base de dados Postgres) para determinar se os valores não são esperados ou não são recomendados. |
Limitações
Para evitar o aumento do espaço, pode criar manualmente um máximo de 2500 capturas instantâneas numa instância. O aumento do espaço garante que as capturas de ecrã não ocupam demasiado espaço de armazenamento na sua base de dados.
Se o número de instantâneos exceder o limite de instantâneos, o AlloyDB Omni elimina todos os instantâneos manuais com mais de 90 dias. Para permanecer dentro do limite de resumos, tem de limpar os resumos desnecessários antes de criar um novo.
O AlloyDB Omni limpa periodicamente as cópias instantâneas manuais com mais de 90 dias.
O que se segue?
- Saiba mais acerca dos eventos de espera nos relatórios de resumo de desempenho.