2. DBMS이야기/01. PostgreSQL

[Admin] 1.Architecture : Instance

OSSW(Open Source System SoftWare 2014. 5. 21. 22:05

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)

     - 요청 CallPostgres 연결 후 통신에 관여하지 않음

     - DBMS 운영에 필요한 프로세스 비정상 종료 시 재 기동 수행


   2) Postgres (Server Backend Process)

     - Hybrid Pipe & Filter Architecture 방식으로 쿼리 수행
     - Catalog, Rule, Table
의 공유 Repository를 참조

     - SQL Query 전달 및 Result Data 추출

     - Storage ManagerUtility 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_logIO 부하 발생


     ② WAL_Buffers : 세션들이 수행하는 트랜잭션에 대한 변경 로그를 캐싱하는 메모리 공간 (복구용)

         - 한 개의 트랜잭션 종료(commit)Disk($PGDATA/pg_xlog, pg_clog)에 기록 

         - postgresql.conf 에서 설정 (PPAS 서버 재 기동 필요)

         - 보통 shared pool1/32 크기로 지정 권장

         - 기본 설정 값 - 64KB

         

          ※ 관련파라미터 : fsync (on - 트랜잭션 시 마다 WAL log 기록 보장(성능부하), off - WAL log 기록 보장 불가(신뢰증가)), commit_delay (WAL LogDisk에 기록 시 지연 시간, 기본 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


   ① BG Writer (필수
      - Buffer의 데이터를 디스크에 기록, Checkpointer 역할 수행 (Log Ahead 기법에 의거 Check Point 발생 시 등에 수행)


      ※ 관련파라미터 : 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 segmentswitch 하는 시간)


   ④ 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)