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 메모리 설정
- 기본값 -
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_buffer
및 max_connection
구성 값과 관련하여 자동으로 조정됩니다.
IBM Cloud® Databases for PostgreSQL 일반 설정
- 기본값 - 115
- 데이터베이스 다시 시작? - 예
- 참고: 연결 수를 늘리기 전에 스케일링이 필요할 수 있습니다.
- 기본값-64
- 옵션 - 최소값 10
- 데이터베이스 다시 시작? - 예
- 기본값-
0
- 데이터베이스 다시 시작? - 예
- 참고 - 기본값인
0
은 준비된 트랜잭션의 사용을 비활성화하므로 꼭 필요한 경우가 아니라면 사용하지 않는 것이 좋습니다.
- 기본값-
local
- 데이터베이스 다시 시작 - 아니오
- 옵션 -
local
,on
또는off
- 참고 -
synchronous_commit
를 off로 설정하면 불완전한 종료가 발생하는 경우 커미트된 트랜잭션이 손실되는 대신 트랜잭션 커미트 비율이 증가합니다.synchronous_commit
을(를)on
(으)로 설정하면 리더와 하나 이상의 복제본에 기록된 경우에만 트랜잭션이 커미트됩니다. 따라서on
설정은 최소 세 개의 멤버로 수평으로 스케일링된 대형에서만 사용할 수 있습니다. 이 변경 사항을 적용하기 전에 고가용성을 참조하세요.
- 기본값-
12
- 데이터베이스 다시 시작 - 아니오
- 참고 - 기본값으로 이 설정을 그대로 두는 것이 좋습니다. SQL 조회를 프로파일링하고 비효율적인 비트맵 힙 스캔을 관찰한 경우에만 늘리십시오. IOPS는 디스크 크기와 연동되므로 기본 디스크나 작은 크기의 디스크에서는 이 설정을 늘리지 않는 것이 좋습니다.
- 기본값-
10000
- 데이터베이스 다시 시작 - 아니오
- 옵션 - 최소 값 100
- 참고 - 교착 상태를 확인하기 전에 대기하는 밀리초 수와 잠금 대기가 로그되는 지속 기간입니다. 로깅 통합을 통해 사용 가능한 로그입니다. 이 숫자를 너무 낮게 설정하면 성능에 부정적인 영향을 미칩니다.
- 기본값-
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)
- 기본값-
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
- 기본값-
100
- 데이터베이스 다시 시작 - 아니오
- 옵션 - 최소 값 100
- 참고 - 지정된 시간(밀리초) 보다 오래 걸리는 명령문이 로그됩니다.
- 기본값-
111
- 데이터베이스 다시 시작 - 아니오
- 기본값-
15
- 데이터베이스 다시 시작 - 아니오
- 기본값-
6
- 데이터베이스 다시 시작 - 아니오
IBM Cloud® Databases for PostgreSQL WAL 설정
- 기본값-
1800
- 데이터베이스 다시 시작 - 아니오
- 옵션 - 최소 값 300
- 참고 - 다음 WAL 파일로의 전환을 강제 실행하기 전에 대기하는 시간(초)입니다. 이 시간(초)이 경과하고 데이터베이스 활동이 있었으면 서버가 새 세그먼트로 전환됩니다. 데이터가 아카이브되지 않은 상태로 유지될 수 있는 시간을 효과적으로 제한합니다.
다음 세 가지 설정 wal_level
, max_replication_slots
, max_wal_senders
는 wal2json
논리적 디코딩 플러그인을 사용하도록 설정합니다. 이 플러그인을
사용하지 않는 경우에는 이 설정을 기본값으로 두십시오.
- 기본값-
replica
- 데이터베이스 다시 시작 - 예
- 참고 - WAL 레벨을 제어합니다. 허용되는 값은
replica
또는logical
입니다. 논리적 디코딩을 사용하려면logical
으로 설정합니다. 논리적 디코딩을 사용하지 않는 경우,logical
을 사용하면 WAL 크기가 증가되어 실제 이점은 없으면서 몇 가지 단점이 생깁니다.
- 기본값-
10
- 데이터베이스 다시 시작 - 예
- 참고 - 동시에 정의된 최대 복제 슬롯 수입니다. 기본 및 최소 슬롯 수는 10입니다. 20개 슬롯은 고가용성(HA) 용도로 배치하여 내부 사용을 위해 예약됩니다. 슬롯을 사용하려면 20개가 넘는 값을 설정하고 이용자당 하나의 슬롯을 사용해야 합니다. 예상 소비자당 최소값보다 하나 더 큰 슬롯을 추가하십시오.
wal2json
을 사용하고max_replication_slots
를 늘리지 않으면 HA 및 읽기 전용 복제본에 영향을 줄 수 있습니다.wal2json
을 사용하지 않는 경우 이 설정을 기본값으로 둡니다.
- 기본값-
12
- 데이터베이스 다시 시작 - 예
- 참고 - 동시에 실행되는 최대 WAL 전송자 프로세스 수입니다. 기본값이자 최소값은 12입니다. 이용자당 하나의
wal_sender
가 필요합니다. 20개 슬롯은 고가용성(HA) 용도로 배치하여 내부 사용을 위해 예약됩니다. 20 이상의 값을 설정해야 하며 예상 소비자당 최소값보다wal_sender
을 하나 더 추가하는 것이 좋습니다.wal2json
을 사용하고max_wal_senders
를 늘리지 않으면 HA 및 읽기 전용 복제본에 영향을 줄 수 있습니다.wal2json
을 사용하지 않는 경우 이 설정을 기본값으로 둡니다.