Postgresql日志系统的实现(十一)

本文介绍CreateCheckPoint过程中的日志处理步骤:通过XLogInsert记录checkpoint信息,使用XLogFlush将日志同步到磁盘,最后通过MoveOfflineLogs重用可重用的日志段。

2.2      CreateCheckPoint如何处理日志?

1.调用XLogInsert对应的日志记录(即:当前checkpoint的信息,注意,checkpoint的信息也写入到xlog中,但是checkpoint的信息不需要系统崩溃后重启做redo操作。既然不需要,为何要记载入xlog)写入日志缓冲区

2.调用XLogFlush,将之前的日志记录从日志缓冲区中写入磁盘。

3.调用MoveOfflineLogs,重用那些可重用的日志段。

       a)    遍历文件夹pg_xlog中的文件

i.判断该文件是否是日志文件(根据文件名的长度是否是24位,并且文件名的内容是否由16进制表示来判断)且该文件的段在最近一次CheckPoint的日志段之前,如果不是,跳到a,遍历下一个文件。

ii.判断该文件是否已完成归档(根据archive_status目录下是否有该文件对应的ready文件或done文件判断),如果在非归档状态下,默认为是。如果不是的话,跳到a,遍历下一个文件

iii.判断该文件是否可重用,(所谓该文件可重用是指当前segid之后2*CheckPointSegments + 1个段的日志文件是否都已产生),如果存在有些日志段没有产生,那么将这个文件改名成以后的日志段名。否则,删除该文件。

iv.删除该文件对应的“.ready”和“.done”文件

 

### PostgreSQL Logger 系统日志进程的工作原理与配置 #### 工作原理概述 Logger系统日志进程负责收集来自`postmaster`进程、服务进程以及其他辅助进程的标准错误输出(stderr),并将这些数据写入到指定的日志文件中。这一过程由`SysLogger`子系统实现,其核心功能在于集中化管理和处理日志信息[^1]。 具体而言,当数据库运行过程中发生任何事件时,相关的信息会被发送至标准错误流。随后,`SysLogger`会捕获这些信息并将其持久化存储于磁盘上的日志文件中。这种机制不仅简化了日志管理流程,还提高了系统的可维护性和诊断能力。 #### 启动入口与初始化逻辑 `SysLogger`的启动是由主控进程`postmaster`完成的。一旦检测到参数`logging_collector`被设置为`on`,则会在服务器启动期间创建一个独立的`syslogger`进程来专门执行日志收集任务[^2]。此进程在整个生命周期内持续监听其他后台进程产生的日志消息,并按照预定义规则进行分类和保存。 #### 主要配置项及其作用 以下是几个常用的日志配置选项: - **`logging_collector`**: 控制是否启用日志收集器,默认关闭(`off`);如果希望利用内置的日志管理系统,则需显式设定为开启状态(`on`)。 - **`log_directory` & `log_filename`**: 定义日志文件所在的目录路径以及命名模式。例如,可以采用日期作为变量动态生成每日新日志文件名,如`postgresql-%Y-%m-%d.log`表示按年月日记录不同天数的数据[^3]。 - **`log_truncate_on_rotation`**: 当达到轮转条件(时间或者大小限制)时,决定是否清空现有旧日志内容再重新开始记录新的条目。 - **`log_rotation_age` 和 `log_rotation_size`**: 设置单个日志文件的最大存续时间和最大体积阈值,超过任一限定都会触发自动分割操作形成多个分片文件以便长期保留历史记录的同时保持高效访问性能。 ```sql -- 查看当前活动连接的状态信息示例查询语句 SELECT * FROM pg_stat_activity; ``` 上述SQL命令可用于监控实时在线用户的各项指标详情,包括但不限于所属数据库名称(datname)、客户端IP地址(client_addr)等字段展示各个session的具体行为特征。 #### 日志版本差异对比 值得注意的是,在PostgreSQL 10.0之前的发行版里,默认情况下所有类型的日志均统一放置在同一位置下;而自该版本起引入了一种更为灵活的新架构——允许区分对待各类别的日志类别分别存放于不同的子文件夹之中从而便于后续检索分析工作开展得更加便捷有效率[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值