日志记录

Storagearrow-up-right > Journaling

日志记录

在本页面

日志记录和WiredTiger存储引擎

重要

本节中提到的_log_是指WiredTiger预写日志(即日志),而不是MongoDB日志文件。

WiredTigerarrow-up-right使用检查点arrow-up-right以提供磁盘上数据的一致视图,并允许MongoDB从最后一个检查点恢复。但是,如果MongoDB在检查点之间意外退出,则需要日记来恢复上一个检查点之后发生的信息。

注意

从MongoDB 4.0开始,对于使用WiredTiger存储引擎的副本集成员,不能指定--nojournalarrow-up-right选项或storage.journal.enabled:falsearrow-up-right

使用日志记录的恢复过程:

1.在数据文件中查找最后一个检查点的标识符。 2.在日记文件中搜索与最后一个检查点的标识符匹配的记录。 3.从上一个检查点开始,将操作应用于日志文件。

日志记录过程

于3.2版本中变更

使用日志功能,WiredTiger为每个客户端发起的写操作创建一个日记记录。日志记录包括由初始写入引起的任何内部写入操作。例如,对集合中文档的更新可能会导致对索引的修改;WiredTiger创建单个日志记录,其中包含更新操作及其关联的索引修改。

MongoDB将WiredTiger配置为使用内存缓冲来存储日记记录。线程进行协调以分配并复制到其缓冲区中。全部日记记录最多可缓存128kB。

WiredTiger在以下任一情况下将缓冲的日记记录同步到磁盘:

serverStatusarrow-up-right命令在“wiredTiger.log”字段中返回有关WiredTiger日记统计信息的信息。

日志文件

对于日志文件,MongoDB在dbPatharrow-up-right目录下会创建一个名为“journal”的子目录。 WiredTiger日志文件的名称具有以下格式WiredTigerLog.<sequence>,其中<sequence>是从0000000001开始的零填充数字。

日志记录

日志文件包含每个客户端的初始写操作记录

  • 日记记录包括由初始写入引起的任何内部写入操作。例如,对集合中文档的更新可能会导致对索引的修改;WiredTiger创建单个日志记录,其中包含更新操作及其关联的索引修改。

  • 每个记录都有一个唯一的标识符。

  • WiredTiger的最小日志记录大小为128字节。

压缩

默认情况下,MongoDB将WiredTiger配置为对其日记数据使用snappy压缩。要指定其他压缩算法或不进行压缩,请使用storage.wiredTiger.engineConfig.journalCompressorarrow-up-right设置。详细信息请参阅Change WiredTiger Journal Compressorarrow-up-right

注意

如果日志记录小于或等于128字节(WiredTiger的最小值日志记录大小arrow-up-right),则WiredTiger不会压缩该记录。

日志文件大小限制

MongoDB的WiredTiger日志文件的大小限制为最大大约为100 MB。

  • 文件超过该限制后,WiredTiger将创建一个新的日记文件。

  • WiredTiger会自动删除旧的日志文件,仅保留从上一个检查点恢复所需的文件。

预分配

WiredTiger预分配日志文件。

日志和内存存储引擎

从MongoDB Enterprise的3.2.6版本开始,内存存储引擎arrow-up-right就成为MongoDB常规可用性(GA)的一部分。因为其数据保留在内存中,所以没有单独的日志。使用写关注j:truearrow-up-right的写操作会被立即确认。

如果副本集中任何有投票权的成员使用内存存储引擎arrow-up-right,则必须将writeConcernMajorityJournalDefaultarrow-up-right设置为false

注意

从版本4.2(以及4.0.13和3.6.14)开始,如果副本集成员使用内存存储引擎arrow-up-right(投票或非投票),但副本集的writeConcernMajorityJournalDefaultarrow-up-right设置为true,则副本集成员会记录一条启动警告。

writeConcernMajorityJournalDefaultarrow-up-right设置为false,MongoDB在确认写入之前不会等待w:“majority”arrow-up-right的写操作被写入磁盘日志。因此,majority写操作可能会在给定副本集中的大多数节点瞬时丢失(比如崩溃和重启)时回滚。

同样请参阅 内存存储引擎:持久性arrow-up-right

原文链接:https://docs.mongodb.com/v4.2/core/journaling/arrow-up-right

译者:王金铷

最后更新于