IBM Cloud Docs
Databases for PostgreSQL 구성 변경하기

Databases for PostgreSQL 구성 변경하기

IBM Cloud® Databases for PostgreSQL 를 사용하면 PostgreSQL 구성 설정 중 일부를 변경하여 PostgreSQL 데이터베이스를 사용 사례에 맞게 조정할 수 있습니다. 데이터베이스 구성을 영구적으로 변경하려면 Cloud Databases CLI 플러그인 또는 API를 사용하여 배포용 구성 파일에 변경 사항을 기록하세요.

구성은 스키마에 정의됩니다. 변경하려면 설정 및 새 값이 포함된 JSON 오브젝트를 API 또는 CLI에 보내십시오. 예를 들어 max_connections 설정을 150으로 설정하려면 다음과 같이 입력합니다:

{"configuration":{"max_connections":150}}

를 CLI 또는 API에 추가합니다.

자세한 내용은 PostgreSQL 연결 관리 를 참조하세요.

Databases for PostgreSQL 에서 CLI 사용

deployment-configuration-schema 명령을 사용하여 배치의 기본 구성을 확인할 수 있습니다.

ibmcloud cdb deployment-configuration-schema <INSTANCE_NAME_OR_CRN>

마찬가지로 deployment-configuration 명령을 사용하여 구성을 변경하십시오.

ibmcloud cdb deployment-configuration <INSTANCE_NAME_OR_CRN> [@JSON_FILE | JSON_STRING]

이 명령은 JSON 오브젝트 또는 파일에서 수행하려는 변경사항을 읽습니다. 자세한 정보는 참조 페이지를 참조하십시오.

IBM Cloud® Databases for PostgreSQL 에서 API 사용

두 개의 배치 구성 엔드포인트를 사용하여 구성 스키마를 보고 구성을 변경할 수 있습니다. 구성 스키마를 보려면 GET 요청을 /deployments/{id}/configuration/schema에 보내십시오.

구성을 변경하려면 PATCH의 요청 본문에서 JSON 오브젝트로 변경하려는 설정을 /deployments/{id}/configuration로 전송하십시오.

자세한 내용은 API 참조를 참조하세요.

사용 가능한 IBM Cloud® Databases for PostgreSQL 구성 설정

IBM Cloud® Databases for PostgreSQL 시간대 설정

IBM Cloud® Databases for PostgreSQL 배치의 시간대는 항상 UTC (Coordinated Universal Time) 입니다. 이 설정은 클라이언트가 구성할 수 없습니다.

IBM Cloud® Databases for PostgreSQL 메모리 설정

shared_buffers

  • 기본값 - 32000(8 KiB 버퍼 수 또는 약 262MB)
  • 권장되는 최대값: 사용 가능한 RAM의 25%
  • 데이터베이스 다시 시작? -

shared_buffers에 권장되는 메모리 할당은 배치 RAM의 25%입니다. shared_buffers 을 더 높게 설정하면 메모리 문제가 발생하여 데이터베이스가 충돌할 수 있으며, 이미 OS에서 데이터를 버퍼링하고 있을 가능성이 높으므로 데이터베이스의 성능이 저하될 수 있습니다. shared_buffers 을 할당된 메모리 양과 같거나 거의 같거나 더 높게 설정하면 데이터베이스가 시작되지 않습니다. 설정에서는 8KiB 공유 메모리 버퍼의 수를 지정합니다.

예를 들어, 1GB의 shared_buffers 공간은 1048576 KiB이고 (1048576 KiB / 8 KiB)는 131072개의 버퍼입니다. shared_buffers에 할당하지 않아도 배치에서 캐싱 및 성능을 위해 추가 RAM을 사용할 수 있습니다. 배치에서 사용하기 위해 할당된 RAM을 모두 사용하도록 데이터베이스를 구성할 필요는 없습니다.

기존 워크로드의 경우 또는 RAM을 스케일링할 때, 메모리를 공유 버퍼로 늘리는 것이 최선의 조치가 아닐 수도 있습니다. 대신 테이블 및 인덱스 캐시 적중률을 추적하십시오. 캐시 적중률이 90%대 초반인 경우, OS가 shared_buffers 을 늘리는 대신 다른 영역의 메모리를 사용하도록 합니다.

이러한 조회를 admin 사용자로 사용하거나 pg_monitor 역할의 사용자로 사용하여 캐시 적중률을 추적할 수 있습니다.

테이블

