Salta al contenuto

Quali sono le limitazioni all'utilizzo di ZDP quando eseguo un aggiornamento della versione secondaria del mio cluster di database Aurora compatibile con PostgreSQL?

5 minuti di lettura
0

Desidero sapere quali sono i limiti dell'utilizzo della funzionalità Zero-Downtime Patching (ZDP). Desidero risolvere le limitazioni prima di eseguire un aggiornamento della versione secondaria del mio cluster di database Amazon Aurora compatibile con PostgreSQL.

Breve descrizione

Prima di aggiornare il cluster, verifica e risolvi i problemi relativi ai seguenti fattori che possono impedire l'utilizzo di ZDP:

  • Query lente
  • Operazioni DDL (Data Definition Language) attive
  • Tablespace temporanei
  • Blocchi di tabelle attivi
  • Sessioni che ascoltano su canali di notifica
  • Versione di TLS incompatibile

Per un elenco completo delle limitazioni, consulta Limitazioni dell’applicazione di patch senza tempo di inattività.

Per un elenco delle versioni di Aurora compatibile con PostgreSQL che supportano ZDP, consulta Aggiornamenti della versione secondaria e applicazione di patch senza tempi di inattività. Per identificare la versione attuale di Aurora compatibile con PostgreSQL, consulta Identificazione delle versioni di Amazon Aurora PostgreSQL.

Nota: il cluster deve utilizzare la classe di istanza supportata db.r, db.t, db.x o db.serverless.

Risoluzione

Identifica e risolvi i problemi relativi alle query lente

Completa i seguenti passaggi:

  1. Connettiti al cluster Aurora compatibile con PostgreSQL.

  2. Per identificare le query lente, esegui questo comando:

    SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state
    FROM pg_stat_activity
    WHERE (now() - pg_stat_activity.query_start) > interval '5 minutes'
    AND state = 'active';
  3. Per interrompere le query lente, esegui questo comando:

    SELECT pg_terminate_backend(PID);

    Nota: sostituisci PID con l'ID del tuo processo.

  4. Per verificare di aver interrotto tutte le query lente, esegui nuovamente la query dal passaggio 2.

Verifica e completa le operazioni DDL

Puoi attendere il completamento delle operazioni DDL oppure interromperle.

Completa i seguenti passaggi:

  1. Per verificare le operazioni DDL attive, esegui questo comando:

    SELECT pid, query, state, now() - query_start AS duration
    FROM pg_stat_activity
    WHERE query ILIKE '%CREATE%' OR query ILIKE '%ALTER%' OR query ILIKE '%DROP%'
    AND state = 'active';
  2. Per interrompere un'operazione DDL, esegui questo comando:

    SELECT pg_terminate_backend(PID);

    Nota: sostituisci PID con l'ID del tuo processo.

  3. Per verificare di aver interrotto l'operazione DDL, esegui nuovamente la query dal passaggio 1.

Identifica e chiudi le tabelle temporanee

Completa i seguenti passaggi:

  1. Per identificare le sessioni con tabelle temporanee, esegui questo comando:

    SELECT schemaname, tablename, pidFROM pg_stat_user_tablesWHERE schemaname LIKE 'pg_temp_%';
  2. Per chiudere le sessioni con tabelle temporanee, esegui questo comando:

    SELECT pg_terminate_backend(PID);

    Nota: sostituisci PID con l'ID del tuo processo.

  3. Per verificare di aver chiuso tutte le tabelle temporanee, esegui nuovamente la query dal passaggio 1.

Controlla e sblocca i blocchi delle tabelle

Completa i seguenti passaggi:

  1. Per verificare la presenza di blocchi di tabelle attivi, esegui questo comando:

    SELECT l.locktype, l.database, l.relation, l.page, l.tuple, l.pid, a.queryFROM pg_locks lJOIN pg_stat_activity a ON l.pid = a.pidWHERE l.granted = true AND l.locktype = 'relation';
  2. Per sbloccare i blocchi, interrompi le sessioni bloccanti eseguendo questo comando:

    SELECT pg_terminate_backend(PID);

    Nota: sostituisci PID con l'ID del tuo processo.

  3. Per verificare di aver sbloccato tutti i blocchi, esegui nuovamente la query dal passaggio 1.

Verifica e interrompi i listener su canali di notifica

Completa i seguenti passaggi:

  1. Per identificare le sessioni in ascolto su canali di notifica, esegui questo comando:

    SELECT pid, query, stateFROM pg_stat_activityWHERE query ILIKE '%LISTEN%' AND state = 'idle';
  2. Per interrompere i listener su canali di notifica, connettiti a ogni sessione ed esegui questo comando:

    UNLISTEN *;

    Oppure esegui il comando pg_terminate_backend per interrompere le sessioni:

    SELECT pg_terminate_backend(PID);

Controlla la versione di TLS

ZDP supporta le connessioni TLSv1.3.

Per verificare la versione di TLS attualmente in uso, esegui questo comando:

SELECT pid, ssl, ssl_versionFROM pg_stat_sslJOIN pg_stat_activity USING (pid)
WHERE ssl = true;

Se utilizzi una versione di TLS precedente alla 1.3, aggiornala.

Aggiorna il motore e monitora l'aggiornamento

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Per aggiornare il cluster di database, consulta Aggiornamento del motore Aurora PostgreSQL a una nuova versione secondaria.

Per monitorare gli eventi di aggiornamento, esegui questo comando AWS CLI describe-events:

aws rds describe-events --source-identifier CLUSTER-NAME --source-type db-cluster --start-time START-TIME

Nota: sostituisci CLUSTER-NAME con il nome del tuo cluster e STARTIME con l'ora di inizio dell'aggiornamento in formato ISO.

Analizza i risultati di ZDP

Per controllare i risultati di ZDP nei log del database, connettiti al cluster ed esegui questo comando:

SELECT * FROM pg_stat_activity WHERE query LIKE '%zero downtime%';

Se l'operazione ZDP è riuscita, vedi un evento del log simile al seguente:

"Attempt to upgrade the database instance ###-### with zero downtime finished. The process took 3485 ms, 378 connections preserved, 0 connections dropped."

Se l'operazione ZDP non è riuscita, vedi un evento del log simile al seguente:

"Database cluster engine minor version upgrade complete. Previous version: 13.12.9. New version: 13.18.4. Total time offline: 21.0 seconds. Taking database cluster offline while the primary instance completes the patch/upgrade process."

Nota: ZDP opera al meglio per quanto possibile. La riuscita dell'operazione dipende dal completamento di tutte le attività di preparazione e del database al momento dell'aggiornamento.

Informazioni correlate

Aggiornamento dei cluster di database Amazon Aurora PostgreSQL

Best practice con Amazon Aurora PostgreSQL

Utilizzo di Amazon Aurora PostgreSQL

AWS UFFICIALEAggiornata 8 mesi fa