Alterando a configuração do PostgreSQL

2ª geração

É possível configurar os parâmetros do banco de dados no momento do provisionamento e em uma instância em execução, utilizando a API ou a CLI com o serviço “ IBM Cloud® Databases for PostgreSQL ” Gen 2. Alguns parâmetros exigem uma reinicialização gradual (cada membro é reiniciado um de cada vez); outros são aplicados imediatamente, sem tempo de inatividade.

Provisionamento de uma nova instância com parâmetros personalizados

Inclua apenas os parâmetros que você deseja definir.

Provisionamento por meio da 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"
        }
      }
    }
  }'

Provisionamento por meio da 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"
          }
        }
      }
    }
  }'

Atualização de parâmetros em uma instância em execução

Inclua apenas os parâmetros que deseja alterar; todos os demais permanecem inalterados. Valores inválidos de parâmetros são rejeitados com um erro do tipo “ 4xx ”.

Atualizando com a 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"
        }
      }
    }
  }'

Atualização por meio da 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"
          }
        }
      }
    }
  }'

Configurando os parâmetros d PostgreSQL

MAX_CONNECTIONS

  • Tipo: inteiro
  • Padrão: 115
  • Intervalo: 25 – 500
  • É necessário reiniciar: Sim

Número máximo de conexões simultâneas de clientes. O valor padrão de 115 reserva 15 conexões para o monitoramento da plataforma; 100 ficam disponíveis para as cargas de trabalho dos clientes.

log_connections

  • Tipo: booleano
  • Padrão: false
  • É necessário reiniciar: Não

Registra cada conexão bem-sucedida, o que é útil para registros de auditoria de conformidade (por exemplo, SOC 2 ou PCI DSS).

log_desconexões

  • Tipo: booleano
  • Padrão: false
  • É necessário reiniciar: Não

Registra cada sessão ao se desconectar, incluindo a duração da sessão.

log_min_duration_statement

  • Tipo: inteiro (milissegundos)
  • Padrão: 100
  • Faixa: -1 – 3.600.000
  • É necessário reiniciar: Não

Registra as instruções que excedem a duração especificada (ms). Defina como “ -1 ” para desativar e “0” para registrar todas as instruções.

max_locks_per_transaction

  • Tipo: inteiro
  • Padrão: 64
  • Intervalo: 10 – 1.024
  • É necessário reiniciar: Sim

Número médio de bloqueios de objeto disponíveis por transação.

max_prepared_transactions

  • Tipo: inteiro
  • Padrão: 0
  • Intervalo: 0 – 500
  • É necessário reiniciar: Sim

Número máximo de transações no estado “preparado”. Defina como 0 (padrão) para desativar o commit em duas fases. Defina um valor diferente de zero somente se o seu aplicativo utilizar o comando PREPARE TRANSACTION. Quando ativado, mantenha esse valor igual a max_connections.

shared_buffers

  • Tipo: inteiro (8 blocos de kB )
  • Padrão: ~25% da memória RAM do tipo de host
  • Faixa: ~25% da RAM – ~40% da RAM
  • É necessário reiniciar: Sim

Tamanho do pool de memória compartilhada em 8 blocos de kB. 1 GiB = 131.072 blocos. A plataforma define o valor padrão em cerca de 25% da memória RAM do host, com um máximo de cerca de 40%. O valor é ajustado automaticamente quando a infraestrutura é dimensionada.

wal_level

  • Tipo: enum
  • Padrão: lógico
  • Valores válidos: réplica, lógico
  • É necessário reiniciar: Sim

Controla o nível de detalhamento do WAL. A instância “logical” oferece suporte à replicação lógica e ao CDC; a instância “replica” oferece suporte apenas à replicação física.

A redução de um slot lógico para uma réplica pode tornar os slots de replicação lógica existentes inutilizáveis. Certifique-se de que não haja nenhuma carga de trabalho de CDC ou de replicação lógica ativa antes de alterar esse valor.

max_wal_senders

  • Tipo: inteiro
  • Padrão: 10
  • Intervalo: 10 – 40
  • É necessário reiniciar: Sim

Número máximo de processos remetentes do WAL em simultâneo. Cada assinante de replicação lógica e cada instância em espera física requerem um remetente.

max_replication_slots

  • Tipo: inteiro
  • Padrão: 10
  • Intervalo: 10 – 40
  • É necessário reiniciar: Sim

Número máximo de slots de replicação. Cada assinante de replicação lógica requer um slot. Exclua imediatamente os slots não utilizados, pois os slots abandonados retêm o WAL e podem esgotar o espaço em disco. É necessário que max_wal_senders seja maior ou igual a max_replication_slots.

max_worker_processes

  • Tipo: inteiro
  • Padrão: 8
  • Mínimo: 8
  • Máximo: Estratificado por memória. 8, 16, 24 ou 32, dependendo do tipo de RAM do host
  • É necessário reiniciar: Sim

Orçamento total para processos em segundo plano, dividido entre a replicação lógica e outras tarefas em segundo plano.

Memória RAM do host Máximo de max_worker_processes
Menos de 16 GiB 8
16 – 31 GiB 16
32 – 63 GiB 24
64 GiB ou mais 32
{: caption="Limites do max_worker_processes em função da memória RAM" caption-side="bottom"}

É necessário que max_worker_processes seja maior ou igual a max_logical_replication_workers + 4.

max_logical_replication_workers

  • Tipo: inteiro
  • Padrão: 4
  • Mínimo: 4
  • Máximo: Com camadas de memória — 4, 12, 20 ou 28, dependendo da configuração de RAM do host
  • É necessário reiniciar: Sim

Trabalhadores disponíveis para replicação lógica. O valor máximo é o nível 4 de max_worker_processes:

Memória RAM do host Máximo de max_logical_replication_workers
Menos de 16 GiB 4
16 – 31 GiB 12
32 – 63 GiB 20
64 GiB ou mais 28
{: caption="Limites do max_logical_replication_workers em função da memória RAM" caption-side="bottom"}

pgaudit.log

  • Tipo: string (classes de eventos separadas por vírgulas)
  • Padrão: "ddl"
  • É necessário reiniciar: Não

Lista separada por vírgulas das classes de instruções a serem auditadas:

pgaudit.log classes de eventos
Classe Declarações registradas
ler SELECT, COPY FROM
gravar INSERT, UPDATE, DELETE, TRUNCATE, COPY TO
função Chamadas de função e blocos DO
função CONCEDER, REVOGAR, alterações de funções e privilégios
DDL Todas as instruções DDL, exceto as relacionadas a funções
Diversos DISCARD, FETCH, CHECKPOINT, VACUUM, SET
misc_set Apenas instruções SET
todos Todas as classes de instruções anteriores
Nenhum Desativa o registro de auditoria de sessão

O uso das opções “all” ou “write on busy” pode gerar grandes volumes de registros.

pgaudit.role

  • Tipo: string
  • Padrão: "" (vazio — registro de auditoria no nível do objeto desativado)
  • É necessário reiniciar: Não

Função utilizada para o registro de auditoria no nível do objeto. O pgAudit registra as atividades nos objetos nos quais essa função possui privilégios. A função deve existir antes de você definir esse parâmetro.