Confrontare le istantanee del rendimento

Seleziona una versione della documentazione:

Questo documento descrive come identificare e mitigare i problemi di prestazioni del database AlloyDB Omni utilizzando un report che confronta gli snapshot delle metriche di sistema tra due momenti diversi. Le metriche di sistema acquisite in ogni snapshot includono l'utilizzo della CPU virtuale (vCPU), la memoria utilizzata, l'I/O del disco, il conteggio delle transazioni e gli eventi di attesa.

Come funzionano i report snapshot delle prestazioni

I report snapshot delle prestazioni sono uno strumento integrato di AlloyDB Omni che acquisisce e analizza i dati sul rendimento per aiutarti a identificare la causa dei problemi di prestazioni.

I report snapshot delle prestazioni mostrano le metriche del database tra due timestamp in un unico report. Puoi utilizzare le informazioni del report snapshot delle prestazioni per identificare i problemi di prestazioni con l'istanza del report snapshot delle prestazioni, ad esempio una riduzione delle prestazioni del database in determinati orari del giorno o una riduzione delle prestazioni in un determinato periodo di tempo.

Utilizzando il report snapshot delle prestazioni, puoi confrontare le metriche con una baseline delle prestazioni per ottenere informazioni sulle metriche di prestazioni del workload, che puoi utilizzare per ottimizzare o risolvere i problemi di prestazioni del database. Una baseline è un insieme personalizzato di snapshot del database che misurano le prestazioni e il comportamento standard di un database per una configurazione e un workload specifici.

Per impostazione predefinita, gli snapshot delle prestazioni in AlloyDB Omni vengono archiviati in memoria e vengono eliminati se l'istanza viene riavviata.

Ruoli obbligatori

Assicurati di avere il pg_monitor ruolo. Questo ruolo viene concesso ai super user, che possono quindi concedere pg_monitor ad altri utenti.

Ad esempio, postgres è il superuser per impostazione predefinita. Puoi eseguire GRANT pg_monitor TO my_user come postgres per consentire a my_user di utilizzare lo strumento snapshot delle prestazioni come descritto in questo documento.

Installare il report snapshot delle prestazioni

perfsnap è il nome dello schema che contiene le funzioni SQL che consentono agli utenti di acquisire snapshot o generare report. Questo schema fa parte dell'estensione g_stats di AlloyDB Omni. Utilizza il ruolo di superuser per installare il report snapshot delle prestazioni.

Per utilizzare le API perfsnap, connettiti a qualsiasi database in cui gli utenti vogliono installare l'estensione e crea l'estensione g_stats con il seguente comando:

CREATE EXTENSION IF NOT EXISTS g_stats;

Creare uno snapshot delle metriche di sistema

Crea uno snapshot all'inizio e alla fine del workload che ti interessa. L'intervallo di tempo tra i due snapshot consente al workload di progredire in modo che il sistema possa accumulare metriche che riflettono il workload. Dopo aver ottenuto le metriche dal report snapshot delle prestazioni risultante, puoi acquisire un altro insieme di snapshot e ripetere la procedura.

  1. Connetti un client psql a un'istanza AlloyDB.
  2. Esegui SELECT perfsnap.snap(). L'output è simile al seguente:

    postgres=# select perfsnap.snap();
     snap
    ------
        1
    (1 row)
    

Creare uno snapshot contenente le statistiche di esecuzione SQL

Per impostazione predefinita, AlloyDB Omni utilizza l'estensione pg_stat_statements per monitorare le istruzioni SQL. Per includere statistiche dettagliate sull'esecuzione SQL nel report sul rendimento, devi prima creare l'estensione pg_stat_statements nel database postgres. Tieni presente che l'acquisizione di queste statistiche è abilitata dal flag pg_stat_statements.track, non dalla creazione dell'estensione stessa.

Per creare uno snapshot che contenga anche le statistiche di esecuzione SQL:

  1. Crea l'estensione pg_stat_statements nel database postgres.

    postgres=# CREATE EXTENSION pg_stat_statements;
    
  2. Ora, quando acquisisci uno snapshot, questo include automaticamente le statistiche SQL di pg_stat_statements.

    postgres=# select perfsnap.snap();
      snap
    ------
        2
    (1 row)
    

Visualizzare un elenco di snapshot

  1. Connetti un client psql a un'istanza AlloyDB.
  2. Esegui SELECT * FROM perfsnap.g$snapshots. L'output è simile al seguente:

    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)
    

Generare un report snapshot

Per generare un report che acquisisca la differenza tra gli snapshot 1 e 2, ad esempio, esegui
SELECT perfsnap.report(1,2).

Il secondo snapshot in un'operazione differenziale non deve seguire immediatamente il primo snapshot. Tuttavia, assicurati di acquisire il secondo snapshot nella differenza dopo il primo snapshot.

Il report snapshot delle prestazioni generato è simile al seguente esempio abbreviato:

Esempio di report snapshot delle prestazioni

