PostgreSQL(三)实例结构与后台进程

目录

一、实例与实例结构

1、实例

2、实例结构

二、内存结构

1、Local memory area

2、Shared memory area

三、后台进程

1、进程结构

2、postgres server process

3、backend process

4、background processes

(1)background writer后台写进程

(2)checkpointer 检查点进程

(3)autovacuum launcher

(4)WAL writer

(5)statistics collector统计收集进程

(6)logging collector(logger)日志收集进程

(7)archiver归档进程


一、实例与实例结构

1、实例

实例用于访问postgreSQL数据库;

实例与数据库集簇一一对应。

2、实例结构

pg实例结构主要由内存结构后台进程组成,例如:

PG用户建立连接时的逻辑:

二、内存结构

1、Local memory area

---本地内存区,由每个后端进程分配给自己使用(供连接使用)

sub-area

description

work_mem

主要工作区域

Executor uses this area for sorting tuples by ORDER BY and DISTINCT operations ,and for joining tables by merge-join and hash-join operations .

执行人使用此区域通过排序去重操作对元组进行排序,并通过合并联接和散列联接操作联接表(多表关联)。

maintenance_work_mem

维护工作区

Some kinds of maintenance operations ( e.g. VACUUM , REINDEX ) use this area

某些维护操作(如VACUUM、REINDEX)使用此区域

temp_buffers

临时表工作区

Executor uses this area for storing temporary tables .

执行人使用此区域存储临时表

2、Shared memory area

---共享内存区,由PostgreSQL服务器所有进程使用(=oracle.sga),如绿色区域:

sub-area

description

shared buffer pool

共享数据缓冲区

=oracle.

buffer cache+shared pool

PostgreSQL loads pages within tables and indexes from a persistent storage to here,and operates them directly.

Postgresql将表和索引中的页面从持久存储加载到此处,并直接对其进行操作

WAL buffer

日志缓冲区

(=oracle.redolog buffer)

To ensure that no data has been lost by server failures , PostgreSQL supports the WAL mechanism . WAL data ( also referred to as XLOG records ) are transaction log in PostgreSQL ; and WAL buffer is a buffering area of the WAL data before writing to a persistent storage.

为了确保没有数据因服务器故障而丢失,Postgresql支持WAL机制。WAL数据(也称为XLOG记录)是Postgresql中的事务日志;WAL缓冲器是写入永久存储器之前的WAL数据的缓冲区域。

CommitLOG(CLOG)

提交日志缓冲区

(记录事务的状态)

Commit Log ( CLOG ) keeps the states of all transactions ( e.g.,in progress , committed , aborted ) for Concurrency Control ( CC ) mechanism.

提交日志(CLOG)为并发控制(CC)机制保存所有事务的状态(例如,正在进行、已提交、已中止)。

三、后台进程

1、进程结构

process

说明

postgres server process 父进程

postgres服务器进程是与数据库群集管理相关的所有进程的父进程

backend process  后端进程

每个后端进程处理连接的客户端发出的所有 查询和语句

background processes后台进程

各后台进程执行用于数据库管理的每个特性的进程(如清空、检査点进程)

replication associated processes

在与复制相关联的进程中,它们执行流式复制

background worker process

在版本9.3支持的后台工作进程中,它可以执行用户实现的任何处理。

2、postgres server process

postgres服务器进程是 Postgresql服务器中所有进程的父进程。早期版本它被称为"postmaster"。

pg_ctl实用程序启动该进程,然后派生出各个后台进程。同时分配共享内存区域。

一个 postgres服务器进程监听一个网络端口,默认端口为5432。

3、backend process

后端进程,由postgres服务器进程启动,并处理一个连接的客户端发出的所有查询;

与用户进程一一对应,接收用户进程发来的请求,并将请求发送给后台进程(pgserver等)处理;

PostSQL允许多个客户端同时连接,配置参数max_connections控制客户端的最大数量

4、background processes

后台进程

process

description

background writer

后台写进程