SELECT
  sum(heap_blks_read) as heap_read,
  sum(heap_blks_hit)  as heap_hit,
  sum(heap_blks_hit) / (sum(heap_blks_hit) + sum(heap_blks_read)) as table_hit_ratio
FROM
  pg_statio_user_tables;

인덱스

SELECT
  sum(idx_blks_read) as idx_read,
  sum(idx_blks_hit)  as idx_hit,
  (sum(idx_blks_hit) - sum(idx_blks_read)) / sum(idx_blks_hit) as index_hit_ratio
FROM
pg_statio_user_indexes;

work_mem 값은 shared_buffermax_connection 구성 값과 관련하여 자동으로 조정됩니다.

IBM Cloud® Databases for PostgreSQL 일반 설정

max_connections

max_locks_per_transaction

  • 기본값-64
  • 옵션 - 최소값 10
  • 데이터베이스 다시 시작? -

max_prepared_transactions

  • 기본값- 0
  • 데이터베이스 다시 시작? -
  • 참고 - 기본값인 0준비된 트랜잭션의 사용을 비활성화하므로 꼭 필요한 경우가 아니라면 사용하지 않는 것이 좋습니다.

synchronous_commit

  • 기본값- local
  • 데이터베이스 다시 시작 - 아니오
  • 옵션 - local, on 또는 off
  • 참고 - synchronous_commit를 off로 설정하면 불완전한 종료가 발생하는 경우 커미트된 트랜잭션이 손실되는 대신 트랜잭션 커미트 비율이 증가합니다. synchronous_commit을(를) on(으)로 설정하면 리더와 하나 이상의 복제본에 기록된 경우에만 트랜잭션이 커미트됩니다. 따라서 on 설정은 최소 세 개의 멤버로 수평으로 스케일링된 대형에서만 사용할 수 있습니다. 이 변경 사항을 적용하기 전에 고가용성을 참조하세요.

effective_io_concurrency

  • 기본값- 12
  • 데이터베이스 다시 시작 - 아니오
  • 참고 - 기본값으로 이 설정을 그대로 두는 것이 좋습니다. SQL 조회를 프로파일링하고 비효율적인 비트맵 힙 스캔을 관찰한 경우에만 늘리십시오. IOPS는 디스크 크기와 연동되므로 기본 디스크나 작은 크기의 디스크에서는 이 설정을 늘리지 않는 것이 좋습니다.

deadlock_timeout

  • 기본값- 10000
  • 데이터베이스 다시 시작 - 아니오
  • 옵션 - 최소 값 100
  • 참고 - 교착 상태를 확인하기 전에 대기하는 밀리초 수와 잠금 대기가 로그되는 지속 기간입니다. 로깅 통합을 통해 사용 가능한 로그입니다. 이 숫자를 너무 낮게 설정하면 성능에 부정적인 영향을 미칩니다.

log_connections

  • 기본값- off
  • 데이터베이스 다시 시작 - 아니오
  • 옵션 - on 또는 off
  • 참고 - 이 값을 on 으로 설정하면 로그가 상세하게 표시됩니다. 또한 60초마다 메트릭을 추출하므로 모니터링 도구의 연결도 표시됩니다. 이 값이 on으로 설정된 경우 표시되는 IP 주소가 Kubernetes 내부 IP이므로 연결 URI에서 application_name을 설정하여 개요를 로그에 유지하는 것이 좋습니다. 연결 URI 조정에 대한 자세한 내용은 PostgreSQL 문서에서 확인할 수 있습니다. off로 설정하면 기본 설정에 대한 동작이 변경되지 않으며 연결이 기록되지 않습니다. 로그는 로깅 통합을 통해 사용할 수 있습니다. on이 설정된 경우 로그에 다음 예와 유사한 행이 표시됩니다. 여기서 애플리케이션 이름은 test-app으로 설정됩니다.
2021-03-01 10:27:56 UTC [[unknown]] [00000] [708]: [2-1] user=admin,db=ibmclouddb,client=127.0.0.1 LOG:  connection authorized: user=admin database=ibmclouddb application_name=test-app SSL enabled (protocol=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384, bits=256, compression=off)