psql -d postgres -U alloydbsuperuser
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
 ----------------------------------------------------
(rows)

  

Per informazioni sui campi dei report e sui consigli per l'ottimizzazione delle prestazioni, consulta Consigli per l'ottimizzazione delle prestazioni del database. Per ulteriori informazioni sugli eventi di attesa nei report snapshot delle prestazioni, consulta Riferimento al report snapshot delle prestazioni del database.

Eliminare uno snapshot

Prima di poter eliminare gli snapshot che fanno parte di una baseline esistente, devi cancellare la baseline .

Per eliminare uno snapshot, esegui SELECT perfsnap.delete(n). Dopo aver eliminato uno snapshot, non puoi recuperarlo.

Contrassegnare uno snapshot come baseline delle prestazioni

Per contrassegnare tutti gli snapshot con ID compresi tra 1 e 3, ad esempio, come baseline delle prestazioni del sistema, esegui
SELECT perfsnap.make_baseline(1, 3).

Cancellare le baseline delle prestazioni

Per cancellare tutte le baseline con ID compresi tra 1 e 3, ad esempio, esegui SELECT perfsnap.clear_baseline(1, 3).

Ottimizzare le prestazioni del database utilizzando i risultati del report snapshot

Segui questi passaggi per ottimizzare le prestazioni del database AlloyDB:

  1. Crea snapshot di baseline quando il database è inattivo o quando sta subendo un carico medio.
  2. Avvia il workload o la query di cui vuoi migliorare le prestazioni.
  3. Quando il workload o la query raggiunge il picco di utilizzo delle risorse, crea un altro insieme di snapshot. Ti consigliamo di utilizzare lo stesso intervallo per entrambi i report.
  4. Confronta i report che hai creato con entrambi gli insiemi di snapshot e identifica le modifiche che potrebbero migliorare le prestazioni. Per ulteriori informazioni sui consigli per le prestazioni, consulta Consigli per l'ottimizzazione delle prestazioni del database.

Consigli per l'ottimizzazione delle prestazioni del database

La tabella seguente elenca le sezioni del report snapshot delle prestazioni e i miglioramenti consigliati per ogni sezione del report. Per ulteriori informazioni sulle sezioni del report snapshot delle prestazioni e sugli eventi di attesa, consulta Riferimento al report snapshot delle prestazioni del database.

Sezione Campo report Descrizione del campo report Consigli per l'ottimizzazione
Dettagli snapshot Dettagli snapshot Fornisce l'host, la versione di rilascio compatibile con PostgreSQL e l'ora in cui la macchina è in esecuzione. N/D
ID snapshot Elenca l'ID e il momento degli snapshot utilizzati per creare questo report. N/D
Insight sul sistema CPU host Dettagli sull'utilizzo della CPU host. Se l'utilizzo della CPU è superiore all'80%, ti consigliamo di passare a un sistema con più vCPU.
Memoria host Dettagli sull'utilizzo della memoria host. Se la memoria libera è inferiore al 15%, ti consigliamo di eseguire lo scale up alla dimensione disponibile successiva.
Carica profilo Elenca i contatori che aiutano a caratterizzare il workload in termini di Write-Ahead Logging (WAL) generato, requisiti di I/O e gestione delle connessioni. Se le letture fisiche sono superiori alle letture logiche, valuta la possibilità di eseguire lo scale up alla dimensione disponibile successiva per supportare una memorizzazione nella cache più grande dei dati.
Suddivisione del tempo di risposta e della classe di attesa Suddivisione del tempo trascorso dai processi Postgres durante l'esecuzione del workload. Concentra l'ottimizzazione sulla riduzione dell'attesa di I/O se i processi sono principalmente in uno stato di attesa, ad esempio.
Informazioni sul workload del database Informazioni sul workload per database Metriche chiave per ogni database, inclusi commit, rollback, hit ratio e informazioni su tabelle temporanee e operazioni di ordinamento. Se i rollback sono elevati, valuta la possibilità di diagnosticare l'app.
Informazioni su DML e DQL per database Contatori per le operazioni di query. Qualifica il workload come ad alta intensità di lettura o scrittura.
Informazioni sui conflitti del database Contatori per problemi comuni di applicazioni e database. Individua i problemi nell'applicazione se si verifica un deadlock.
Informazioni sul
dimensionamento del database
Mostra la crescita del database durante l'intervallo tra due snapshot. Questo campo mostra anche se sono stati stabiliti limiti di connessione per il database. Individua i problemi nell'applicazione se la crescita del database è troppo elevata.
Informazioni sull'aspirazione Informazioni sull'aspirazione Dettagli di I/O e contatori per le operazioni di aspirazione. Per impostazione predefinita, AlloyDB esegue l'aspirazione adattiva. Puoi sostituire alcune impostazioni di aspirazione in base al tuo workload. Ad esempio, riduci le operazioni di aspirazione se viene utilizzata una quantità eccessiva di I/O per queste richieste.
Informazioni sull'aspirazione per database Mostra le seguenti informazioni:
  • Età attuale di datfrozenxid (XID non congelati più vecchi) di ogni database o numero di transazioni da datfrozenxid all'XID della transazione corrente.
  • ID transazione non congelati utilizzati su tutti gli ID transazione.
  • Risultato di autovacuum_freeze_max_age - age(pg_database.datfrozenxid), che indica le lacune di età approssimative (in transazioni) al momento del secondo snapshot, quando viene attivato autovacuum per impedire i wraparound a livello di aggregazione del database.
