0
点赞
收藏
分享

微信扫一扫

PostgreSQL体系结构

小月亮06 2022-06-20 阅读 60

PostgreSQL体系结构

1 Postmaster进程

  • 数据库的启停
  • 监听客户端连接
  • 为每个客户端连接衍生(fork)专用的postgresql服务进程
  • 当postgresql进程出错时尝试修复
  • 管理数据文件
  • 管理数据库的辅助进程

2 PostgreSQL进程

  • 直接与客户端进程通讯
  • 负责接收客户端所有的请求
  • 包含数据库引擎,负责解析SQL和生成执行计划等
  • 根据命令的需要调用各中辅助进程和访问各内存结构
  • 负责返回命令执行结果给客户端
  • 在客户端断开连接时释放进程

3 本地内存

本地内存是服务器进程独占的内存结构,每个postgresql子进程都会分配一小块相应内存空间,随着连接会话的增加而增加,它不属于实例的一部分

  • work_mem:用于排序的内存
  • maintenance_work_mem:用于内部运维工作的内存,如VACUUM垃圾回收、创建和重建索引等等
  • temp_buffers:用于存储临时表的数据

4 共享内存

  • Shared Buffer:

-用于缓存表和索引的数据块 -数据的读写都是直接对BUFFER操作的,若所需的块不再缓存中,则需要从磁盘中读取 -在buffer中被修改过的,但又没有写到磁盘文件中的块被称之为脏块 -由shared_buffers参数控制尺寸

  • WAL(Write Ahead Log) Buffer:

-预写日志缓存用于缓存增删改等写操作产生的事务日志 -由wal_buffers参数控制尺寸

  • Clog Buffer:

-Commit Log Buffer是记录事务状态的日志缓存

5 辅助进程

  • Backgroup writer:

-工作任务是将shared buffer中的脏数据页写到磁盘文件中 -使用LRU算法进行清理脏页 -平时多在休眠,被激活时工作

  • Autovacuum launcher/workers:

-自动清理垃圾回收进程 -当参数autovacuum设为on的时候启用自动清理功能 -Launcher为清理的守护进程,每次启动的时候会调用一个或多个worker -Worker是负责真正清理工作的进程,由autovacuum_max_workers参数设定其数量

  • WAL writer:

-将预写日志写入磁盘文件 -触发时机:WAL BUFFER满了 事务commit时; WAL writer进程到达间歇时间时; -checkpoint发生时;

  • Checkpoint:

-用于保证数据库的一致性 -它会触发bgwriter和wal writer动作 -拥有多个参数控制其启动的间隔 作用: 一般checkpoint会将某个时间点之前的脏数据全部刷新到磁盘,以实现数据的一致性与完整性。其主要目的是为了缩短崩溃恢复时间 Checkpoint 具体工作:

记录检查点的开始位置,记录为 redo point(重做位点)
将 shared buffer 中的数据刷到磁盘里面去
刷脏结束,检查点之前的数据均已被刷到磁盘存储(数据1和2)
记录相关信息
将最新的检测点记录在 pg_control 文件中

触发条件:

超级用户(其他用户不可)执行CHECKPOINT命令
数据库shutdown
数据库recovery完成
XLOG日志量达到了触发checkpoint阈值
周期性地进行checkpoint,周期内无写入不执行checkpoint
需要刷新所有脏页

相关参数:

Postgresql 10

checkpoint_timeout = 5min # range 30s-1d
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.9 # checkpoint target duration, 0.0 - 1.0
#checkpoint_flush_after = 256kB # measured in pages, 0 disables
#checkpoint_warning = 30s # 0 disables

checkpoint_segments WAL log的最大数量,系统默认值是3。超过该数量的WAL日志,会自动触发checkpoint。 新版(9.6)使用min_wal_size, max_wal_size 来动态控制wal日志 checkpoint_timeout 系统自动执行checkpoint之间的最大时间间隔。系统默认值是5分钟。 checkpoint_completion_target 该参数表示checkpoint的完成时间占两次checkpoint时间间隔的比例,系统默认值是0.5,也就是说每个checkpoint需要在checkpoints间隔时间的50%内完成。 checkpoint_warning 系统默认值是30秒,如果checkpoints的实际发生间隔小于该参数,将会在server log中写入一条相关信息。可以通过设置为0禁用。 通过 pg_stat_bgwriter 视图查看

select checkpoints_timed,checkpoints_req,checkpoint_write_time,buffers_checkpoint,buffers_clean from pg_stat_bgwriter ;
    采集postgresql的运行状态,并将运行日志写入日志文件
logging_collector参数为on时启动,不建议关闭
log_directory设定日志目录
log_destination设定日志输出方式,甚至格式
log_filename设定日志文件名
log_truncate_on_rotation设定是否重复循环使用且删除日志
log_rotation_age设定循环时间
log_rotation_size设定循环的日志尺寸上线
  • Syslogger:
  • Archiver:

用于将写满的WAL日志文件转移到归档目录,该进程只有在归档模式才会启用

  • Statistics Collector:

统计信息的收集进程。收集表和索引的空间信息和元组信息等,甚至是表的访问信息。收集到的信息除了能被优化器使用以外,还有autovaccum也能利用,甚至给数据库管理员作为数据库管理的参考信息.

6 目录结构

    base: 该目录包含数据库用户所创建的各个数据库,同时也包括postgres、template0和template1的pg_default tablespace
pg_wal:该目录包含wal日志。
日志文件默认为16M,编译安装时可指定大小: --with-wal-segsize=64(64M)格式: 000000010000000000000008
           当空间不足,导致数据库启动不了。可以把比较旧的xlog移动到别的目录。
           wal_keep_segments=100   保留文件数。占用空间wal_keep_segments*16M
log: 该目录包含数据库日志。(目录名可自定义)
global: 该目录包含集群范围的各个表和相关视图。 ( pg_database、 pg_tablespace )pg_clog: 该目录包含事务提交状态数据。文件并不大,不需要特别维护。
pg_multixact: 该目录包含多事务状态数据(等待锁定的并发事务)
pg_notify :该目录包含LISTEN/NOTIFY状态数据。
pg_serial:该目录包含了已经提交的序列化事务的有关信息。
pg_snapshots:该目录包含导出的快照。
pg_stat_tmp:该目录包含统计子系统的临时文件。
pg_subtrans:该目录包含子事务状态数据。
pg_tblspc:该目录包含表空间的符号链接。
pg_twophase:该目录包含预备事务的状态文件。
pg_commit_ts:该目录包含已提交事务的时间。
pg_dynshmem:该目录包含动态共享内存子系统使用的文件。
pg_logical:该目录包含逻辑解码的状态数据。
pg_replslot:该目录包含复制槽数据。
pg_stat:该目录包含统计子系统的永久文件。
PG_VERSION:包含版本信息。
举报

相关推荐

0 条评论