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 명령을 사용하여 배치의 기본 구성을 확인할 수 있습니다. 명령어의 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 아이디어 포털에 아이디어를 제출하십시오. 원하신다면, IBM Cloud Ideas 에서 IBM Cloud 개선 사항만 보도록 제한할 수 있습니다.

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 설정하면 메모리 문제가 발생하여 데이터베이스가 충돌할 수 있으며, 데이터가 이미 운영체제에 의해 버퍼링될 가능성이 높기 때문에 데이터베이스 성능이 저하될 수 있습니다. 할당된 메모리 양과 동일하거나, 거의 동일하거나, 그보다 높은 값으로 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

  • 기본값- 50
  • 데이터베이스 다시 시작? -
  • 참고 - 값을 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 경우, 이 설정을 기본값으로 유지하십시오.