Se l'età del campo XID congelato è troppo vecchia o se la percentuale di transazioni utilizzate è vicina al 90%, valuta la possibilità di eseguire l'aspirazione. Se la lacuna di aspirazione aggregata diminuisce, significa che Postgres imporrà un'aspirazione per impedire il wraparound.
Dettagli sull'attesa dei processi del database Informazioni dettagliate sui processi di backend e &
in background
Dettagli di tutte le attese per i processi di backend e in background nell'intervallo del report. Le informazioni includono il tempo di attesa cumulativo, il tempo della CPU e il tempo medio per tipo di attesa. Per ridurre l'attesa su WALWrite, ad esempio, aumenta il numero di wal_buffers disponibili per il database.
Istogramma dettagliato degli eventi di attesa di backend e in background Questo è incluso nel report snapshot delle prestazioni per impostazione predefinita. L'elenco contiene l'istogramma degli eventi di attesa per i processi di backend e in background, suddivisi in 32 bucket, da 1 us a più di 16 secondi. Individua gli eventi di attesa e determina se ci sono troppi eventi di attesa nel bucket di tempo di attesa più grande. Potrebbe esserci un problema con un numero eccessivo di eventi di attesa o con ogni tempo di attesa utilizzato.
Statistiche varie Statistiche di Write-Ahead Logging (WAL) Riepilogo delle statistiche WAL. Se riscontri un tempo di sincronizzazione eccessivo, modifica i flag del database correlati (GUC) per migliorare il workload. GUC è il sottosistema PostgreSQL che gestisce la configurazione del server.
Statistiche di riepilogo (in tutti i database) Riepilogo di tutte le operazioni del database che si verificano durante l'intervallo dello snapshot. N/D
Impostazioni parametro Impostazioni parametro Parametri di configurazione di Postgres chiave al momento dello snapshot finale. Controlla le impostazioni dei parametri GUC (i flag del database Postgres) per determinare se i valori non sono previsti o non sono consigliati.
Statistiche di esecuzione SQL Informazioni per query (prime 50) in base al tempo trascorso totale Elenca le prime 50 query che hanno trascorso la maggior parte del tempo trascorso durante i due snapshot, nonché il conteggio totale delle esecuzioni, suddiviso per utente e database in cui viene emessa la query.
Elapsed time = Difference of total_exec_time in pg_stat_statements at the two snapshot time
Utilizza questa sezione per identificare la query più pesante che richiede la maggior parte del tempo di sistema.
Informazioni per query (prime 50) in base all'I/O di lettura Elenca le prime 50 query che hanno trascorso la maggior parte del tempo di I/O di lettura durante i due snapshot, nonché il conteggio delle esecuzioni, gli hit del buffer, le letture blk, sia in totale che in media.
ReadIO = blk_read_time + temp_blk_read_time accumulato durante i due snapshot
Buffer Hits = shared_blks_hit + local_blks_hit accumulato durante i due snapshot
Buffer Reads = shared_blks_read + local_blks_read accumulato durante i due snapshot
Questi campi vengono monitorati da AlloyDB Cloud per impostazione predefinita perché track_io_timing è impostato.
Utilizza questa sezione per identificare le query ad alta intensità di I/O, soprattutto se devono leggere frequentemente dai dischi.
Informazioni per query (prime 50) in base alla deviazione standard del tempo trascorso Elenca le prime 50 query con la deviazione standard più elevata del tempo trascorso, elencando le deviazioni standard calcolate sia all'inizio che alla fine del tempo dello snapshot.
Qui il valore fa riferimento a stddev_exec_time di pg_stat_statements
Per una query con una deviazione standard elevata, significa che il tempo di esecuzione della query varia molto e potrebbe essere il momento di esaminare l'I/O.

Limitazioni

  • Per evitare l'aumento dello spazio, puoi creare manualmente un massimo di 2500 snapshot su un'istanza. L'aumento dello spazio garantisce che gli snapshot non occupino troppo spazio di archiviazione nel database.

  • Se il numero di snapshot supera il limite, AlloyDB Omni elimina tutti gli snapshot manuali più vecchi di 90 giorni. Per rimanere entro il limite degli snapshot, devi liberare spazio eliminando gli snapshot non necessari prima di acquisirne uno nuovo.

  • AlloyDB Omni elimina periodicamente gli snapshot manuali più vecchi di 90 giorni.

Passaggi successivi