1. Architecture(Instance) : Overview
2. Instance : Server Process
1) Postermaster(edb-postgres)
- Supervisory 데몬 프로세스로서 항상 Running 상태 유지
- Client로 부터의 Connection 요청에 대한 인증 및 허가 수행 (Listener기능)
- Connection 요청 시 Postgres Process 할당/기동 (세션 별 Single-threaded Backend 수행, 1:1)
- 요청 Call과 Postgres 연결 후 통신에 관여하지 않음
- DBMS 운영에 필요한 프로세스 비정상 종료 시 재 기동 수행
2) Postgres (Server Backend Process)
- Hybrid Pipe & Filter Architecture 방식으로 쿼리 수행
- Catalog, Rule, Table의 공유 Repository를 참조
- SQL Query 전달 및 Result Data 추출
- Storage Manager와 Utility Process에게 수행 호출
3. Instance : System Memory
1) Postgres Shared Memory
① Shared_Buffers : Disk의 데이터와 데이터의 변경 사항을 캐싱하는 공유 메모리 공간
- 주로 checkpoint 발생 시 Disk($PGDATA/global or base)에 기록
- 서버 메모리가 1GB이상인 경우 초기 설정은 메모리 전체의 25%이상 권장
(checkpoint_segments 값 증가 고려)
- Windows OS의 경우 비 효율 발생 (권장크기 : 64MB~512MB)
-기본 설정 값 - 32MB(최소 128KB)
※ 관련파라미터 : checkpoint_segments
- 두 개 자동 WAL checkpoint 사이에 발생하는 최대 로그세그먼트 수
- 기본 16MB*3개=48MB가 되면 shared pool의 페이지를 Disk에 기록 (64~128MB 권장)
- 해당 세그먼트가 찰 경우 $PGDATA/base와 /x_log에 IO 부하 발생
② WAL_Buffers : 세션들이 수행하는 트랜잭션에 대한 변경 로그를 캐싱하는 메모리 공간 (복구용)
- 한 개의 트랜잭션 종료(commit) 시 Disk($PGDATA/pg_xlog, pg_clog)에 기록
- postgresql.conf 에서 설정 (PPAS 서버 재 기동 필요)
- 보통 shared pool의 1/32 크기로 지정 권장
- 기본 설정 값 - 64KB
※ 관련파라미터 : fsync (on - 트랜잭션 시 마다 WAL log 기록 보장(성능부하), off - WAL log 기록 보장 불가(신뢰증가)), commit_delay (WAL Log를 Disk에 기록 시 지연 시간, 기본 0)
③ CLOG_Buffers : 트랜잭션 상태 정보 캐싱 메모리 공간
2) Memory per User Backend Process
- maintenance_work_mem : vacuum, create index, alter table 등에 사용, 기본 1MB
- work_mem : sorting, order by, distinct, merge join 시 사용
- catalog cache, optimizer/executor 등 존재
4. Instance : Utility Process
※ 관련파라미터 : bgwriter_delay (bg write 수행 주기), bgwriter_lru_maxpages (한번 write 시 disk로 내릴 수 있는 최대 buffer page 개수, 자동 증가 가능)
② WAL Writer (필수)
- WAL Buffer에 기록된 트랜잭션 데이터를 디스크에 기록 (세션 별 트랜잭션 정보 기록)
※ 관련파라미터 : wal_level (log detail 정도), fsync (on - disk에 기록 보장), synchronous_commit (on - client에게 commit success를 보내기 전 disk에 기록 보장, off - 성능에 유리하나 disk 기록 보장 저하), wal_writer_delay (wal writer 기록 간 sleep 시간,ms)
③ Archiver
- 디스크의 트랜잭션 로그를 아카이빙, archive_command 설정에 지정된 명령 수행 (로그 스위칭 시 발생)
※ 관련파라미터 : archive_mode (on - archiving 수행), archive_command (logfile segment에 대한 archiving Shell 명령), archive_timeout (강제로 logfile segment를 switch 하는 시간)
④ Autovacuum Lancher
- Work Process를 생성하여 Unused Memory해소, 통계정보 갱신, 데이터 손실 예방을 위한 Object에 대한 Vacuum 수행 (작업 후 Work Process 세션은 자동 종료)
※ 관련파리미터 : autovacuum (on - autovacuum 자동 수행), autovacuum_max_workers(worker process 최대 수), autovacuum_naptime (autovaccuum 수행 간의 sleep 시간)
⑤ Stats Collector
- DBMS 통계정보 수집 (주기적 수행)
- pg_stat_xxx view를 통해 확인 가능
⑥ Sys Logger
- 서버에서 발생하는 로그 기록 및 환경 설정에 따른 로그 파일 변경 수행 (항상기동)
⑦ WAL Receiver / WAL Sender (9.0이상)
- 트랜잭션 로그 스트리밍 기반의 리플리케이션 기능 사용 시 로그 송신 및 수신
⑧ Checkpointer (9.2이상)
- 모든 Checkpoint 수행
※ 관련파라미터 : checkpoint_segments (자동 WAL checkpoint 사이의 최대 Log file segment 수, 기본 3개), checkpoint_timeout (자동 WAL checkpoint 사이의 최대 시간, 기본 5분), checkpoint_warning (checkpoint segments가 차서 checkpoint가 발생됨을 확인하는 간격, 기본 30초)
ㅇ Process 확인
[enterprisedb@myOllehDB1 ~]$ ps -ef | grep edb- | grep -v grep
502 28459 1 0 2013 ? 00:22:40 /postgres/9.2AS/bin/edb-postgres -D /data/myOllehDB -i -k /tmp -p 5444
[enterprisedb@myOllehDB1 myOllehDB]$ ps -ef | grep process
502 28462 28459 0 2013 ? 00:00:00 postgres: logger process
502 28486 28459 0 2013 ? 00:05:43 postgres: checkpointer process
502 28487 28459 0 2013 ? 00:02:06 postgres: writer process
502 28488 28459 0 2013 ? 00:00:36 postgres: wal writer process
502 28489 28459 0 2013 ? 00:01:36 postgres: autovacuum launcher process
502 28490 28459 0 2013 ? 00:00:06 postgres: archiver process last was 000000010000002B00000053
502 28491 28459 0 2013 ? 00:08:16 postgres: stats collector process
by. 이은석 (2014.05.09)
'2. DBMS이야기 > 01. PostgreSQL' 카테고리의 다른 글
PPAS DB Full 백업 스크립트 작성 및 관리 방법 (0) | 2014.05.23 |
---|---|
[Admin] 1.Architecture : Data Cluster (0) | 2014.05.22 |
PostgreSQL 내부 아키텍처에 따른 성능 지연 이슈? (0) | 2014.05.13 |
PostgreSQL (PPAS) PLAN 및 실행계획 보기 [2] (0) | 2014.05.02 |
PostgreSQL (PPAS) PLAN 및 실행계획 보기 [1] (1) | 2014.04.22 |