Postgresql日志系统的实现(六)

本文详细介绍了数据库系统中为了确保数据一致性所采取的日志记录与恢复机制。在事务执行过程中,通过调用特定方法记录日志,并在事务完成时刷新日志到磁盘,以支持后续的数据恢复操作。

 

1.3.2需要写日志的操作分析

1.3.2.1主要操作步骤分析:

所有可进行恢复的项目,都需要在事务进行的过程中按照如下顺序写日志,以便在需要恢复时有足够的备份信息帮助恢复。

如执行“insert into table_1 values(1,1)”,将调用“heap_insert”方法,执行“heap_insert”方法完毕后,就需要立即执行“XLogInsert”,以便记载信息:

              recptr = XLogInsert(RM_HEAP_ID, info, rdata);

              PageSetLSN(page, recptr);

              PageSetTLI(page, ThisTimeLineID);

注意,所有写日志的操作都调用XlogInsert()进行,XlogInsert()中通过调用XLogWrite()将日志记录写入缓冲区,“XLogInsert”的返回值是“XLogRecPtr”结构类型,其实际功效可以作为“LSN”(log secquence number)使用,在执行“XLogInsert”后,即把其返回值“XLogRecPtr”类型的内容通过调用“PageSetLSN”记载到“page”中,这提示我们将来可以据此考虑实现增量备份。

随后,调用“PageSetTLI”把本次系统启动以来(不管是否恢复过)相对应的正确的时间线“ThisTimeLineID”记载到“page”(page将在适时的时候被pgwriter刷出到磁盘),这样,保证了本次系统运行中所执行的事务在xlog日志中记载的时间线不和上次相同,以便于区分不同的恢复数据。

       当事务要结束的时候,将调用“XlogFlush 把日志缓冲区中的数据刷到磁盘上,以保证“WAL”的实施(注意下图中的事务提交和取消调用与“XlogFlush”的关系):

### 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、付费专栏及课程。

余额充值