Modifica della configurazione di PostgreSQL

Gen 2

È possibile configurare i parametri del database al momento del provisioning e su un'istanza in esecuzione utilizzando l'API o la CLI c IBM Cloud® Databases for PostgreSQL e Gen 2. Alcuni parametri richiedono un riavvio graduale (ogni nodo viene riavviato uno alla volta); altri vengono applicati immediatamente senza tempi di inattività.

Configurazione di una nuova istanza con parametri personalizzati

Includi solo i parametri che desideri impostare.

Configurazione tramite CLI

ibmcloud resource service-instance-create <INSTANCE_NAME> databases-for-postgresql <SERVICE_PLAN_NAME> <REGION> \
  -p '{
    "dataservices": {
      "postgresql": {
        "configuration": {
          "max_connections": 300,
          "log_connections": true,
          "log_disconnections": true,
          "log_min_duration_statement": 500,
          "max_locks_per_transaction": 128,
          "max_prepared_transactions": 50,
          "wal_level": "logical",
          "shared_buffers": 196608,
          "max_worker_processes": 16,
          "max_logical_replication_workers": 8,
          "max_wal_senders": 20,
          "max_replication_slots": 20,
          "pgaudit.log": "ddl,role,read",
          "pgaudit.role": "auditor"
        }
      }
    }
  }'

Provisioning tramite l'API

curl -X POST \
  https://resource-controller.cloud.ibm.com/v2/resource_instances \
  -H "Authorization: Bearer $IBMCLOUD_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "<INSTANCE_NAME>",
    "resource_plan_id": "<SERVICE_PLAN_ID>",
    "resource_group": "<RESOURCE_GROUP_ID>",
    "target": "<REGION>",
    "parameters": {
      "dataservices": {
        "postgresql": {
          "configuration": {
            "max_connections": 300,
            "log_connections": true,
            "log_disconnections": true,
            "log_min_duration_statement": 500,
            "max_locks_per_transaction": 128,
            "max_prepared_transactions": 50,
            "wal_level": "logical",
            "shared_buffers": 196608,
            "max_worker_processes": 16,
            "max_logical_replication_workers": 8,
            "max_wal_senders": 20,
            "max_replication_slots": 20,
            "pgaudit.log": "ddl,role,read",
            "pgaudit.role": "auditor"
          }
        }
      }
    }
  }'

Aggiornamento dei parametri su un'istanza in esecuzione

Includi solo i parametri che desideri modificare; tutti gli altri rimangono invariati. I valori dei parametri non validi vengono rifiutati con un errore di tipo " 4xx ".

Aggiornamento con la CLI

ibmcloud resource service-instance-update <INSTANCE_NAME_OR_CRN> \
  -p '{
    "dataservices": {
      "postgresql": {
        "configuration": {
          "max_connections": 300,
          "log_connections": true,
          "log_disconnections": true,
          "log_min_duration_statement": 500,
          "max_locks_per_transaction": 128,
          "max_prepared_transactions": 50,
          "wal_level": "logical",
          "shared_buffers": 196608,
          "max_worker_processes": 16,
          "max_logical_replication_workers": 8,
          "max_wal_senders": 20,
          "max_replication_slots": 20,
          "pgaudit.log": "ddl,role,read",
          "pgaudit.role": "auditor"
        }
      }
    }
  }'

Aggiornamento tramite l'API

curl -X PATCH \
  https://resource-controller.cloud.ibm.com/v2/resource_instances/<INSTANCE_ID> \
  -H "Authorization: Bearer $IBMCLOUD_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "parameters": {
      "dataservices": {
        "postgresql": {
          "configuration": {
            "max_connections": 300,
            "log_connections": true,
            "log_disconnections": true,
            "log_min_duration_statement": 500,
            "max_locks_per_transaction": 128,
            "max_prepared_transactions": 50,
            "wal_level": "logical",
            "shared_buffers": 196608,
            "max_worker_processes": 16,
            "max_logical_replication_workers": 8,
            "max_wal_senders": 20,
            "max_replication_slots": 20,
            "pgaudit.log": "ddl,role,read",
            "pgaudit.role": "auditor"
          }
        }
      }
    }
  }'

Configurazione dei parametri di PostgreSQL

max_connections

  • Tipo: intero
  • Valore predefinito: 115
  • Intervallo: da 25 a 500
  • È necessario riavviare il sistema: Sì

Numero massimo di connessioni simultanee dei client. Il valore predefinito di 115 riserva 15 connessioni per il monitoraggio della piattaforma; ne rimangono 100 disponibili per i carichi di lavoro dei client.

log_connessioni

  • Tipo: booleano
  • Impostazione predefinita: false
  • È necessario riavviare il sistema: No

Registra ogni connessione riuscita, il che risulta utile ai fini dei registri di audit di conformità (ad esempio, SOC 2 o PCI DSS).

log_disconnessioni

  • Tipo: booleano
  • Impostazione predefinita: false
  • È necessario riavviare il sistema: No

Registra ogni sessione al momento della disconnessione, compresa la durata della sessione.

log_min_durata_istruzione

  • Tipo: numero intero (millisecondi)
  • Valore predefinito: 100
  • Intervallo: -1 – 3.600.000
  • È necessario riavviare il sistema: No

Registra le istruzioni che superano la durata specificata (ms). Impostare su -1 per disabilitare, su 0 per registrare tutte le istruzioni.

