Decodifica logica su una replica di lettura - Amazon Relational Database Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Decodifica logica su una replica di lettura

RDS per PostgreSQL supporta la replica logica dalle istanze in standby con PostgreSQL 16.1. Questo approccio consente di creare una decodifica logica da un’istanza in standby di sola lettura che riduce il carico sull’istanza database primaria. È possibile ottenere una maggiore disponibilità per le applicazioni che devono sincronizzare i dati su più sistemi. Questa funzionalità migliora le prestazioni del data warehouse e dell’analisi dei dati.

Inoltre, gli slot di replica su una determinata istanza in standby mantengono la promozione dell’istanza in standby all’istanza primaria. Ciò significa che, in caso di failover di un’istanza database primaria o di promozione di un’istanza in standby come nuova istanza primaria, gli slot di replica persisteranno e i precedenti abbonati dell’istanza in standby non saranno interessati.

Per creare una decodifica logica su una replica di lettura
  1. Attivare la replica logica: per creare la decodifica logica su un’istanza in standby, è necessario attivare la replica logica sull’istanza database di origine e sulla relativa replica fisica. Per ulteriori informazioni, consulta Configurazione delle repliche di lettura con PostgreSQL.

    • Per attivare la replica logica per un’istanza database RDS per PostgreSQL appena creata: creare un nuovo gruppo di parametri database personalizzato e impostare il parametro statico rds.logical_replication su 1. Quindi, associare questo gruppo di parametri database all’istanza database di origine e alla relativa replica di lettura fisica. Per ulteriori informazioni, consulta Associazione di un gruppo di parametri database a un’istanza database in Amazon RDS.

    • Per attivare la replica logica per un’istanza database RDS per PostgreSQL esistente: modificare il gruppo di parametri personalizzato dell’istanza database di origine e la relativa replica di lettura fisica per impostare il parametro statico rds.logical_replication su 1. Per ulteriori informazioni, consulta Modifica dei parametri in un gruppo di parametri database in Amazon RDS.

    Nota

    È necessario riavviare l’istanza database per applicare queste modifiche ai parametri.

    È possibile utilizzare la seguente query per verificare i valori per wal_level e rds.logical_replication sull’istanza database di origine e sulla relativa replica di lettura fisica.

    Postgres=>SELECT name,setting FROM pg_settings WHERE name IN ('wal_level','rds.logical_replication'); name | setting -------------------------+--------- rds.logical_replication | on wal_level | logical (2 rows)
  2. Creare una tabella nel database di origine: eseguire la connessione al database nell’istanza database di origine. Per ulteriori informazioni, consulta Connessione a un'istanza database che esegua il motore di database di PostgreSQL.

    Utilizzare le seguenti query per creare una tabella nel database di origine e inserire i valori:

    Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY); CREATE TABLE
    Postgres=>INSERT INTO LR_test VALUES (generate_series(1,10000)); INSERT 0 10000
  3. Creare una pubblicazione per la tabella di origine: utilizzare la seguente query per creare una pubblicazione per la tabella sull’istanza database di origine.

    Postgres=>CREATE PUBLICATION testpub FOR TABLE LR_test; CREATE PUBLICATION

    Utilizzare una query SELECT per verificare i dettagli della pubblicazione creata sia sull’istanza database di origine sia sull’istanza di replica di lettura fisica.

    Postgres=>SELECT * from pg_publication; oid | pubname | pubowner | puballtables | pubinsert | pubupdate | pubdelete | pubtruncate | pubviaroot -------+---------+----------+--------------+-----------+-----------+-----------+-------------+------------ 16429 | testpub | 16413 | f | t | t | t | t | f (1 row)
  4. Creare una sottoscrizione da un’istanza di replica logica: creare un’altra istanza database RDS per PostgreSQL come istanza di replica logica. Assicurarsi che il VPC sia configurato correttamente per garantire che questa istanza di replica logica possa accedere all’istanza di replica di lettura fisica. Per ulteriori informazioni, consulta Amazon VPC e Amazon RDS. Se l’istanza database di origine è inattiva, potrebbero verificarsi problemi di connettività e l’istanza primaria potrebbe non inviare i dati all’istanza in standby.

    Postgres=>CREATE SUBSCRIPTION testsub CONNECTION 'host=Physical replica host name port=port dbname=source_db_name user=user password=password' PUBLICATION testpub; NOTICE: created replication slot "testsub" on publisher CREATE SUBSCRIPTION
    Postgres=>CREATE TABLE LR_test (a int PRIMARY KEY); CREATE TABLE

    Utilizzare una query SELECT per verificare i dettagli dell’abbonamento sull’istanza di replica logica.

    Postgres=>SELECT oid,subname,subenabled,subslotname,subpublications FROM pg_subscription; oid | subname | subenabled | subslotname | subpublications -------+---------+------------+-------------+----------------- 16429 | testsub | t | testsub | {testpub} (1 row) postgres=> select count(*) from LR_test; count ------- 10000 (1 row)
  5. Controllare lo stato dello slot di replica logica: è possibile vedere solo lo slot di replica fisica sull’istanza database di origine.

    Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn ---------------------------------------------+-----------+--------------------- rds_us_west_2_db_dhqfsmo5wbbjqrn3m6b6ivdhu4 | physical | (1 row)

    Tuttavia, sull’istanza di replica di lettura, è possibile vedere lo slot di replica logica e il valore confirmed_flush_lsn che cambia man mano che l’applicazione utilizza attivamente le modifiche logiche.

    Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn -----------+-----------+--------------------- testsub | logical | 0/500002F0 (1 row)
    Postgres=>select slot_name, slot_type, confirmed_flush_lsn from pg_replication_slots; slot_name | slot_type | confirmed_flush_lsn -----------+-----------+--------------------- testsub | logical | 0/5413F5C0 (1 row)