Comment on page
日志记录
在本页面
重要
本节中提到的_log_是指WiredTiger预写日志(即日志),而不是MongoDB日志文件。
注意
使用日志记录的恢复过程:
1.在数据文件中查找最后一个检查点的标识符。 2.在日记文件中搜索与最后一个检查点的标识符匹配的记录。 3.从上一个检查点开始,将操作应用于日志文件。
于3.2版本中变更
使用日志功能,WiredTiger为每个客户端发起的写操作创建一个日记记录。日志记录包括由初始写入引起的任何内部写入操作。例如,对集合中文档的更新可能会导致对索引的修改;WiredTiger创建单个日志记录,其中包含更新操作及其关联的索引修改。
MongoDB将WiredTiger配置为使用内存缓冲来存储日记记录。线程进行协调以分配并复制到其缓冲区中。全部日记记录最多可缓存128kB。
WiredTiger在以下任一情况下将缓冲的日记记录同步到磁盘:
- 对于副本集成员(主节点和从节点成员),
- 如果有操作在等待操作日志条目。可以等待操作日志条目的操作包括:
- 针对oplog转发扫描查询
- 另外,对于从节点成员,在每次批量处理oplog条目之后。
- WiredTiger创建新的日记文件时。由于MongoDB使用的日志文件大小限制为100 MB,因此WiredTiger大约每100 MB数据创建一个新的日志文件。重要同样请参阅
对于日志文件,MongoDB在
dbPath
目录下会创建一个名为“journal”的子目录。 WiredTiger日志文件的名称具有以下格式WiredTigerLog.<sequence>
,其中<sequence>
是从0000000001
开始的零填充数字。日志记录
日志文件包含每个客户端的初始写操作记录
- 日记记录包括由初始写入引起的任何内部写入操作。例如,对集合中文档的更新可能会导致对索引的修改;WiredTiger创建单个日志记录,其中包含更新操作及其关联的索引修改。
- 每个记录都有一个唯一的标识符。
- WiredTiger的最小日志记录大小为128字节。
压缩
默认情况下,MongoDB将WiredTiger配置为对其日记数据使用snappy压缩。要指定其他压缩算法或不进行压缩,请使用
storage.wiredTiger.engineConfig.journalCompressor
设置。详细信息请参阅Change WiredTiger Journal Compressor。注意
日志文件大小限制
MongoDB的WiredTiger日志文件的大小限制为最大大约为100 MB。
- 文件超过该限制后,WiredTiger将创建一个新的日记文件。
- WiredTiger会自动删除旧的日志文件,仅保留从上一个检查点恢复所需的文件。
预分配
WiredTiger预分配日志文件。
注意
从版本4.2(以及4.0.13和3.6.14)开始,如果副本集成员使用内存存储引擎(投票或非投票),但副本集的
writeConcernMajorityJournalDefault
设置为true,则副本集成员会记录一条启动警告。将
writeConcernMajorityJournalDefault
设置为false
,MongoDB在确认写入之前不会等待w:“majority”
的写操作被写入磁盘日志。因此,majority
写操作可能会在给定副本集中的大多数节点瞬时丢失(比如崩溃和重启)时回滚。译者:王金铷