PostgreSQL 의 프로세스
PostgreSQL 은 postmaster 의 메인프로세스와 postmaster 에서 fork 된 프로세스들로 구성됩니다.
fork 된 프로세스는 PostgreSQL 을 위해 각자의 역할을 수행합니다.
1
2
3
4
5
6
7
8
9
|
postgres@VirtualBox:~$ ps -ef | grep postgres
postgres 937 1 0 23:03 ? 00:00:00 /usr/lib/postgresql/10/bin/postgres -D /var/lib/postgresql/10/main -c config_file=/etc/postgresql/10/main/postgresql.conf
postgres 1384 937 0 23:04 ? 00:00:00 postgres: 10/main: checkpointer process
postgres 1385 937 0 23:04 ? 00:00:00 postgres: 10/main: writer process
postgres 1386 937 0 23:04 ? 00:00:00 postgres: 10/main: wal writer process
postgres 1387 937 0 23:04 ? 00:00:00 postgres: 10/main: autovacuum launcher process
postgres 1388 937 0 23:04 ? 00:00:00 postgres: 10/main: archiver process last was 000000010000000000000024
postgres 1389 937 0 23:04 ? 00:00:00 postgres: 10/main: stats collector process
postgres 1390 937 0 23:04 ? 00:00:00 postgres: 10/main: bgworker: logical replication launcher
|
cs |
PID | 프로세스 | 설명 |
937 | Postmaster | 모든 fork 된 프로세스를 제어 Client 가 PostgreSQL 에 접속 시 pg_hba.conf 에 따라 client 를 제어하고, 서비스를 제공하기 위한 새로운 session 을 fork |
1384 | checkpointer | checkpoint 이전의 모든 변경사항이 디스크로 flush |
1385 | writer | 공유메모리의 Dirty page 를 디스크로 주기적으로 flush 수행 Checkpoint 발생 시 모든 dirty page 를 디스크에 기록 checkpoint 발생하지 않더라도 주기적으로 flush 하는 이유는 checkpoint 시 너무많은 IO 가 발생하지 않도록 dirty page 를 미리 flush |
1386 | wal writer | 데이터 파일의 변경 사항을 로그파일로 기록 이 로그를 이용하여 최신으로 복구도 가능 |
1387 | autovacuum launcher | 데이터 변경 시 이전버전의 데이터를 즉시 삭제하지 않고 레코드에 저장하는데, 트랜잭션이 commit 된 후에는 이전 버전의 데이터가 필요하지 않으므로 autovacuum 에 의해 정리 |
1388 | archiver | WAL 은 재활용되기 때문에 과거의 wal logfile 은 새로운 log 덮여써지는데, 이 때 logfile 유실을 방지하기 위해 wal 파일을 백업 |
1389 | stats collector | 쿼리 최적화를 위해 메타정보, 인덱스 변경과 같은 통계 정보를 수집 |
1390 | bgworker | 복제 |
PostgreSQL 의 데이터 폴더 구조
PostgreSQL 은 DBMS 를 운영하기 위해 아래와 같은 데이터 폴더 구조를 가집니다.
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
|
postgres@VirtualBox:~/10/main$ ls -al
합계 92
drwx------ 19 postgres postgres 4096 4월 13 23:03 .
drwxr-xr-x 3 postgres postgres 4096 3월 14 19:09 ..
-rw------- 1 postgres postgres 3 4월 5 00:44 PG_VERSION
drwx------ 7 postgres postgres 4096 4월 5 00:44 base
drwx------ 2 postgres postgres 4096 4월 13 23:04 global
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_commit_ts
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_dynshmem
drwx------ 4 postgres postgres 4096 4월 13 23:04 pg_logical
drwx------ 4 postgres postgres 4096 4월 5 00:44 pg_multixact
drwx------ 2 postgres postgres 4096 4월 13 23:03 pg_notify
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_replslot
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_serial
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_snapshots
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_stat
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_stat_tmp
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_subtrans
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_tblspc
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_twophase
drwx------ 3 postgres postgres 4096 4월 13 23:04 pg_wal
drwx------ 2 postgres postgres 4096 4월 5 00:44 pg_xact
-rw------- 1 postgres postgres 88 4월 5 00:44 postgresql.auto.conf
-rw------- 1 postgres postgres 130 4월 13 23:03 postmaster.opts
-rw------- 1 postgres postgres 107 4월 13 23:04 postmaster.pid
|
cs |
폴더 | 설명 |
base | 해당 폴더 하위에 database 가 각각 폴더로 생성하여 저장 |
global | 모든 데이터베이스에서 공유하는 카탈로그 테이블이 저장 |
pg_commit_ts | 트랜잭션 커밋 타임 스탬프 데이터를 저장 |
pg_dynshmem | 동적 공유메모리 하위 시스템에서 사용하는 파일을 저장 |
pg_logical | 논리적 디코딩을 위한 상태 데이터가 저장 |
pg_multixact | 멀티 트랜잭션 상태의 데이터를 저장 |
pg_notify | LISTEN/NOFIY 상태를 보유 |
pg_replslot | 복제 슬롯 데이터 저장 |
pg_serial | 커밋된 serializable 트랜잭션에 대한 정보 저장 |
pg_snapshots | 스냅샷을 저장 |
pg_stat | 통계 하위 시스템에 대한 영구 파일 존재 |
pg_stat_tmp | 통계 하위 시스템에 대한 임시 파일 존재 |
pg_subtrans | 서브 트랜잭션의 데이터를 보유 |
pg_tblspc | 테이블스페이스의 심볼릭 링크를 저장 |
pg_twophase | 2단계 커밋 또는 준비된 트랜잭션의 상태를 저장 |
pg_wal | WAL 파일이 존재 |
pg_xact | 트랜잭션 커밋 상태 데이터를 저장 |
PG_VERSION | PostgreSQL 의 버전정보 |
postgresql.auto.conf | 설정 한 구성 매개변수를 저장하는데 사용 |
postmaster.opts | 서버가 마지막으로 시작된 명령 줄 옵션을 기록 |
postmaster.pid | 현재 PID, 클러스터데이터 디렉터리 경록, 시작 타임스탬프 등이 저장 |