PostgreSQL 설정 변경하기

2세대

IBM Cloud® Databases for PostgreSQL Gen 2에서는 프로비저닝 시점에, 또는 API나 CLI를 사용하여 실행 중인 인스턴스에서 데이터베이스 매개변수를 구성할 수 있습니다. 일부 매개변수는 순차적 재시작 (각 노드를 한 번에 하나씩 재시작)이 필요한 반면, 다른 매개변수는 다운타임 없이 즉시 적용됩니다.

사용자 지정 매개변수를 사용하여 새 인스턴스 프로비저닝

설정하려는 매개변수만 포함하십시오.

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

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

실행 중인 인스턴스의 매개변수 업데이트

변경하려는 매개변수만 포함하십시오. 나머지는 모두 변경되지 않습니다. 유효하지 않은 매개변수 값은 ‘ 4xx ’ 오류와 함께 거부됩니다.

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

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

PostgreSQL 매개변수 구성

max_connections

  • 유형: 정수
  • 기본값: 115
  • 범위: 25 – 500
  • 재시작 필요: 예

최대 동시 클라이언트 연결 수. 기본값인 115는 플랫폼 모니터링을 위해 15개의 연결을 예약하며, 클라이언트 워크로드를 위해 100개가 사용 가능합니다.

log_connections

  • 유형: 부울
  • 기본값: false
  • 재시작 필요: 아니요

성공적인 연결 건마다 로그를 기록하며, 이는 규정 준수 감사 추적(예: SOC 2 또는 PCI DSS)에 유용합니다.

log_disconnections

  • 유형: 부울
  • 기본값: false
  • 재시작 필요: 아니요

연결이 끊어질 때마다 각 세션을 기록하며, 여기에는 세션 지속 시간도 포함됩니다.

log_min_duration_statement

  • 유형: 정수 (밀리초)
  • 기본값: 100
  • 범위: -1 – 3,600,000
  • 재시작 필요: 아니요

지정된 지속 시간(ms)을 초과하는 로그 문장을 기록합니다. 비활성화하려면 -1 로 설정하고, 모든 문장을 기록하려면 0으로 설정하십시오.

트랜잭션당 최대 잠금 수

  • 유형: 정수
  • 기본값: 64
  • 범위: 10 – 1,024
  • 재시작 필요: 예

트랜잭션당 사용할 수 있는 객체 잠금의 평균 개수.

max_prepared_transactions

  • 유형: 정수
  • 기본값: 0
  • 범위: 0 – 500
  • 재시작 필요: 예

준비 상태에서의 최대 트랜잭션 수. 2단계 커밋을 비활성화하려면 0(기본값)으로 설정하십시오. 애플리케이션에서 PREPARE TRANSACTION을 사용하는 경우에만 0이 아닌 값으로 설정하십시오. 이 기능을 활성화한 경우, 이 값을 max_connections와 동일하게 유지하십시오.

shared_buffers

  • 유형: 정수 (8 kB 블록)
  • 기본값: 호스트 플레버 RAM의 약 25%
  • 범위: RAM의 약 25% ~ RAM의 약 40%
  • 재시작 필요: 예

공유 메모리 풀 크기는 8 kB 블록 단위입니다. 1 GiB = 131,072블록입니다. 이 플랫폼은 호스트 RAM의 약 25%를 기본값으로 설정하며, 최대치는 약 40%입니다. 인프라의 규모가 조정되면 해당 값이 자동으로 조정됩니다.

wal_level

  • 유형: 열거형
  • 기본값: 논리형
  • 유효한 값: 레플리카, 논리적
  • 재시작 필요: 예

WAL 상세 수준을 제어합니다. ‘logical’은 논리적 복제 및 CDC를 지원하며, ‘replica’는 물리적 복제만 지원합니다.

논리적 복제본을 복제본으로 축소하면 기존 논리적 복제 슬롯을 더 이상 사용할 수 없게 될 수 있습니다. 이 값을 변경하기 전에 CDC 또는 논리적 복제 워크로드가 실행 중이지 않은지 확인하십시오.

max_wal_senders

  • 유형: 정수
  • 기본값: 10
  • 범위: 10 – 40
  • 재시작 필요: 예

동시에 실행될 수 있는 WAL 송신자 프로세스의 최대 수. 각 논리적 복제 수신자와 물리적 대기 서버에는 하나의 송신자가 필요합니다.

max_replication_slots

  • 유형: 정수
  • 기본값: 10
  • 범위: 10 – 40
  • 재시작 필요: 예

최대 복제 슬롯 수. 각 논리적 복제 수신자마다 하나의 슬롯이 필요합니다. 사용하지 않는 슬롯은 즉시 삭제하십시오. 방치된 슬롯은 WAL을 계속 유지하므로 디스크 공간을 모두 차지할 수 있습니다. max_wal_senders >= max_replication_slots 조건을 충족해야 합니다.

max_worker_processes

  • 유형: 정수
  • 기본값: 8
  • 최소: 8
  • 최대: 메모리 계층형. 호스트 모델의 RAM 용량에 따라 8, 16, 24 또는 32
  • 재시작 필요: 예

논리적 복제 및 기타 백그라운드 작업에 걸쳐 공유되는 총 백그라운드 작업자 예산.

RAM에 따른 max_worker_processes 제한
호스트 RAM max_worker_processes의 최대값
16 미만 GiB 8
16 – 31 GiB 16
32 – 63 GiB 24
64 GiB 이상 32

max_worker_processes >= max_logical_replication_workers + 4 조건을 충족해야 합니다.

max_logical_replication_workers

  • 유형: 정수
  • 기본값: 4
  • 최소: 4
  • 최대: 메모리 계층형 — 호스트 모델의 RAM 용량에 따라 4, 12, 20 또는 28
  • 재시작 필요: 예

논리적 복제를 수행할 수 있는 작업자. 최대값은 max_worker_processes 단계 - 4입니다:

max_logical_replication_workers는 RAM 용량에 따라 제한됩니다.
호스트 RAM 최대 max_logical_replication_workers
16 미만 GiB 4
16 – 31 GiB 12
32 – 63 GiB 20
64 GiB 이상 28

pgaudit.log

  • 유형: 문자열 (쉼표로 구분된 이벤트 클래스)
  • 기본값: "ddl"
  • 재시작 필요: 아니요

감사 대상 문장 클래스의 쉼표로 구분된 목록:

pgaudit.log 이벤트 클래스
클래스 기록된 진술
읽기 SELECT, COPY FROM
쓰기 INSERT, UPDATE, DELETE, TRUNCATE, COPY TO
함수 함수 호출과 DO 블록
역할 부여, 철회, 역할 및 권한 변경
DDL 역할 관련 문장을 제외한 모든 DDL
기타 DISCARD, FETCH, CHECKPOINT, VACUUM, SET
misc_set SET 문만
모두 앞서 언급된 모든 문장 클래스
없음 세션 감사 로깅을 비활성화합니다

'all'을 사용하거나 'write on busy' 인스턴스를 사용하면 로그 양이 크게 늘어날 수 있습니다.

pgaudit.role

  • 유형: 문자열
  • 기본값: "" (비어 있음 — 객체 수준 감사 로깅이 비활성화됨)
  • 재시작 필요: 아니요

객체 수준 감사 로깅에 사용되는 역할입니다. ‘ pgAudit ’은 이 역할이 권한을 가진 객체에 대한 활동을 기록합니다. 이 매개변수를 설정하기 전에 해당 역할이 이미 존재해야 합니다.