본문 바로가기
Database & Bigdata/PostgreSQL

[PostgreSQL] 서비스 운영을 위한 Postgresql.conf 기본 parameters 셋팅

by z.1nee 2022. 11. 1.
SMALL

listen_addresses='*'

어디에서든 접근 가능

 

log_destination = 'stderr'

Local Path에서 Standard Error Format으로 남겨짐

 

logging_collector = on

stderr로 전송된 로그 메시지를 캡처해 로그 파일로 리다이렉트 하는 logging collector 백그라운드 프로세스 활성화

 

 

wal_level = logical

WAL에 저장되는 데이터의 양이나 수준을 지정하는 설정 streaming replication 을 위해서는 최소 replication

 

 

archive_mode = on

wal 아카이브 파일을 만드려면 wal_level 환경 매개 변수 값으로 replica 이상을 지정한 다음 archive_mode on

 

 

archive_command = 'dd conv=fdatasync bs=256k if=%p of=/archive/temp_ktidcportal/%f && \\mv -vf /archive/temp %f /archive

해당 파티션으로 먼저 임시 파일 이름으로 복사를 하고, 복사가 끝나면 그 이름을 원래의 이름으로 바꾸는 방식 사용

%p: WAL 파일의 절대 경로, %f: 저장할 로그 파일의 이름

dd bs 값은 해당 호스트의 디스크 버퍼와 OS의 디스크 캐시를 가장 잘 활용할 수 있는 값이면 됨. 일반적인 리눅스 환경이면, 256k~512k

true로 설정하면 wal segment는 계속 만들어지지만 아카이빙은 되지 않기 때문에 복구의 필요한 WAL 파일의 체인이 단절되는 현상이 발생 -> 지나간 WAL 파일을 사용할 수 없음

 

 

log_min_duration_statement = 2000

설정한 시간 이상이 소요되는 Query들과 그 소요시간을 Log에 남김

 

 

log_line_prefix = '%t %u@%r/%d (%p) '

log_destination 'stderr'로 설정했을 때, 발생하는 Log들의 접두어를 설정할 수 있음

 

 

 

 

log_statement = 'ddl'

Query 로그를 어느 수준으로 남길지 설정

none(default): Query를 안남김,

ddl: table create drop 같이 구조 변경 하는 Query 이상,

mod : data record 단위로 변경을 하는 Query 이상,

all : 모든 Query

 

 

 

 

shared_preload_libraries = '$libdir/pg_stat_statements,$libdir/auto_explain,$libdir/passwordcheck'

PostgreSQL이 시작될때 로드할 라이브러리를 결정하는 서버 구성 매개 변수

 

 

track_functions = all

함수 호출 횟수 및 사용된 시간의 추적을 활성화

pl : procedure로 작성된 언어만 추적,

all: SQL  C 언어 함수도 추적

 

 

track_activity_query_size = 65536  

각각의 활성 세션에 대해 현재 실행 중인 명령을 추적하기 위해 pg_stat_activity_auery 필드에 예약된 바이트 수를 지정함

 

 

pg_stat_statements.max = 10000  

이 모듈에서 처리할 수 있는 최대 쿼리 수를 지정 pg_stat_statments 뷰에 보일 최대 로우 수를 지정

 

 

pg_stat_statements.track  = all    

수집할 쿼리문의 사용빈도에 따른 쿼리문 사용 통계 정보 수집 범위를 지정

top(default): 자주 사용하는 쿼리를 대상,

all : 모든 쿼리를 대상,

none : 아무 쿼리도 수집하지 않음

                                                                                        

auto_explain.log_min_duration = '5min'     

쿼리 실행 시간이 해당 밀리초 이상인 경우에 실행 계획을 확인하도록 함 (0으로 지정하면 모든 쿼리를 대상으로 함)

 

 

 

 

shared_buffers = 4066593kB        

데이터베이스에 액세서를 시도하면, 먼저 디스크에서 필요한 데이터를 공유 버퍼로 먼저 읽어들여 데이터를 읽고, 쓰기 처리함

이후, 동일한 데이터 액세스에 대해서는 공유버퍼에서 읽어 들여, 느린 디스크 액세스를 줄여 성능을 확보할 수 있는 기본적인 튜닝

공유 버퍼의 크기는 기본 32M이지만, 대략 서버 메모리 기준으로 1/4~1/2 정도로 할당함

 

 

autovacuum_max_workers = 5

한 번에 실행할 수 있는 autovaccum 프로세스의 최대 수를 지정 (default :3)

 

 

max_replication_slots = 6

서버가 지원할 수 있는 최대 replication 슬롯 수 (default : 10)

 

 

 

hot_standby = on          

standby server에서는 hot_standby가 반드시 on이어야 Read Only로 동작함

 

 

 

max_wal_senders = 6      

master server에서 postgresql을 실행하면 생성되는 process들 중에서 WAL 파일을 전송할 수 있는 최대 서버수를 결정하는 항목 (default 0)

 

 

 

log_temp_files = 1024kb

query를 실행할 때 미리 정해진 Memory(Work_mem) 이상을 사용할 때 일부를 temp_file에 저장하게 됨

temp_file 사용에 관련된 log를 남길것인지 여부 설정 (0 이상의 값은 그 크기를 넘는 temp_file 이 사용될 때만 Log를 남김)

너무 큰 Size의 결과값을 가져오는 Query를 파악해서 Tuning 하거나, 'work_mem' 설정을 tuning 할 필요가 있는지 확인할 때 이 값을 사용

 

 

 

max_connections = 204   

최대 동시 접속 가능 수

 

 

 

maintenance_work_mem = 512MB

vacuum, create index  alter table add foreign key와 같이 유지 보수 작업에서 사용할 최대 메모리 양을 설정

백업 및 복원 시 속도에도 해당 설정의 영향을 받음

기본값은 64MB, 권장값은 서버 메모리의 1/16, work_mem보다 크게 설정 하는 것을 권장

 

 

 

checkpoint_completion_target = 0.9         

체크포인트 도중 변경된 버퍼 플러시에 사용된 시간으로 체크포인트 간격의 분수 값

 

 

 

temp_file_limit = 100GB  

임시 파일이 증가할 수 있는 최대 크기(KB)를 설정

 

 

 

autovacuum_work_mem = 1815MB

각각의 autovacuum worker 프로세스에서 사용되는 최대 메모리 양을 지정(default 값은 maintenance_work_mem 값을 대신 사용해야 함으로 -1)

 

 

 

 

max_wal_size = 2GB       

pg_wal 디렉토리에 저장되는 WAL 파일들의 총합을 뜻함 (soft limit이라서 약간 초과될 수도 있음)

줄이면 checkpoint가 조금 더 빈번하게 발생

 

                                                       

min_wal_size = 2GB       

wal을 남겨두는 최소값을 지정

wal 조각 파일들은 더 이상 보관할 필요가 없어지면 지워지는 것이 아니라, 앞으로 사용될 파일로 그 이름을 바꿈

 

 

 

 

 

work_mem=256MB

정렬/해시/조인 등의 동작에 사용될 수 있는 메모리 사용량을 의미 이 메모리는 임시 디스크에 데이터를 쓰기전에 사용됨

쿼리 단위가 아니라 정렬 및 해시 작업의 수에 따라 설정

여러 세션이 병렬로 메모리를 사용할 수 있으므로 전체 메모리는 설정한 값의 몇배가 될 수 있음에 주의

work_mem=Total RAM / Max_connections /16

 권장값 13MB 정도인데 현재 256MB

댓글