您的位置:首页 > 科技 > 能源 > 国际物流公司网站_免费发布招聘的网站_重庆seo小潘大神_百度写一篇文章多少钱

国际物流公司网站_免费发布招聘的网站_重庆seo小潘大神_百度写一篇文章多少钱

2024/12/21 22:03:33 来源:https://blog.csdn.net/qq_40529346/article/details/144607122  浏览:    关键词:国际物流公司网站_免费发布招聘的网站_重庆seo小潘大神_百度写一篇文章多少钱
国际物流公司网站_免费发布招聘的网站_重庆seo小潘大神_百度写一篇文章多少钱

0.简介

在前面文章中介绍了事务模块用到的事务日志结构和其工作原理,本文将介绍日志的另一个部分,操作日志,主要去描述SysLogger日志的工作原理,流程以及其中关键的实现:日志轮转,刷盘性能问题等,同时基于这个实现考虑统一日志的设计方法(可以借鉴的思想)。

1.开启和使用方式

开启SysLogger进程需要在postgresql.conf中,设置日志收集器辅助进程选项logging_collector的值为on,其默认为off,即关闭的。在配置文件postgresql.conf中还有很多日志相关的选项,以log开头,此处不再详细一一列举,只描述日志辅助进程开启方式。

2.整体进程结构

对于后台进程和SysLogger进程关系如下:

在这里插入图片描述

3.启动流程

启动流程其实就是postmaster进程去fork出syslogger子进程,子进程执行SysLoggerMain函数,其中会循环处理等待消息,接受和写入流程。

在这里插入图片描述

4.通信协议

其中后台进程和SysLogger通信协议格式如下:

typedef struct
{char    nuls[2];    /* always \0\0 */uint16    len;      /* size of this chunk (counts data only) */int32    pid;      /* writer's pid */char is_last;    /* last chunk of message*/char    data[FLEXIBLE_ARRAY_MEMBER];  /* data payload starts here */
} PipeProtoHeader;

其中总是以两个\0\0开头;len用来记录当前chunk的长度;pid用于记录发送的进程id(用来做分组);is_last标识切割成多个包的日志当前是否是最好一个,syslogger接收后统一写入日志文件;data用来记录信息。
一次完成接收日志过程为:syslogger 在接收到日志消息后,将其按照 pid 进行分组,相同的 pid 说明日志消息来源于同一进程,将其组装起来,当收到包含 is_last 标记的最后一个 chunk 后,将整条日志消息打印到日志文件。

5.关键实现

5.1 日志轮转

日志轮转,通俗的说就是不想写当前日志文件了,需要找一个新的文件去写,这部分通过四个参数来判断需不需要新的文件以及其命名规则。
1)log_filename :指定日志文件的格式,假如指定的格式为test_%d_%h,那么x月1 日 1点的日志文件名就是 test_1_1.log。
2)log_rotation_age:指定超时时间,超过的话就新开一个日志文件。
3)log_rotation_size:指定限制大小,超过的话就新开一个日志文件。
4)log_truncate_on_rotation:指定是否按时间轮转后做截断。即如果下一个日志同名文件已经存在,是否直接清空该文件并从头开始写。

5.2 刷盘策略

PG 的日志在刷盘时的默认策略为:_IOLBF(行缓冲刷盘)即行满即刷盘,虽然可以保证日志尽可能不丢失,但是如果数据多的话会影响性能,linux三种刷盘方式如下,PG采用第二种:
1)_IOFBF:全缓冲模式,缓冲区写满后才刷盘
2)_IOLBF:行缓冲模式,一行写满就刷盘
3)_IONBF:不缓冲,直接刷

6.关于统一日志输出格式的思考

现在的日志系统大都要求要统一格式方便去做归档或者入库,对于老的系统,很多模块的日志格式并不统一,最简单想到的方式是去每个模块修改其日志格式;但还有一种可以借鉴PG SysLogger的思想,将不同模块的输出全部输出给一个独立的模块(进程),它内部负责解析不同格式并将其以统一格式输出,也就是统一处理和适配的思路。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com