Cấu trúc processes của PostgreSQL
Khác với một số RDBMS khác sử dụng thread để xử lý, PostgreSQL sử dụng mỗi process cho những chức năng riêng biệt. Sau khi khởi tạo database và khởi động server, PostgreSQL sẽ có những processes như bên dưới.
[postgres@ip-172-31-31-242 ~]$ ps -ef | grep `head -1 $PGDATA/postmaster.pid
postgres 17397 1 0 Apr11 pts/3 00:06:44 /usr/pgsql-9.6/bin/postgres
postgres 17398 17397 0 Apr11 ? 00:00:33 postgres: logger process
postgres 17400 17397 0 Apr11 ? 00:00:18 postgres: checkpointer process
postgres 17401 17397 0 Apr11 ? 00:01:24 postgres: writer process
postgres 17402 17397 0 Apr11 ? 00:01:31 postgres: wal writer process
postgres 17403 17397 0 Apr11 ? 00:06:13 postgres: autovacuum launcher process
postgres 17404 17397 0 Apr11 ? 00:11:30 postgres: stats collector process
postgres 7205 17397 0 03:23 ? 00:00:00 postgres: postgres postgres [local] idle
Cấu trúc tổng quan của các Processes có thể hiểu như bên dưới.
Postmaster Process
postgres 17397 1 0 Apr11 pts/3 00:06:44 /usr/pgsql-9.6/bin/postgres
Là process khởi tạo đầu tiên sau khi server khởi động. Process này đảm nhiệm việc khởi động hoặc dừng các process khác nếu cần hoặc có yêu cầu. Sau khi khởi động Postmaster sẽ khởi động các processes thường trực như bên dưới để PostgreSQL server có thể hoạt động.
- logger process
- checkpointer process
- writer process
- wal writer process
- autovacuum launcher process (process này không khởi động khi parameter autovacuum = off)
- stats collector process
Tiếp đó Postmaster sẽ thực hiện vòng lặp của mình, nếu có yêu cầu kết nối thoả mãn yêu cầu authenticate, hoặc khởi động các tiến trình thường trực khi bị lỗi. Khi có yêu cầu shutdown từ người dùng (pg_ctl stop), Postmaster sẽ gửi các signal tương ứng tới từng server processes.
logger process
postgres 17400 17397 0 Apr11 ? 00:00:18 postgres: logger process
Process này đảm nhiệm việc ghi log của PostgreSQL.
checkpointer process
postgres 17400 17397 0 Apr11 ? 00:00:18 postgres: checkpointer process
Process này chủ yếu giữ vai trò thực hiện checkpoint (đồng bộ dữ liệu từ bộ nhớ đệm xuống vùng lưu trữ) khi cần thiết.
writer process
postgres 17401 17397 0 Apr11 ? 00:01:24 postgres: writer process
Hay còn gọi là background writer process, process này kết hợp với checkpointer process để đảm bảo việc ghi dữ liệu từ bộ đệm xuống vùng lưu trữ. Thông thường khi checkpoint không hoạt động, process này sẽ ghi từng chút một dữ liệu xuống vùng lưu trữ. Để hiểu thêm về background writer process xin vui lòng tham khảo ở manual tại đây.
wal writer process
postgres 17402 17397 0 Apr11 ? 00:01:31 postgres: wal writer process
Đảm nhiệm việc đồng bộ WAL từ bộ nhớ đệm xuống vùng lưu trữ. Thông thường WAL sẽ được ghi từ bộ đệm xuống vùng lưu trữ khi transaction được commit. Nếu dữ liệu đệm của WAL trên bộ nhớ đệm vượt quá parameter wal_buffers dữ liệu WAL trên vùng nhớ đệm sẽ tự động ghi xuống vùng lưu trữ dữ liệu thông qua process này.
autovacuum launcher process
postgres 17403 17397 0 Apr11 ? 00:06:13 postgres: autovacuum launcher process
Process này thường trú khi paramter autovacuum = on. Proccess này thực hiện chức năng tự động lấy vùng dữ liệu dư thừa sau khi DELETE hoặc UPDATE dữ liệu. Vui lòng thảo khảo bài viết về VACUUM để biết thêm về VACUUM. Process này khởi động các VACUUM worker processes sau mỗi autovacuum_naptime. Các VACUUM worker processes sẽ thực hiện việc VACUUM dữ liệu trên các database.
stats collector process
postgres 17404 17397 0 Apr11 ? 00:11:30 postgres: stats collector process
Process này thực hiện vai trò lưu trữ các thông tin thống kê hoạt động của PostgreSQL và cập nhật vào các system catalog (thông tin nội bộ của PostgreSQL hiện diện bởi các bảng hoặc view pg_stat_*).
Server Process
postgres 7205 17397 0 03:23 ? 00:00:00 postgres: postgres postgres [local] idle
Là các processes được sinh ra khi có yêu cầu từ phía client (aplication). Client gửi yêu cầu (bằng cách chạy các connection API) tới server, phía server sẽ sử dụng thông tin authentication (user, password, database, host) từ client để xem user này có được truy cập vào database không. Nếu được, Postmaster sẽ tạo một server process (bằng API fork()) cho client, từ đó client có thể chạy được các câu truy vấn, ... thông qua server process được tạo.
Một số processes không thường trực
Các processes không thường trực của PostgreSQL
Processes |
Chức năng |
---|
archiver process |
Thực hiện chức năng backup archive log (WAL). Process này khởi động khi parameter archive_mode = on. |
startup process |
Process này thường trực ở Standby node, thực hiện chức năng phản ảnh dữ liệu WAL nhận được từ Master. |
wal receiver process |
Thường trực ở standby. Sau khi khởi động process này kết nối tới Master node và tạo kết nối replication. |
wal sender process postgres |
Thường trực ở Master khi có Standby (hoặc pg_basebackup) kết nối tới. Số lượng process wal sender bằng với số lượng wal receive + pg_basebackup kết nối tới. |
bgworker: logical replication launcher |
[PostgreSQL 10] Process sử dụng cho chức năng logical replication. |