본문으로 건너뛰기

PostgreSQL 설정 변경

$PGDATA/postgresql.conf

# -----------------------------
# PostgreSQL configuration file
# -----------------------------
#
# 이 파일은 다음과 같은 형식의 줄로 구성됩니다:
#
# name = value
#
# ("="는 선택사항입니다.) 공백을 사용할 수 있습니다. "#"을 사용하여 줄의 어디에나
# 주석을 추가할 수 있습니다. 파라미터 명과 허용되는 값의 전체 리스트는 PostgreSQL
# 문서에서 찾을 수 있습니다.
#
# 이 파일에 주석 처리된 설정은 기본값을 나타냅니다. 설정을 다시 주석 처리하는
# 것만으로는 기본값으로 되돌릴 수 없습니다; 서버를 다시 로드해야 합니다.
#
# 이 파일은 서버가 시작할 때와 SIGHUP 신호를 받았을 때 읽힙니다. 시스템이 실행 중일
# 때 이 파일을 편집한 경우, 파일 변경을 적용하기 위해 SIGHUP 신호를 보내거나,
# "pg_ctl reload"를 실행하거나, "SELECT pg_reload_conf()"를 실행해야 합니다.
# 아래에 표시된 일부 파라미터는 변경하려면 서버를 종료하고 재시작해야 합니다.
#
# 모든 파라미터는 서버 실행시 옵션으로 전달 할 수 있습니다. 예를 들어,
# "postgres -c log_connections=on". 일부 파라미터는 "SET" SQL 명령을 사용하여
# 실행 중에 변경할 수 있습니다.
#
# Memory units: B = bytes Time units: us = microseconds
# kB = kilobytes ms = milliseconds
# MB = megabytes s = seconds
# GB = gigabytes min = minutes
# TB = terabytes h = hours
# d = days
#
# ...
SELECT name, setting, unit, source, sourcefile FROM pg_settings;

CONNECTIONS AND AUTHENTICATION


  • listen_addresses
    • 기본값: localhost
    • 변경 시 재시작 필요
    • 서버가 수신할 주소입니다. 여러 주소를 지정하려면 쉼표로 구분합니다.
    • *를 지정하면 모든 주소에서 수신합니다.
  • max_connections
    • 기본값: 100
    • 변경 시 재시작 필요
    • 서버가 동시에 처리할 수 있는 최대 클라이언트 연결 수입니다.
    • AWS RDS 기본값: min(메모리 / 10MB, 5000)

RESOURCE USAGE (except WAL)


  • shared_buffers
    • 기본값: 128MB, 최소값: 128kB
    • 변경 시 재시작 필요
    • 데이터베이스 접근 시도 시 디스크에서 데이터를 shared_buffers로 읽어온 후 접근합니다. 동일한 데이터 접근에 대해서는 shared_buffers로 접근하므로 디스크 접근을 줄일 수 있습니다.
    • AWS RDS 기본값: 메모리의 25%
  • maintenance_work_mem
    • 기본값: 64MB, 최소값: 1MB
    • VACUUM, CREATE INDEX, ALTER TABLE ADD FOREIGN KEY 등의 작업에 사용되는 최대 메모리 양입니다.
    • AWS RDS 기본값: max(메모리 / 64MB, 64MB)

WRITE-AHEAD LOG


  • wal_level
    • 기본값: replica
    • 변경 시 재시작 필요
    • minimal: 충돌이나 즉각적인 종료로부터 복구할 수 있는 최소한의 정보만 저장합니다. max_wal_senders를 0으로 설정해야 합니다.
    • replica: standby server에서 읽기 전용 쿼리 실행을 포함하여 WAL 보관 및 복제를 지원하기에 충분한 데이터를 저장합니다.
    • logical: 논리적 디코딩을 지원하는 데 필요한 정보를 추가합니다. 각 수준에는 모든 하위 수준에서 기록된 정보가 포함됩니다.
  • synchronous_commit
    • 기본값: on
    • 데이터베이스가 클라이언트에게 성공했다고 알리기 전에 WAL 처리가 얼마나 완료되어야하는지에 대한 설정입니다.
  • checkpoint_timeout
    • 기본값: 5min, 최소값: 30s, 최대값: 1d
    • 이전 체크포인트 생성이 완료된 후 checkpoint_timeout 시간이 지나면 다음 체크포인트 생성을 시작합니다.
  • checkpoint_completion_target
    • 기본값: 0.9
    • 체크포인트 생성이 checkpoint_timeout * checkpoint_completion_target 내에 완료되도록 리소스를 할당합니다.
  • max_wal_size
    • 기본값: 1GB
    • WAL 크기가 max_wal_size 값보다 커지면 체크포인트를 생성합니다. 디스크 사용량을 고려하여 최대한 크게 설정하는 것이 좋습니다.
    • 로그에서 distancemax_wal_size 값을 초과하는 경우, 설정 값을 늘려야 합니다.
    • AWS RDS 기본값: 2GB
  • min_wal_size
    • 기본값: 80MB
    • WAL 디스크 사용량이 이 값보다 작으면 WAL 파일을 재사용합니다.
    • AWS RDS 기본값: 192MB

QUERY TUNING


  • effective_cache_size
    • 기본값: 4GB
    • 쿼리 플래너가 단일 쿼리에서 사용할 수 있는 메모리의 양을 추정하는 데 사용합니다.
    • AWS RDS 기본값: 메모리의 50%

데이터 대량으로 삽입하기

  • maintenance_work_mem
  • max_wal_size=4GB
  • checkpoint_timeout=30min
  • synchronous_commit=off
  • wal_buffers=64MB
  • autovacuum=off