yum 설치가 아닌 source make 설치라 디렉토리 구성 등이 다를 수 있습니다.
bash_profile
$ vi ~/.bash_profile
export POSTGRES_HOME=/home1/kimdubi/psql/engn/postgresql-11.7
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=/home1/kimdubi/psql/engn/PGSQL
export MANPATH=$MANPATH:$POSTGRES_HOME/man
export PATH=$POSTGRES_HOME/bin:$PATH
postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*'
port = 3000
max_connections = 1000
#------------------------------------------------------------------------------
# RESOURCE USAGE (except WAL)
#------------------------------------------------------------------------------
# - Memory -
shared_buffers = 1024MB
work_mem = 4MB
maintenance_work_mem = 512MB
dynamic_shared_memory_type = posix
effective_io_concurrency = 200
max_worker_processes=8
max_parallel_workers_per_gather = 2
max_parallel_workers = 8
#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------
# - Settings -
wal_level = logical
wal_buffers = 2MB
max_wal_size = 1GB
# - Archiving -
archive_mode = on
archive_command = 'cp %p /home1/kimdubi/psql/arch/testdb/%f'
#------------------------------------------------------------------------------
# QUERY TUNING
#------------------------------------------------------------------------------
random_page_cost = 1.1
default_statistics_target = 100
effective_cache_size = 3GB # max. Physical M * 0.75
#------------------------------------------------------------------------------
# ERROR REPORTING AND LOGGING
#------------------------------------------------------------------------------
# - Where to Log -
log_destination = 'stderr'
logging_collector = on
log_directory = '/home1/kimdubi/psql/logs/testdb/error_log'
log_filename = 'alert_testdb.log'
# - What to Log -
log_line_prefix = '%t '
#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------
# - Statement Behavior -
search_path = '"$user"'
temp_tablespaces = 'TS_TEMP'
timezone='Asia/Seoul'
lc_messages = 'en_US.UTF-8'
lc_monetary = 'en_US.UTF-8'
lc_numeric = 'en_US.UTF-8'
lc_time = 'en_US.UTF-8'
default_text_search_config = 'pg_catalog.english'
- shared_buffer : data buffer , 전체 서버 메모리의 1/4 ~ 1/3 권장
- work_mem : sort,hash join 등 query 수행 시 사용하는 memory, tempfile 생성이 많으면 더 크게 설정 필요, session 마다 먹는 메모리가 아니라 각 쿼리 내 sort,hash join 작업 만큼 사용되는 메모리
ex) 한 쿼리 내 sorting , hash join 이 한번 씩 발생하면 최대 work_mem * 2 만큼 메모리 사용됨 - maintenance_work_mem : vacuum, create index 에 사용되는 메모리, 전체 서버 메모리의 1/16 ~ 2GB(max)
- max_worker_processes : scan, group by, join 작업에 병렬처리를 지원함. parallel 처리를 수행하는 worker 프로세스의 최대 개수
- max_parallel_workers_per_gather : 하나의 쿼리 당 수행 가능한 최대 worker 프로세스 개수 (defalut 0 - parallel 처리 수행 안함)
- wal_level : WAL 파일에 기록되는 정보의 수준 설정 , mysql 로 비교하면 logical - ROW, replica - MIXED
- wal_buffers : 트랜잭션 로그(WAL log) 버퍼 , shared_buffers 의 1/32 권장
- archive_command : WAL file을 아카이브할 때 사용할 커맨드, %p 는 WAL 로그파일의 절대경로 %f 는 보관할 로그파일 이름
- random_page_cost : random I/O cost 추정값으로 높으면 풀스캔 선호, 상대적으로 줄이면 인덱스 스캔을 선호함 default 4.0
- effective_cache_size : query planner 에게 가용한 caching data의 크기를 알려줘서 cost 예측에 도움을 주는 설정. 값이 높다고 그만큼 memory를 점유하진 않고 index scan을 할 가능성이 높아짐, 전체 메모리의 3/4 권장 default 4GB
pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
=> postgresql 접속 인증 관련 설정으로 oracle 의 sqlnet.ora , cubrid의 broker.access & iplist 파일, mysql의 user@host 와 같은 개념
- 예시 1) local 에서 모든 유저가 패스워드없이 (trust) 모든 데이터베이스에 접속 허용
# TYPE DATABASE USER ADDRESS METHOD
local all all trust
- 예시 2) 111.111.11.x 대역의 모든 호스트는 testdb DB에 testuser 계정으로 md5 인증방식으로만 접속 허용
# TYPE DATABASE USER ADDRESS METHOD
host testdb testuser 111.111.11.0/24 md5