Lightdb体系架构

本篇从内存结构,进程结构和存储结构三个部分,描述了Lightdb的基础体系架构

1、内存结构

共享内存:

Lightdb启动后会生成一块共享内存,共享内存主要用作数据库的缓冲区(shared buffer)wal日志缓冲区和clog(commit log)缓冲区也在共享内存中,除此之外,也保存一些统计信息,进程信息,锁的信息等

本地内存:

后台服务进程除访问共享内存外,还会申请分配一些本地内存,以便暂存一些不需要全局存储的数据。这些内存缓冲区主要有以下几个:

temp buffer:用于访问临时表的本地缓冲区;

work_mem:内部排序操作和hash表在使用临时磁盘文件之前使用的内存缓冲区;

maintenance_work_mem:在维护性操作(vacuum,create index)时使用

2、进程结构

主进程Postmater:

    主进程Postmaster是整个数据库实例的总控进程,负责启动和关闭数据库实例,fork出一些与数据库实例相关的辅助子进程;当用户与数据建立连接时,实际上先与Postmaster主进程建立连接,此时客户端会发出身份验证消息给Postmaster主进程,Postmaster主进程根据消息进行验证,如果验证成功,则会fork出一个子进程来为该连接服务,fork出的子进程称为服务进程(Backead Process, 主要处理一个连接的客户端发出的所有语句)

系统日志进程logger

logger辅助进程通过Postmaster主进程、所有服务进程以及其他辅助进程收集所有的stderr输出,并将这些输出写入日志文件中。在postgresql.conf配置文件中参数logging_collector控制是否启动logger进程,log_min_messages控制哪些消息级别被写入日志

后台写进程bgwriter

bgwriter辅助进程是把共享内存中的脏页写到磁盘上

预写式日志写进程walwriter

WalWriter 进程就是写WAL日志的过程,把WAL缓存在适当的时间点往磁盘(目录pg_wal)写;WAL log也被简称成xlog

归档进程archiver

wal日志循环使用,archiver进程会在覆盖前把wal日志备份出来

自动清理进程autovacuum

postgresql数据中,对表进行delete/update操作后,原有数据并不会立即被删除/修改,而是会新生成一行数据,此时原有的数据只是被标识为删除状态,只有在没有被其他事务读到这些旧数据时,才会被清理。这个清理工作就是由autovacuum进程完成

统计数据收集进程stats

主要做数据的统计信息收集工作。收集的信息主要用于sql优化等。

3、存储结构:

参数文件:postgresql.conf:此数据库的主配置文件

控制文件: $PGDATA/global目录下的pg_control

数据文件:$PGDATA/base下,默认表空间目录

日志文件:存储在$PGDATA/pg_wal,在Postgresql10版本之前此目录是pg_xlog

事物最终状态的日志

存储在$PGDATA/pg_xact,在Postgresql10版本之前此目录是pg_clog

pg_clog是如何调用pg_fsync刷脏页的。每次申请新的事务ID时,都需要调用ExtendCLOG,如果通过事务ID计算得到的CLOG PAGE页不存在,则需要扩展(backend process主动刷CLOG PAGE,所以会有调用pg_fsync的动作);但是并不是每次扩展都需要调用pg_fsync,因为checkpoint会将clog buffer刷到磁盘,除非在申请新的CLOG PAGE时所有的clog buffer都没有刷出脏页,才需要主动选择一个page并调用pg_fsync刷出对应的pg_clog/file

归档文件:可以自定义路径,详见 Lightdb归档模式配置__一_兮_的博客-CSDN博客

系统日志:存储在$PGDATA/log

该文件夹中的日志一般用来记录服务器与DB的状态,如各种Error信息,定位慢查询SQL,数据库的启动关闭信息,发生checkpoint过于频繁等的告警信息等

附:

思维导图

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值