每个物理的事务日志文件内部分为多个虚拟日志文件,如上图的(virtual log 1-4)。在物理日志文件中没有指定虚拟日志文件大小也不能指定到底要存在多少个虚拟日志文件。数据库引擎会自动的控制它们,但出于性能原因,数据库引擎会试图维持少量的虚拟文件个数。
如果日志文件开始设置的比较小,然后设置的增长率或大小也比较小。在日志文件不断增大的过程中,每次都是按许多微小增加,它将增加虚拟日志文件的数量,而影响系统性能。这就是为什么要将自动增长设置为一个较大的增量。如果日志设置一次增长 1 MB 会不断产生更多的虚拟日志文件中。不断增加的虚拟日志文件会影响数据库启动和日志的备份/恢复操作。
Virtual Log(虚拟日志)是一种特殊的日志记录机制,用于模拟或替代实际的日志行为,通常在特定场景下(如测试、调试、压测等)使用。以下是关于Virtual Log的关键信息:
Tracer工具类:Tracer提供DummyContextUtil类,用于操作虚拟日志上下文。创建虚拟日志上下文时,调用createDummyLogContext()方法,并确保在使用完毕后通过clearDummyLogContext()方法及时销毁。这两个方法分别负责创建和清理虚拟日志上下文,确保线程上下文状态的正确管理。
全链路压测标记:通过DummyContextUtil可以设置全链路压测标记。示例代码如下:
DummyContextUtil.createDummyLogContext();
DummyContextUtil.addPenetrateAttribute(PenAttrKeyEnum.LOAD_TEST_MARK, "T");
DummyContextUtil.clearDummyLogContext();
RDS SQL Server事务日志:RDS SQL Server的事务日志采用Virtual Log File(VLF,虚拟日志文件)进行管理。日志备份时,VLF状态从2(活动)变为0(未活动)。只有当VLF处于未活动且位于日志文件尾部时,才能进行日志收缩。因此,可能需要多次执行日志备份和收缩操作,以使日志尾部达到全0状态,进而降低日志使用空间。
ASM VirtualService自定义日志:ASM(Application Service Mesh)允许通过VirtualService资源自定义请求头和响应头,并在日志中查看这些内容。可通过自定义日志格式,从请求Header、响应Header、Envoy内置值中提取所需变量。例如:
my-x-custom-request-header: %REQ(x-custom-request-header)%
my-x-dynamic-request-header: %REQ(x-dynamic-request-header)%
my-x-custom-response-header: %RESP(x-custom-response-header)%
注意,若响应头配置修改在日志记录操作之后生效,这些修改后的响应头信息可能不会出现在Access Logs中。
查询日志(log_fdw)外部表结构:查询日志(如ft1)是一个外部表,其结构包含多种列,如log_time(日志时间)、user_name(用户名)、database_name(数据库名)、message(消息内容)等,用于存储详细的日志信息。这些日志数据通常由特定的FDW(Foreign Data Wrapper)插件(如log_fdw)从外部源(如CSV文件)导入到PostgreSQL数据库中进行查询。
综上所述,Virtual Log涉及虚拟日志上下文管理、全链路压测标记、RDS SQL Server事务日志管理、ASM VirtualService自定义日志以及查询日志(log_fdw)外部表结构等多个方面,分别服务于不同的日志处理、测试、查询和分析需求。
Virtual Log是Delos中推出的思路,通过将共识协议的控制平面与数据平面分离,使数据平面仅负责日志定序及数据持久化,从而可以有更加高效的实现。这种思路允许共识协议的热升级。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。