在这篇文章中,我们将深入WiredTiger的日志和检查点机制。
每个数据库系统必须确保耐用性和可靠性。MongoDB使用经典Write-Ahead-Logging(细胞膜)使用期刊和检查点。
从最基本的开始,为什么细胞膜首先需要吗?确保我们的数据是耐用每次写操作和性能的前提下尽可能地让它持久的和一致的。
MongoDB,它实现了细胞膜和数据持久性使用日志和检查点的组合。让我们了解他们。
1。杂志
这是一个过程,每一个写操作写入(附加)从内存日志文件,即事务日志磁盘上存在在特定的时间间隔配置使用“journalCommitIntervalMs”。
这个作为一个步骤以确保耐久性由同一个日志文件恢复数据丢失的崩溃,检查点之间的力量,硬件故障(见下文)
这是这个过程是什么样子的。
- 对于每一个写操作,MongoDB写更改日志文件,即事务日志文件,这基本上是细胞膜机制使用MongoDB,正如上面所讨论的。这种情况发生在每一个journalCommitIntervalMs。
- 相同的数据,在Wiredtiger缓存页面的形式,也标志着脏。
日志文件当出口使用的例子WiredTiger二进制(wt):
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20.
21
22
23
24
25
26
27
28
29日
30.
31日
32
|
美元
wt
printlog
- - - - - -u
- - - - - -x
{
“lsn”
:
(
15
,
256年
]
,
“hdr_flags”
:
”“
,
“rec_len”
:
256年
,
“mem_len”
:
256年
,
“类型”
:
“提交”
,
“txnid”
:
3836082
,
“行动”
:
(
{
“optype”
:
“row_put”
,
“文件标识”
:
14
0 xe
,
“关键”
:
“u00e8du001au0015bu00ffu00ffu00dfu00c1”
,
“key-hex”
:
“e8641a1562ffffdfc1”
,
“价值”
:
”gu0000u0000u0000u0002o…。
,
“value-hex”
:
“67000000026 f7……”
}
]
}
,
{
“lsn”
:
(
15
,
512年
]
,
“hdr_flags”
:
”“
,
“rec_len”
:
128年
,
“mem_len”
:
128年
,
“类型”
:
“提交”
,
“txnid”
:
3836083
,
“行动”
:
(
{
“optype”
:
“row_modify”
,
“文件标识”
:
6
0 x6
,
“关键”
:
“u0081”
,
“key-hex”
:
“81”
,
“价值”
:
“u0001u0000u0000u…。”
,
“value-hex”
:
“010000000000000008000000000000003 e0000000000000008000000000000000100000063151a64”
}
|
是的重要组成部分字节和抵消,它包含任何数据的修改。
2。检查点
在耐用性和一致性的一个检查站的作用也同样重要。检查点相当于一个日志,记录相关数据文件最后一个检查点之后的变化。
每个检查点由一根页面,三个列表的页面指向磁盘上的特定位置,和磁盘上的文件大小。
在每一个检查点间隔(默认60秒),MongoDB将修改后的页面标记为脏在缓存中,各自的数据文件(包括收集- *。wt和索引- * .wt)。
使用相同的“wt”实用工具,我们可以列出检查点并查看它们所包含的信息。如下所示的检查点信息存储对每个数据文件(收集和索引)。存储在这些检查点WiredTiger.wt文件。

上面的图表显示了信息在一个检查站,而下面的输出显示了如何使用“wt”看起来当上市效用。
|
1
2
3
4
5
6
7
8
9
10
11
|
美元
wt
列表
- - - - - -c
WiredTigerCheckpoint
。
33
:
太阳
3月
26
08年
:
35
:
59
2022年
(
大小
8
KB
)
文件- - - - - -大小
:
8
KB
,
检查点- - - - - -大小
:
4
KB
抵消
,
大小
,
校验和
根
:
8192年
,
4096年
,
3824871989
(
0 xe3faea35
)
alloc
:
12288年
,
4096年
,
4074814944
(
0 xf2e0bde0
)
丢弃
:
0
,
0
,
0
(
0
)
可用
:
0
,
0
,
0
(
0
)
WiredTigerCheckpoint
。
34
:
太阳
3月
26
08年
:
35
:
59
2022年
(
大小
8
KB
)
文件- - - - - -大小
:
8
KB
,
检查点- - - - - -大小
:
4
KB
抵消
,
大小
,
校验和
根
:
8192年
,
4096年
,
997122142
(
0 x3b6ee05e
)
alloc
:
12288年
,
4096年
,
4074814944
(
0 xf8e0cde0
)
丢弃
:
0
,
0
,
0
(
0
)
可用
:
0
,
0
,
0
(
0
)
|
这个关键信息驻留在每个检查点,包括以下:
- 根页面:
- 包含根的大小(尺寸)页面,文件中的位置(偏移),以及校验和(校验)。创建一个检查站时,将生成一个新的根页面。
- 内部页面:
- 只有带着钥匙。WiredTiger遍历通过内部页面寻找各自的叶子页面。
- 叶页面:
- 包含实际键:值对
- 分配列表页面:
- 后最近的检查点,WiredTiger块经理为新分配的页面和保存记录他们的信息,如大小、抵消、校验和。
- 丢弃的列表页面:
- 在完成最后一个检查点,相关页面将被丢弃;然而,关键的信息,如大小,抵消,每个这样的校验和丢弃的页面将被存储。
- 在完成最后一个检查点,相关页面将被丢弃;然而,关键的信息,如大小,抵消,每个这样的校验和丢弃的页面将被存储。
- 可用列表页面:
- 执行该检查点时,所有页面WiredTiger块经理分配但尚未使用的;删除以前创建的检查站时,可用页面连接到它将被并入该检查点的最新列表,以及大小,抵消,校验和每个可用的页面将被记录下来。
- 文件大小:
- 磁盘上的数据文件的大小信息在完成一个检查点。
尽管过程(包括磁盘)看起来一样的,他们有不同的目的。杂志,一方面,是一个只能添加操作日志文件,即事务日志文件存在磁盘上。检查点,另一方面,处理坚持各自的数据文件上的数据,其中也包括很多开销由于涉及的复杂性,特别是随机磁盘操作和和解。
一般来说,触发检查点。
- 每60秒(默认),除非有大量数据需要编写,形成积压由于I / O瓶颈。
- 当eviction_dirty_target或eviction_dirty_trigger分别达到5%和20%。然而,这不是正常的,只有当有太多的写活动超出了硬件可以处理。
所以,当有意外崩溃或硬件故障?让我们看看当我们开始mongod过程。
- MongoD试图进入崩溃恢复和寻找什么在《华尔街日报》文件。
修剪的输出将类似于下面的一个“mongod日志文件。
|
1
2
3
4
5
6
7
8
9
10
|
{
“t”
:
{
“美元日期”
:
“2023 - 03 - 27 t11:22:48.360 + 00:00”
}
,
“s”
:
“我”
,
“c”
:
“存储”
,
“id”
:
22430年
,
“ctx”
:
“initandlisten”
,
“味精”
:
“WiredTiger信息”
,
“attr”
:
{
“消息”
:”(
1679916168
:
360670年
]
(
9811年
:
0 x7f43b45d
7 bc0
]
,
时候- - - - - -恢复
:
(
WT_VERB_RECOVERY_PROGRESS
]
恢复
日志
15
通过
16”}
}
7 bc0
]
,
时候- - - - - -恢复
:
(
WT_VERB_RECOVERY
|
WT_VERB_RECOVERY_PROGRESS
]
集
全球
复苏
时间戳
:
(
1679916159
,
1
)”}
}
{
“t”
:
{
“美元日期”
:
“2023 - 03 - 27 t11:22:48.688 + 00:00”
}
,
“s”
:
“我”
,
“c”
:
“存储”
,
“id”
:
22430年
,
“ctx”
:
“initandlisten”
,
“味精”
:
“WiredTiger信息”
,
“attr”
:
{
“消息”
:”(
1679916168
:
688481年
]
(
9811年
:
0 x7f43b45d
7 bc0
]
,
时候- - - - - -恢复
:
(
WT_VERB_RECOVERY
|
WT_VERB_RECOVERY_PROGRESS
]
集
全球
最古老的
时间戳
:
(
1679916154
,
1
)”}
}
{
“t”
:
{
“美元日期”
:
“2023 - 03 - 27 t11:22:48.695 + 00:00”
}
,
“s”
:
“我”
,
“c”
:
“存储”
,
“id”
:
22430年
,
“ctx”
:
“initandlisten”
,
“味精”
:
“WiredTiger信息”
,
“attr”
:
{
“消息”
:”(
1679916168
:
695497年
]
(
9811年
:
0 x7f43b45d
7 bc0
]
,
WT_SESSION
.checkpoint
:
(
WT_VERB_CHECKPOINT_PROGRESS
]
储蓄
检查点
快照
最小值
:
10
,
快照
马克斯
:
10
快照
数
:
0
,
最古老的
时间戳
:
(
1679916154
,
1
)
,
元
检查点
时间
amp
:
(
1679916159
,
1
)
基地
写
创
:
11982970”}
}
{
“t”
:
{
“美元日期”
:
“2023 - 03 - 27 t11:22:48.705 + 00:00”
}
,
“s”
:
“我”
,
“c”
:
“复苏”
,
“id”
:
23987年
,
“ctx”
:
“initandlisten”
,
“味精”
:
“WiredTiger recoveryTimestamp”
,
“attr”
:
{
“recoveryTimestamp”
:
{
“时间戳”美元
:
{”
t
”:1679916159。”
我”:
1
}
}
}
}
|
2。从数据文件和确定最后一次成功检查点恢复日志文件的未提交的脏数据回WireTtiger缓存。同样的页面将被标记为脏。
输出将显示相关信息。
|
1
2
|
文件
:
演示/集合/108年- - - - - -2625234990440311433. wt
access_pattern_hint=没有一个
,
allocation_size=4 kb
,
app_metadata=(
formatVersion=1
)
,
断言=(
commit_timestamp=没有一个
,
durable_timestamp=没有一个
,
read_timestamp=没有一个
,
write_timestamp=从
)
,
block_allocation=最好的
,
block_compressor=时髦的………检查点=(
WiredTigerCheckpoint
。
33=(
addr=“018081 e49e1d91ae9a81e4b44eefcd9b81e4be132c8a808080e30d3fc0e30c4fc0”
,
订单=33
,
时间=1679897278
,
大小=819200年
,
newest_start_durable_ts=7215101747935576783
,
oldest_start_ts=0
,
。
。
。
。
。
。
,
checkpoint_backup_info=,
checkpoint_lsn=(
4294967295
,
2147483647
)
|
3所示。这个脏页面的数据然后将准备下一个检查点过程中各自的数据文件在磁盘上。这是由“WiredTiger块经理处理。然后“不必要的日记会相应地清理post-checkpoint执行。
瞧! !我们现在有一个持久的和一致的数据状态即使崩溃。
引用:
雷竞技下载官网MongoDB Percona分布是一个免费的MongoDB数据库选择,给你一个解决方案,结合了最好的和最重要的开放源码社区的企业组件,设计和测试一起工作。

想要每周更新清单的最新博客文章?
现在订阅,我们将送你一个更新每周五下午1点等。
相关的博客文章
推荐的文章
2023年3月30日
皮特•斯科特
终极指南开源数据库
2023年3月29日
桑托什Varma
在MongoDB压缩方法:时髦与Zstd
2023年3月29日
Smit Arora
修复错误的分区表中的行
最受欢迎文章
2023年1月17日
谢尔盖Pronin
保持你的数据库安全Percona顾问雷竞技下载官网
2023年2月10日
马塞洛•阿尔特曼
雷竞技下载官网Percona XtraBackup现在支持我实例配置文件
2023年2月10日
拉蒂。乔杜里
雷竞技下载官网Percona XtraBackup和MySQL 5.7查询等待表刷新状态