log_disconnections

  • 기본값- off
  • 데이터베이스 다시 시작 - 아니오
  • 옵션 - on 또는 off
  • 참고 - 이 값을 on 으로 설정하면 로그가 상세하게 표시됩니다. 또한 60초마다 메트릭을 추출할 때 모니터링 도구의 연결이 끊어진 상태도 표시합니다. 이 값이 on으로 설정된 경우 표시되는 IP 주소가 Kubernetes 내부 IP이므로 연결 URI에서 application_name을 설정하여 개요를 로그에 유지하는 것이 좋습니다. 연결 URI 조정에 대한 자세한 내용은 PostgreSQL 문서에서 확인할 수 있습니다. off로 설정하면 기본 설정에 대한 동작이 변경되지 않으며 연결 끊김이 기록되지 않습니다. 로그는 로깅 통합을 통해 사용할 수 있습니다. on이 설정된 경우 로그에 다음 예와 유사한 행이 표시됩니다. 여기서 애플리케이션 이름은 test-app으로 설정됩니다.
2021-03-01 10:27:56 UTC [test-app] [00000] [708]: [3-1] user=admin,db=ibmclouddb,client=127.0.0.1 LOG:  disconnection: session time: 0:00:00.793 user=admin database=ibmclouddb host=127.0.0.1 port=50638

log_min_duration_statement

  • 기본값- 100
  • 데이터베이스 다시 시작 - 아니오
  • 옵션 - 최소 값 100
  • 참고 - 지정된 시간(밀리초) 보다 오래 걸리는 명령문이 로그됩니다.

tcp_keepalives_idle

  • 기본값- 111
  • 데이터베이스 다시 시작 - 아니오

tcp_keepalives_interval

  • 기본값- 15
  • 데이터베이스 다시 시작 - 아니오

tcp_keepalives_count

  • 기본값- 6
  • 데이터베이스 다시 시작 - 아니오

IBM Cloud® Databases for PostgreSQL WAL 설정

archive_timeout

  • 기본값- 1800
  • 데이터베이스 다시 시작 - 아니오
  • 옵션 - 최소 값 300
  • 참고 - 다음 WAL 파일로의 전환을 강제 실행하기 전에 대기하는 시간(초)입니다. 이 시간(초)이 경과하고 데이터베이스 활동이 있었으면 서버가 새 세그먼트로 전환됩니다. 데이터가 아카이브되지 않은 상태로 유지될 수 있는 시간을 효과적으로 제한합니다.

다음 세 가지 설정 wal_level, max_replication_slots, max_wal_senderswal2json 논리적 디코딩 플러그인을 사용하도록 설정합니다. 이 플러그인을 사용하지 않는 경우에는 이 설정을 기본값으로 두십시오.

wal_level

  • 기본값- replica
  • 데이터베이스 다시 시작 -
  • 참고 - WAL 레벨을 제어합니다. 허용되는 값은 replica 또는 logical 입니다. 논리적 디코딩을 사용하려면 logical 으로 설정합니다. 논리적 디코딩을 사용하지 않는 경우, logical을 사용하면 WAL 크기가 증가되어 실제 이점은 없으면서 몇 가지 단점이 생깁니다.

max_replication_slots

  • 기본값- 10
  • 데이터베이스 다시 시작 -
  • 참고 - 동시에 정의된 최대 복제 슬롯 수입니다. 기본 및 최소 슬롯 수는 10입니다. 20개 슬롯은 고가용성(HA) 용도로 배치하여 내부 사용을 위해 예약됩니다. 슬롯을 사용하려면 20개가 넘는 값을 설정하고 이용자당 하나의 슬롯을 사용해야 합니다. 예상 소비자당 최소값보다 하나 더 큰 슬롯을 추가하십시오. wal2json을 사용하고 max_replication_slots를 늘리지 않으면 HA 및 읽기 전용 복제본에 영향을 줄 수 있습니다. wal2json 을 사용하지 않는 경우 이 설정을 기본값으로 둡니다.

max_wal_senders

  • 기본값- 12
  • 데이터베이스 다시 시작 -
  • 참고 - 동시에 실행되는 최대 WAL 전송자 프로세스 수입니다. 기본값이자 최소값은 12입니다. 이용자당 하나의 wal_sender가 필요합니다. 20개 슬롯은 고가용성(HA) 용도로 배치하여 내부 사용을 위해 예약됩니다. 20 이상의 값을 설정해야 하며 예상 소비자당 최소값보다 wal_sender 을 하나 더 추가하는 것이 좋습니다. wal2json을 사용하고 max_wal_senders를 늘리지 않으면 HA 및 읽기 전용 복제본에 영향을 줄 수 있습니다. wal2json 을 사용하지 않는 경우 이 설정을 기본값으로 둡니다.