接上篇:https://developer.aliyun.com/article/1223107?spm=a2c6h.13148508.setting.33.44ec4f0eNvAByn
Prostgers进程通过pg_ctl进行启动。启动以后,默认会有一个网络监听端口5432,也可以在配置文件中修改监听端口。
如上图,当前进程名为postgres,父进程下派生了很多子进程。
Backend进程与用户进程一一对应,他们之间的连接方式被称为专用连接。传统的PG数据库只支持专用连接。而PolarDB在此基础之上又开发出与Oracle类似的共享连接,后续该能力也将开源,由max_connections参数控制数据库允许的最大连接数。
上图为PolarDB后台进程的功能。
写进程负责将PolarDB数据缓冲区的脏块写到数据文件。检查点进程用于做检查点,同时也负责写。
上图即父进程派生出的子进程。
PolarDB的内存结构分为两种,分别是本地内存和共享内存。本地内存为每个backend进程启动时自动分配,共享内存为整个实例提供服务。
本地内存分为以下三种类型:
• work_mem:执行SQL语句时,如果涉及到排序操作、表连接等,则会使用工作内存。
• maintenance_work_mem:主要用于vacuum或者reindex。
• temp_buffers:用于存放临时表。
• 本地内存类似于Oracle的PGA,server进程相当于backend,PGA相当于本地内存。
共享内存分为以下几种类型:
• shared buffer pool:修改数据文件的数据块时,会读到数据缓冲区里进行修改。
• WAL buffer:进行事务操作时,会分配一个日志缓冲区。
• commit log:PolarDB有专门的进程记录提交的事务信息,因此会分配commit log缓冲区,为整个实例提供服务。