일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- pg_basebackup
- PostgreSQL Parameter 설정 방법
- sql문 전체 출력 방법
- oracle error
- PostgreSQL Parameter
- OGG
- Goldengate
- oracle
- 19c tde
- pgcrypto
- multitenant
- ogg 구성
- PostgreSQL 스키마 관리
- 아카이브로그 삭제
- 다른계정에서 dblink 삭제방법
- db upgrade
- Archive delete
- ogg 설치 방법
- PostgreSQL 테이블스페이스 생성 삭제
- dblink 삭제
- PostgreSQL Admin
- ogg-01028
- table lock 조치 방법
- PostgreSQL Backup and Recovery
- PostgreSQL Install
- pg_dumpall
- psql 복구
- PostgreSQL 아키텍처
- Linux
- sql문 짤릴 때
- Today
- Total
인성장
[PostgreSQL] 동작 원리 (5) 본문
PostgreSQL 동작 원리
위의 그림은 PostgreSQL의 전반적인 아키텍처입니다.
앞에서 다룬 PostgreSQL 구조 내용을 바탕으로 PostgreSQL이 어떠한 방식으로 사용자가 연결하고 동작하는지 순서대로 알아보겠습니다.
1. Postmaster 프로세스는 사용자들이 DB에 접속할 수 있게끔 하는 Listener 역할을 하며 클라이언트로부터 새로운 연결 요청을 기다립니다.
2. 새로운 클라이언트의 연결 요청이 들어오면 요청에 대한 인증을 하고 postgres 프로세스를 생성합니다. 이때 각각의 postgres 프로세스에는 Local Memory가 개별 할당됩니다.
3. postgres 프로세스가 클라이언트와 연결되면 postmaster 프로세스는 클라이언트와의 연결을 해제하며 클라이언트는 postgres 프로세스에 SQL을 전달합니다.
* 클라이언트와 연결이 해제된 postmaster 프로세스는 다른 클라이언트의 연결 요청을 대기합니다. 새로운 연결 요청이 오면 그 연결에 대해 postgres 프로세스를 생성하고 클라이언트와 연결을 해제하는일을 반복합니다.
4. postgres 프로세스가 전달받은 쿼리를 수행한 후 클라이언트에 결과를 반환합니다.
5. 전달받은 SQL문 수행결과값을 반환하기 위해 postgres 프로세스는 데이터베이스의 Shared Buffers에서 원하는 Data Block이 있는지 확인합니다.
6. Shared Buffers에서 찾을 수 없는 경우 OS로 요청합니다. OS Cache에 해당 Block이 존재한다면 해당 Block을 Shared Buffers로 전달할 것입니다. OS Cache에도 Data가 없는 경우 데이터파일(디스크)에서 원하는 Data Block을 Shared Buffers로 Caching 합니다. 이때 물리적인 I/O가 발생하게 되는 것입니다.
7. 클라이언트 요청이 변경 작업인 경우 변경은 Shared Buffer 안에서 이루어집니다. WAL Buffers에는 변경 로그가 임시저장 됩니다.
8. 변경된 데이터(Dirty Data) 및 변경 로그(트랜잭션)는 이후 Background Writer 프로세스와 Checkpointer 프로세스에 의해 Dirty Block을 Data File에 내려쓰게 됩니다.
! Tip
이해를 돕기위해 추가설명하자면, 사용자 요청에 의해 변경된 데이터들은 모두 Memory(Shared Buffer)에 적용되는데, Memory는 휘발성이기 때문에 언젠가는 이러한 변경 데이터들을 디스크에 적용해야 합니다. 그래서 변경된 Block을 Dirty 상태로 표시하고, 향 후 일정 조건에 의해 디스크(Data File)로 내려쓰게 되는 것입니다. 그 역할이 바로 BG Writer, Checkpoint 프로세스입니다.
각각의 프로세스는 아래와 같은 조건을 만족할 경우 동기화작업을 수행합니다.
- Background Writer 프로세스는 정기적으로 일정량의 Dirty Block을 Data Files에 내려씁니다.
- Checkpointer 프로세스는 체크포인트 발생 시 모든 Dirty Block을 Data Files에 내려씁니다.
* Oracle의 CKPT 프로세스는 DBWn 프로세스가 Dirty Buffer를 Data File에 내려 쓰도록 명령하는 역할만 수행하지만,
PostgreSQL의 Checkpointer 프로세스는 Dirty Block을 직접 내려쓰는 역할까지 수행합니다.
9. Checkpointer 프로세스는 체크포인트 발생 시 Dirty Block을 Data File에 내려쓰는 역할 뿐만 아니라 해당 시점까지의 체크포인트 레코드를 WAL File에 기록하는 역할도 수행합니다.
마지막으로 완료된 체크포인트의 표시를 ${data directory 경로}/global/pg_control 파일에 업데이트 합니다.
10. 디스크로 데이터를 내려쓰기 전에 먼저 트랜잭션 로그가 WAL File(디스크)로 해당 트랜잭션 내용을 내려씁니다. 그 역할을 해주는 프로세스가 바로 WAL Writer 프로세스입니다. WAL Writer 프로세스는 트랜잭션 Commit 시점 또는 WAL Buffers가 가득 차는 시점에 WAL Buffers의 내용을 디스크로 내려씁니다. 해당 WAL File은 Database를 복구하는데 사용됩니다. WAL Files는 checkpoint가 발생하면 이전 트랜잭션 내용이 담긴 WAL File은 전부 삭제되니 Archive Mode를 사용하여 이 WAL File들을 보존해야 합니다.
Archive 영역에 WAL File을 저장하게 하는 프로세스가 바로 Archiver입니다.
참조사이트
DB 인사이드 | PostgreSQL Architecture - 4. 동작 원리
본 문서에서는 PostgreSQL Architecture 전반에서 다룬 내용을 바탕으로 커넥션 생성 및 사용자요청처리, 백그라운드 Process의 동작 방식 등에 대한 내용을 다루겠습니다. 커넥션 생성 과정우선 사용자
blog.ex-em.com
'PostgreSQL > Architecture' 카테고리의 다른 글
[PostgreSQL] Vacuum (7) (0) | 2023.11.29 |
---|---|
[PostgreSQL] SQL 처리 과정 (6) (2) | 2023.11.29 |
[PostgreSQL] Memory 구조 (4) (0) | 2023.11.28 |
[PostgreSQL] Process 구조 (3) (0) | 2023.11.28 |
[PostgreSQL] Data Directory 구조 (2) (0) | 2023.11.28 |