暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pg进程学习

原创 郭鑫 2020-03-06
1943

postgres启动时先启动postmaster主进程,还会fork出一些辅助子进程

子进程包括:syslogger系统日志进程
bgwriter后台写进程
walwriter预写日志进程
pgarch归档进程
autovacuum系统自动清理进程
pgstat统计信息收集进程
[wsgx@pgpool-node01 ~]$ ps -ef |grep pos
root 1886 1 0 Mar05 ? 00:00:00 /usr/libexec/postfix/master
postfix 1894 1886 0 Mar05 ? 00:00:00 qmgr -l -t fifo -u
wsgx 2571 1 0 Mar05 ? 00:00:00 /soft/pg12/bin/postgres
wsgx 2572 2571 0 Mar05 ? 00:00:02 postgres: logger
wsgx 2574 2571 0 Mar05 ? 00:00:01 postgres: checkpointer
wsgx 2575 2571 0 Mar05 ? 00:00:00 postgres: background writer
wsgx 2576 2571 0 Mar05 ? 00:00:04 postgres: walwriter
wsgx 2577 2571 0 Mar05 ? 00:00:00 postgres: autovacuum launcher
wsgx 2578 2571 0 Mar05 ? 00:00:00 postgres: archiver
wsgx 2579 2571 0 Mar05 ? 00:00:00 postgres: stats collector
wsgx 2580 2571 0 Mar05 ? 00:00:09 postgres: task tracker
wsgx 2581 2571 0 Mar05 ? 00:00:00 postgres: logical replication launcher
wsgx 2585 2571 0 Mar05 ? 00:00:19 postgres: Citus Maintenance Daemon: 13543/10
postfix 16074 1886 0 Mar05 ? 00:00:00 pickup -l -t fifo -u
wsgx 16982 11891 0 00:45 pts/1 00:00:00 grep pos

postmaster负责启动关闭实例,当客户端连接数据库时,先与postmaster建立连接,进行身份验证,通过后,fork一个子进程称为服务进程:
select pid,usename from pg_stat_activity; pid就是服务进程的pid
postgres=# select pid,usename,client_hostname from pg_stat_activity;
pid | usename | client_hostname
-------±---------±----------------
2577 | |
2581 | postgres |
17081 | postgres |
2585 | postgres |
2575 | |
2574 | |
2576 | |
(7 rows)

[wsgx@pgpool-node01 ~]$ ps -ef |grep 2577
wsgx 2577 2571 0 Mar05 ? 00:00:00 postgres: autovacuum launcher
wsgx 17148 11891 0 00:54 pts/1 00:00:00 grep 2577
[wsgx@pgpool-node01 ~][wsgx@pgpoolnode01 ] [wsgx@pgpool-node01 ~] ps -ef |grep 2581
wsgx 2581 2571 0 Mar05 ? 00:00:00 postgres: logical replication launcher
wsgx 17151 11891 0 00:54 pts/1 00:00:00 grep 2581
[wsgx@pgpool-node01 ~]$ ps -ef |grep 2574
wsgx 2574 2571 0 Mar05 ? 00:00:01 postgres: checkpointer
wsgx 17153 11891 0 00:54 pts/1 00:00:00 grep 2574

参数logging_collect 设置为on,主进程才会启动syslogger辅助进程写日志
bgwriter进程作用是 类似dbwr,把内存中的脏页写到磁盘上
walwriter进程负责写wal日志,每个wal日志16MB,循环使用,实质就是redo
pgarch归档进程wal日志被覆盖之前会被归档进程备份出来
autovacuum进程,postgresql对表delete操作,旧数据并不会删除,只不过看不到了,没有并发事务读旧数据时,该进程负责清理工作
pgstat统计信息收集进程,负责收集统计信息

pg共享内存(sga)
pg新版本不需要使用共享内存的内核参数(kernel.shmmax/shmall)也可以使用较大的共享内存

shared_buffers
用于缓存表和索引的数据块
数据的读写都是直接对BUFFER操作的,若所需的块不再缓存中,则需要从磁盘中读取
在buffer中被修改过的,但又没有写到磁盘文件中的块被称之为脏块
由shared_buffers参数控制尺寸
wal_buffers
wal log缓存区,由wal_buffers控制大小
clog buffer
commit log buffer 记录事务状态日志缓存

pg本地内存
服务器进程独占内存结构,每个postgres子进程都会分配一小段内存
work_mem
用于排序和hash
maintenance_work_mem
用于内部运维工作的内存,如VACUUM垃圾回收、create index, rebuild index等等
temp_buffers
用于存储临时表的数据

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论