目录
(6)logging collector(logger)日志收集进程
一、实例与实例结构
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;)