Cambiar la configuración de PostgreSQL

Gen 2

Puedes configurar los parámetros de la base de datos en el momento del aprovisionamiento y en una instancia en ejecución mediante la API o la CLI c IBM Cloud® Databases for PostgreSQL e Gen 2. Algunos parámetros requieren un reinicio progresivo (cada miembro se reinicia de uno en uno); otros se aplican de inmediato sin tiempo de inactividad.

Aprovisionamiento de una nueva instancia con parámetros personalizados

Incluye solo los parámetros que quieras configurar.

Aprovisionamiento mediante la 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"
        }
      }
    }
  }'

Aprovisionamiento mediante la 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"
          }
        }
      }
    }
  }'

Actualización de parámetros en una instancia en ejecución

Incluye solo los parámetros que quieras cambiar; el resto no se modifican. Los valores de parámetro no válidos se rechazan con un error 4xx.

Actualización 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"
        }
      }
    }
  }'

Actualización mediante la 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"
          }
        }
      }
    }
  }'

Configuración de los parámetros de PostgreSQL

max_connections

  • Tipo: entero
  • Por defecto: 115
  • Rango: 25 – 500
  • Es necesario reiniciar: Sí

Número máximo de conexiones simultáneas de clientes. El valor predeterminado de 115 reserva 15 conexiones para la supervisión de la plataforma; quedan 100 disponibles para las cargas de trabajo de los clientes.

log_connections

  • Tipo: booleano
  • Por defecto: false
  • ¿Es necesario reiniciar el sistema? No

Registra cada conexión realizada con éxito, lo cual resulta útil para los registros de auditoría de cumplimiento (por ejemplo, SOC 2 o PCI DSS).

log_disconnections

  • Tipo: booleano
  • Por defecto: false
  • ¿Es necesario reiniciar el sistema? No

Registra cada sesión al desconectarse, incluida la duración de la misma.

log_min_duration_statement

  • Tipo: entero (milisegundos)
  • Valor predeterminado: 100
  • Rango: -1 – 3 600 000
  • ¿Es necesario reiniciar el sistema? No

Registra las entradas que superen la duración especificada (ms). Establecer en -1 para desactivarlo, y en 0 para registrar todas las instrucciones.

max_locks_per_transaction

  • Tipo: entero
  • Por defecto: 64
  • Rango: 10 – 1.024
  • Es necesario reiniciar: Sí

Número medio de bloqueos de objetos disponibles por transacción.

max_prepared_transactions

  • Tipo: entero
  • Valor por defecto: 0
  • Rango: 0 – 500
  • Es necesario reiniciar: Sí

Número máximo de transacciones en el estado preparado. Establezca el valor en 0 (por defecto) para desactivar la confirmación en dos fases. Establece un valor distinto de cero únicamente si tu aplicación utiliza PREPARE TRANSACTION. Cuando esté habilitado, mantén este valor igual a max_connections.

shaked_buffers

  • Tipo: entero (8 bloques de kB )
  • Por defecto: ~25 % de la RAM de la variante de host
  • Rango: ~25 % de RAM – ~40 % de RAM
  • Es necesario reiniciar: Sí

Tamaño del grupo de memoria compartida en bloques de 8 kB. 1 GiB = 131 072 bloques. La plataforma establece el valor predeterminado en aproximadamente el 25 % de la memoria RAM del host, con un máximo de aproximadamente el 40 %. El valor se ajusta automáticamente al escalar la infraestructura.

wal_level

  • Tipo: enumeración
  • Por defecto: lógico
  • Valores válidos: réplica, lógico
  • Es necesario reiniciar: Sí

Controla el nivel de detalle de WAL. logical admite la replicación lógica y CDC; replica solo admite la replicación física.

La reducción de un logico a una réplica puede hacer que las ranuras de replicación lógicas existentes queden inutilizables. Asegúrese de que no haya ninguna carga de trabajo de CDC o de replicación lógica activa antes de modificar este valor.

max_wal_senders

  • Tipo: entero
  • Por defecto: 10
  • Rango: 10 – 40
  • Es necesario reiniciar: Sí

Número máximo de procesos emisores de WAL simultáneos. Cada suscriptor de replicación lógica y cada sistema en espera físico requiere un emisor.

max_replication_slots

  • Tipo: entero
  • Por defecto: 10
  • Rango: 10 – 40
  • Es necesario reiniciar: Sí

Número máximo de ranuras de replicación. Cada suscriptor de replicación lógica requiere una ranura. Elimina rápidamente los espacios no utilizados, ya que los espacios abandonados conservan el WAL y pueden agotar el espacio en disco. Debe cumplirse la condición max_wal_senders >= max_replication_slots.

max_worker_processes

  • Tipo: entero
  • Por defecto: 8
  • Mínimo: 8
  • Máximo: por niveles de memoria. 8, 16, 24 o 32, dependiendo de la configuración de RAM del host
  • Es necesario reiniciar: Sí

Presupuesto total para los procesos en segundo plano, compartido entre la replicación lógica y otras tareas en segundo plano.

Límites de max_worker_processes en función de la RAM
RAM del servidor Valor máximo de max_worker_processes
Menos de 16 GiB 8
16 – 31 GiB 16
32 – 63 GiB 24
64 GiB o más 32

Debe cumplirse la condición max_worker_processes >= max_logical_replication_workers + 4.

max_logical_replication_workers

  • Tipo: entero
  • Por defecto: 4
  • Mínimo: 4
  • Máximo: Niveles de memoria: 4, 12, 20 o 28, dependiendo de la configuración de RAM del host
  • Es necesario reiniciar: Sí

Trabajadores disponibles para la replicación lógica. El máximo es el nivel max_worker_processes - 4:

El parámetro max_logical_replication_workers está limitado por la memoria RAM
RAM del servidor Máximo max_logical_replication_workers
Menos de 16 GiB 4
16 – 31 GiB 12
32 – 63 GiB 20
64 GiB o más 28

pgaudit.log

  • Tipo: cadena (clases de eventos separadas por comas)
  • Por defecto: ddl
  • ¿Es necesario reiniciar el sistema? No

Lista, separada por comas, de clases de sentencias que se deben auditar:

pgaudit.log clases de eventos
Clase Declaraciones registradas
leer SELECT, COPY FROM
escribir INSERTAR, ACTUALIZAR, BORRAR, TRUNCAR, COPIAR A
function Llamadas a funciones y bloques DO
rol CONCESIÓN, REVOCACIÓN, cambios en roles y privilegios
DDL Todo el lenguaje DDL, excepto las sentencias relacionadas con los roles
Otros DISCARD, FETCH, CHECKPOINT, VACUUM, SET
misc_set Solo instrucciones SET
todo Todas las clases de enunciados anteriores
ninguno Desactiva el registro de auditoría de sesiones

El uso de instancias all o write on busy puede generar grandes volúmenes de registros.

pgaudit.role

  • Tipo: cadena
  • Valor predeterminado: "" (vacío; registro de auditoría a nivel de objeto desactivado)
  • ¿Es necesario reiniciar el sistema? No

Rol utilizado para el registro de auditoría a nivel de objeto. pgAudit registra la actividad en los objetos sobre los que este rol tiene privilegios. El rol debe existir antes de configurar este parámetro.