In this process, dirty pages on the shared buffer pool are written to a persistent storage (e..g, HDD, SSD)on a regular basis gradually. (In version 9.1 or earlier, it was also responsible for checkpoint process.

在这个过程中,共享缓冲池上的脏页会逐渐定期写入永久存储器(如HDD、SSD)。(在9.1或更早版本中,它还负责检查点过程)。

checkpointer

检查点进程

In this process in version 9.2 or later , checkpoint process is performed .

在9.2或更高版本中的这个过程,执行检查点过程

autovacuum launcher

The autovacuum-worker processes are invoked for vacuum process periodically ( More precisely , it requests to create the autovacuum workers to the postgres server .)

autovacuum工作进程会定期为vacuum进程调用(更准确地说,它请求向postgres服务器创建autovacuumWorker。)

WAL writer

wal写进程

This process writes and flushes periodically the WAL data on the WAL buffer to persistent storage.

此过程定期将WAL缓冲区上的WAL数据写入并刷新到永久存储

statistics collector

统计收集进程

In this process , statistics information such as for pg_stat activity and for pg_stat_database , etc. is collected.

在此过程中,将收集诸如pg_stat活动和pg_sta_database等的统计信息

logging collector

日志收集进程(logger)

This process writes error messages into log files .

此过程将错误消息写入日志文件。

archiver

归档进程

In this process , archiving logging is executed .

在此过程中,将执行归档日志记录

(1)background writer后台写进程

=oracle.dbwr,把数据缓冲区的脏块写到数据文件,保存内容并释放空间

触发时机:1、脏块达到阈值;2、buffer没有可用空间;3、超时(心跳机制)

(2)checkpointer 检查点进程

作用:1、写脏块;2、更新检查点信息至wal日志文件&控制文件;

触发时机:1、心跳机制;2、执行热备函数pg_start_backup()时;

查看当前检查点信息:

postgres=# select pg_control_checkpoint();
                                                 pg_control_checkpoint                                                 
-------------------------------------------------------------------------------------------
 (2/75003D78,2/75003D40,000000010000000200000075,1,1,t,0:31807,24988,1,0,727,1,31807,1,1,0,0,"2023-11-20 15:03:05+08")
(1 行记录)

(3)autovacuum launcher

对数据块里已删除的行进行整理。(详细说明等待完善)

(4)WAL writer

=oracle.lgwr,把日志缓冲区的条目写到日志文件。缓冲区只是临时存放,更快。

触发时机:

1、提交事务;2、缓冲区快满时;3、buffer没有可用空间;4、超时(心跳机制);5、bgwr写之前

(5)statistics collector统计收集进程

收集优化器需要使用的统计信息

(6)logging collector(logger)日志收集进程

收集数据库日志,pg数据库日志缺省不开启,开启后会用到此进程

postgres=# select name,setting,short_desc from pg_settings where name like '%log%';
               name                |      setting      |                                                               short_desc        
                                                        
-----------------------------------+-------------------+---------------------------------------------------------------------------------
 log_autovacuum_min_duration       | -1                | 设置最小执行时间,如果autovacuum操作时间大于等于这个值,那么将记录这些操作.
 log_checkpoints                   | off               | 记录每一个检查点事件
 log_connections                   | off               | 记录每一个成功的联接.
 log_destination                   | stderr            | 设置服务器日志输出目标.
 log_directory                     | log               | 设置日志文件目的目录.
 log_disconnections                | off               | 对会话的结束时间和整个会话的持续时间进行日志记录
 log_duration                      | off               | 记录每一条完成了的 SQL 语句过程.
 log_error_verbosity               | default           | 设置日志信息的冗长.
 log_executor_stats                | off               | 把执行器 (executor) 性能统计信息写入到服务器日志中.
 log_file_mode                     | 0600              | 设置日志文件的文件访问权限.
 log_filename                      | postgresql-%a.log | 设置日志文件的文件名字模式.
 log_hostname                      | off               | 在联接日志中记录主机名.
 log_line_prefix                   | %m [%p]           | 将控制信息作为每条日志文本的前缀
 log_lock_waits                    | off               | 对长时间的锁等待记日志
 log_min_duration_sample           | -1                | 设置将记录语句示例的最短执行时间。采样由log_statement_sample_rate决定
 log_min_duration_statement        | -1                | 设置将记录所有语句的最短执行时间。
 log_min_error_statement           | error             | 在此级别或以上级别, 所有语句产生的错误将被记录.
 log_min_messages                  | warning           | 设置日志记录的信息级别.
 log_parameter_max_length          | -1                | When logging statements, limit logged parameter values to first N bytes.
 log_parameter_max_length_on_error | 0                 | When reporting an error, limit logged parameter values to first N bytes.
 log_parser_stats                  | off               | 把分析器性能统计信息写入到服务器日志中.
 log_planner_stats                 | off               | 把规划器性能统计信息写入到服务器日志中.
 log_recovery_conflict_waits       | off               | Logs standby recovery conflict waits.
 log_replication_commands          | off               | 记录每一个复制命令。
 log_rotation_age                  | 1440              | 在N分钟后将会产生自动日志文件切换.
 log_rotation_size                 | 0                 | 当写入了N千字节会发生自动日志文件切换
 log_statement                     | none              | 设置记录语句的类型.
 log_statement_sample_rate         | 1                 | Fraction of statements exceeding log_min_duration_sample to be logged.
 log_statement_stats               | off               | 把 cumulative 性能统计信息写入到服务器日志中.
 log_temp_files                    | -1                | 记录对超过这个数量(以千字节为单位)的临时文件的使用.
 log_timezone                      | Asia/Shanghai     | 设置在日志消息中使用的时间区域
 log_transaction_sample_rate       | 0                 | Sets the fraction of transactions from which to log all statements.
 log_truncate_on_rotation          | on                | 在日志切换期间截断相同名称的日志文件
 logging_collector                 | on                | 启动一个子进程用来捕获stderr输出或csvlogs,写到到日志文件中.
 logical_decoding_work_mem         | 65536             | Sets the maximum memory to be used for logical decoding.
 max_logical_replication_workers   | 4                 | 逻辑复制工作进程的最大数目.
 syslog_facility                   | local0            | 当启用系统日志 (syslog), 设置系统日志使用 "facility".
 syslog_ident                      | postgres          | 设置在系统日志 (syslog) 中确认 PostgreSQL 信息的程序名.
 syslog_sequence_numbers           | on                | 向 syslog 消息中增加序号以避免抑制重复。
 syslog_split_messages             | on                | 将发送给 syslog 的消息用行分离并且让每个部分适合于 1024 字节。
 wal_log_hints                     | off               | 在检查点之后第一次修改时,将整页写入WAL,即使是非关键修改。
(41 行记录)

(7)archiver归档进程

copy wal到归档,缺省不开启归档(show archive_mode;)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值