Modification de la configuration d' PostgreSQL

Génération 2

Vous pouvez configurer les paramètres de la base de données au moment de l'approvisionnement et sur une instance en cours d'exécution à l'aide de l'API ou de l'interface de ligne de commande (CLI) avec IBM Cloud® Databases for PostgreSQL Gen 2. Certains paramètres nécessitent un redémarrage progressif (chaque composant est redémarré un par un); d'autres sont appliqués immédiatement, sans interruption de service.

Provisionnement d'une nouvelle instance avec des paramètres personnalisés

N'incluez que les paramètres que vous souhaitez définir.

Provisionnement à l'aide de l'interface de ligne de commande (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"
        }
      }
    }
  }'

Provisionnement via 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"
          }
        }
      }
    }
  }'

Mise à jour des paramètres sur une instance en cours d'exécution

N'incluez que les paramètres que vous souhaitez modifier; tous les autres restent inchangés. Les valeurs de paramètres non valides sont rejetées avec une erreur 4xx.

Mise à jour à l'aide de l'interface 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"
        }
      }
    }
  }'

Mise à jour via 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"
          }
        }
      }
    }
  }'

Configuration des paramètres d' PostgreSQL

max_connections

  • Type: nombre entier
  • Valeur par défaut: 115
  • Nombre de mots: 25 à 500
  • Redémarrage requis: Oui

Nombre maximal de connexions client simultanées. La valeur par défaut de 115 réserve 15 connexions à la surveillance de la plateforme; 100 sont disponibles pour les charges de travail des clients.

log_connections

  • Type: booléen
  • Valeur par défaut: false
  • Redémarrage requis: Non

Enregistre chaque connexion réussie, ce qui est utile pour les pistes d'audit de conformité (par exemple, SOC 2 ou PCI DSS).

log_disconnections

  • Type: booléen
  • Valeur par défaut: false
  • Redémarrage requis: Non

Enregistre chaque session lors de la déconnexion, y compris sa durée.

log_min_duration_statement

  • Type: nombre entier (en millisecondes)
  • Valeur par défaut: 100
  • Fourchette: -1 – 3 600 000
  • Redémarrage requis: Non

Enregistre les instructions dépassant la durée spécifiée (ms). Définissez la valeur sur -1 pour désactiver la journalisation, ou sur 0 pour consigner toutes les instructions.

max_locks_per_transaction

  • Type: nombre entier
  • Valeur par défaut: 64
  • Plage: 10 – 1 024
  • Redémarrage requis: Oui

Nombre moyen de verrous d'objet disponibles par transaction.

max_prepared_transactions

  • Type: nombre entier
  • Valeur par défaut: 0
  • Plage: 0 – 500
  • Redémarrage requis: Oui

Nombre maximal de transactions à l'état préparé. Définissez cette valeur sur 0 (par défaut) pour désactiver la validation en deux phases. Ne définissez cette valeur sur un nombre différent de zéro que si votre application utilise PREPARE TRANSACTION. Lorsque cette option est activée, veillez à ce que cette valeur soit égale à max_connections.

shared_buffers

  • Type: entier (8 blocs de kB s)
  • Par défaut: environ 25 % de la mémoire vive (RAM) de la variante d'hôte
  • Fourchette: ~25 % de RAM – ~40 % de RAM
  • Redémarrage requis: Oui

Taille du pool de mémoire partagée en blocs de 8 kB. 1 GiB = 131 072 blocs. La plateforme définit la valeur par défaut à environ 25 % de la mémoire vive (RAM) de l'hôte, avec un maximum d'environ 40 %. La valeur est automatiquement ajustée lorsque l’infrastructure est mise à l’échelle.

wal_level

  • Type: énumération
  • Par défaut: logique
  • Valeurs valides: réplique, logique
  • Redémarrage requis: Oui

Contrôle le niveau de détail du WAL. logical prend en charge la réplication logique et le CDC; replica prend uniquement en charge la réplication physique.