max_locks_per_transazione

  • Tipo: intero
  • Valore predefinito: 64
  • Intervallo: da 10 a 1.024
  • È necessario riavviare il sistema: Sì

Numero medio di blocchi sugli oggetti disponibili per transazione.

max_prepared_transactions

  • Tipo: intero
  • Valore predefinito: 0
  • Intervallo: 0 – 500
  • È necessario riavviare il sistema: Sì

Numero massimo di transazioni nello stato "preparato". Impostare su 0 (impostazione predefinita) per disabilitare il commit in due fasi. Impostare un valore diverso da zero solo se l'applicazione utilizza PREPARE TRANSACTION. Quando questa opzione è abilitata, mantenere questo valore uguale a max_connections.

buffer_condivisi

  • Tipo: intero (8 blocchi da kB )
  • Impostazione predefinita: circa il 25% della RAM della configurazione host
  • Intervallo: ~25% della RAM – ~40% della RAM
  • È necessario riavviare il sistema: Sì

Dimensione del pool di memoria condivisa in blocchi da 8. kB. 1 GiB = 131.072 blocchi. La piattaforma imposta come valore predefinito circa il 25% della RAM dell'host, con un massimo di circa il 40%. Il valore viene regolato automaticamente quando si modifica la scalabilità dell'infrastruttura.

wal_level

  • Tipo: enum
  • Impostazione predefinita: logico
  • Valori validi: replica, logico
  • È necessario riavviare il sistema: Sì

Controlla il livello di dettaglio del WAL. Il tipo “logical” supporta la replica logica e il CDC; il tipo “replica” supporta solo la replica fisica.

La riduzione da logico a replica può rendere inutilizzabili gli slot di replica logica esistenti. Assicurarsi che non vi siano carichi di lavoro CDC o di replica logica attivi prima di modificare questo valore.

max_wal_senders

  • Tipo: intero
  • Valore predefinito: 10
  • Intervallo: 10 – 40
  • È necessario riavviare il sistema: Sì

Numero massimo di processi di invio WAL simultanei. Ogni sottoscrittore di replica logica e ogni standby fisico richiedono un mittente.

max_replication_slots

  • Tipo: intero
  • Valore predefinito: 10
  • Intervallo: 10 – 40
  • È necessario riavviare il sistema: Sì

Numero massimo di slot di replica. Ogni destinatario della replica logica richiede uno slot. Eliminare tempestivamente gli slot inutilizzati, poiché quelli abbandonati conservano i dati WAL e possono esaurire lo spazio su disco. È necessario che max_wal_senders sia maggiore o uguale a max_replication_slots.

max_worker_processes

  • Tipo: intero
  • Valore predefinito: 8
  • Minimo: 8
  • Massimo: a livelli di memoria. 8, 16, 24 o 32 a seconda della configurazione della RAM dell'host
  • È necessario riavviare il sistema: Sì

Budget totale per i processi in background, ripartito tra la replica logica e altre attività in background.

Limiti di max_worker_processes in base alla RAM
RAM dell'host Valore massimo di max_worker_processes
Meno di 16 GiB 8
16 – 31 GiB 16
32 – 63 GiB 24
64 GiB o più 32

È necessario che valga max_worker_processes >= max_logical_replication_workers + 4.

max_logical_replication_workers

  • Tipo: intero
  • Valore predefinito: 4
  • Minimo: 4
  • Massimo: a livelli di memoria — 4, 12, 20 o 28 a seconda della configurazione della RAM dell'host
  • È necessario riavviare il sistema: Sì

Lavoratori disponibili per la replica logica. Il valore massimo è quello del livello max_worker_processes - 4:

limiti di max_logical_replication_workers in base alla RAM
RAM dell'host Valore massimo di max_logical_replication_workers
Meno di 16 GiB 4
16 – 31 GiB 12
32 – 63 GiB 20
64 GiB o più 28

pgaudit.log

  • Tipo: stringa (classi di eventi separate da virgole)
  • Impostazione predefinita: "ddl"
  • È necessario riavviare il sistema: No

Elenco, separato da virgole, delle classi di istruzioni da sottoporre a verifica:

pgaudit.log classi di eventi
Classe Dichiarazioni registrate
leggi SELECT, COPY FROM
scrivi INSERT, UPDATE, DELETE, TRUNCATE, COPY TO
funzione Chiamate di funzione e blocchi DO
ruolo CONCESSIONE, REVOCA, modifiche a ruoli e privilegi
DDL Tutte le istruzioni DDL, ad eccezione di quelle relative ai ruoli
Varie DISCARD, FETCH, CHECKPOINT, VACUUM, SET
misc_set Solo istruzioni SET
tutti Tutte le classi di istruzioni precedenti
nessuno Disattiva la registrazione di audit della sessione

L'utilizzo delle istanze "all" o "write on busy" può generare volumi elevati di log.

pgaudit.role

  • Tipo: stringa
  • Impostazione predefinita: "" (vuoto — registrazione degli audit a livello di oggetto disabilitata)
  • È necessario riavviare il sistema: No

Ruolo utilizzato per la registrazione degli audit a livello di oggetto. Il servizio " pgAudit " registra le attività relative agli oggetti su cui questo ruolo dispone di privilegi. Il ruolo deve già esistere prima di impostare questo parametro.