La réduction du nombre de répliques par rapport au nombre de slots de réplication logiques peut rendre les slots de réplication logiques existants inutilisables. Assurez-vous qu'aucune charge de travail CDC ou de réplication logique n'est active avant de modifier cette valeur.

max_wal_senders

  • Type: nombre entier
  • Valeur par défaut: 10
  • Fourchette: 10 – 40
  • Redémarrage requis: Oui

Nombre maximal de processus d'envoi WAL simultanés. Chaque abonné à la réplication logique et chaque instance de secours physique nécessite un expéditeur.

max_replication_slots

  • Type: nombre entier
  • Valeur par défaut: 10
  • Fourchette: 10 – 40
  • Redémarrage requis: Oui

Nombre maximal d'emplacements de réplication. Chaque abonné à la réplication logique nécessite un emplacement. Supprimez rapidement les emplacements inutilisés, car ceux-ci conservent le journal WAL et peuvent épuiser l'espace disque. La condition suivante doit être satisfaite : max_wal_senders >= max_replication_slots.

max_worker_processes

  • Type: nombre entier
  • Valeur par défaut: 8
  • Minimum: 8
  • Maximum: à plusieurs niveaux de mémoire. 8, 16, 24 ou 32, selon la configuration de la mémoire vive (RAM) de l'hôte
  • Redémarrage requis: Oui

Budget total alloué aux processus d’arrière-plan, réparti entre la réplication logique et les autres tâches d’arrière-plan.

Limites de max_worker_processes en fonction de la mémoire vive (RAM)
Mémoire vive (RAM) de l'hôte Valeur maximale de max_worker_processes
Moins de 16 GiB 8
16 – 31 GiB 16
32 – 63 GiB 24
64 GiB ou plus 32

La condition suivante doit être satisfaite : max_worker_processes >= max_logical_replication_workers + 4.

max_logical_replication_workers

  • Type: nombre entier
  • Valeur par défaut: 4
  • Minimum: 4
  • Maximum: niveaux de mémoire — 4, 12, 20 ou 28 selon la configuration de la RAM de l’hôte
  • Redémarrage requis: Oui

Workers disponibles pour la réplication logique. La valeur maximale correspond au niveau max_worker_processes - 4 :

Limites de max_logical_replication_workers en fonction de la mémoire vive (RAM)
Mémoire vive (RAM) de l'hôte Valeur maximale de max_logical_replication_workers
Moins de 16 GiB 4
16 – 31 GiB 12
32 – 63 GiB 20
64 GiB ou plus 28

pgaudit.log

  • Type: chaîne de caractères (classes d'événements séparées par des virgules)
  • Par défaut: ddl
  • Redémarrage requis: Non

Liste, séparée par des virgules, des classes d’instructions à auditer :

pgaudit.log classes d'événements
Classe Déclarations enregistrées
lecture SELECT, COPY FROM
écriture INSERT, UPDATE, DELETE, TRUNCATE, COPY TO
fonction Appels de fonction et blocs DO
rôle GRANT, REVOKE, modifications des rôles et des privilèges
DDL Toutes les instructions DDL, à l'exception de celles liées aux rôles
divers DISCARD, FETCH, CHECKPOINT, VACUUM, SET
misc_set Instructions SET uniquement
tout Toutes les classes d'énoncés précédentes
aucun Désactive la journalisation d'audit de session

L'utilisation des instances all ou write on busy peut générer des volumes de journaux importants.

pgaudit.role

  • Type: chaîne de caractères
  • Valeur par défaut: (vide — journalisation des audits au niveau des objets désactivée)
  • Redémarrage requis: Non

Rôle utilisé pour la journalisation des audits au niveau des objets. Le rôle pgAudit enregistre les activités sur les objets pour lesquels ce rôle dispose de privilèges. Le rôle doit exister avant que vous ne définissiez ce paramètre.