前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MONGODB WiredTiger 页面大小与功能及 wiredTiger 版本与 MONGODB 的关系

MONGODB WiredTiger 页面大小与功能及 wiredTiger 版本与 MONGODB 的关系

作者头像
AustinDatabases
发布2022-12-13 18:43:56
5150
发布2022-12-13 18:43:56
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

使用MONGODB 很多个年头,算是我喜欢的数据库之一,最近在看wriedtiger的内容,偶然问了自己一个问题,wiredTiger 与mongodb的版本之间的关系是什么。

这里大致列一下MONGODB 的版本与 wiredTiger 之间的版本关系,

MONGODB 6.0 --- WiredTiger 11.0.1 2022.June.24

MONGODB 5.0 --- WiredTiger 10.0.2 2021.November.30

MONGODB 4.4 --- WiredTiger 10.0.2 2021.November.30

MONGODB 4.2 --- WiredTiger 3.3.0 2020, March ,20

所以如果从wiredTiger 的版本上看 4.4 和 5.0 使用的数据库引擎的版本是一致的。

以上信息来自于mongodb github

下面的信息均来自于 10.0.2 版本的 wiredTiger

在WiredTiger 中有三种页面的结构可以被调整,

1 memory_page_max

2 internal_page_max

3 leaf_page_max

下面我们的解释一下在wiredTiger中不同页面的角色是什么,同时我们还可以说说基于应用环节修改页面的尺寸和修改后对于系统负载应对的变化是什么。

在WiredTiger 中,页面的组织形式是以B+TREE 的方式组成的,在数据磁盘和内存页面数据的存储方式是不同的,基于内存页面和物理磁盘的页面,这里的页面的大小必然是在不同的位置是不同的,在wiredTiger中有物理磁盘管理的模块,BLOCK MANAGER ,它将这些内存中的数据进行分割通过 allocation_size 这个参数来将文件分割并进行存储,同时在数据磁盘存储的数据通过压缩程序来进行数据压缩后,将数据存储到磁盘。

一个数据库中的表很可能大约我们的主存,不是所有的数据都要在同一个时间放入到内存中的,这里有一个过程叫eviction ,驱逐,让内存中老的数据挪走,为新来的数据腾空存储空间。通过LRU算法的方式,将一段时间没有被访问的内存数据,驱逐到主存之外。当属被读取或更新的情况下,他会被装入到主存中,而如果这些页面并不在主存的情况下,他们会被读取并按照内存的页面的格式被填充。

这里需要注意的是,一般来说页面的大小是通过wiredTiger 来进行设置的当他发现需要装入数据的页面比数据要小的情况下,会给数据找到更大的页面或对现有的页面进行扩充,或者将数据进行拆分,并将数据放入到内存页面。

同时在MONGODB 中如果突然插入大量的数据,超过主存设置的最大值,则会导致这些内存页面被驱逐到磁盘,这样的情况下,数据插入和数据更新的性能会降低。此时内存中的页面正在被驱逐到磁盘。

同时也可能会发生另一件事情,就是内存使用了超过系统设置的最大内存,而为了应付当前的情况,系统只能标记需要被驱逐的内存页面,并在此尝试,而此间,系统还是会继续使用更多的内存,满足系统的需求。

这里有三个值,可以让用户来进行设置

1 memory_page_max 内存中最大的页面设置

2 internal_page_max 磁盘中页面的最大值

3 leaf_page_max 叶子节点的最大值

首先memory_page_max 的值的范围可以从 512B 到 10TB,默认值是5MB(官方给出),首先这个值针对大量的数据写入的系统中,是一个可以提高系统性能的参数,这个参数的调整可以帮助降低系统中大表的操作的延迟。

同时调整这个值与还可以降低页面进行分割和扩充时由于独占性导致的数据插入时的时间变长等。

如何看这个值,可以通过如下的方法来查看

db.data.stats().wiredTiger.creationString;

第二个是 internal_page_max

这个值是使用在基于B+TREE 上存储在磁盘上的页面最大的值,当存储的数据超过这个页面的大小,则会对这个数据进行分割,并在进行存储。

其中这个值本身的大小可调配的在 512B 到 512MB,默认值为4KB,并且分配的数字为可分配数据的倍数。

对于内存不足的系统,可以增加internal_page_max 的大小来可以经过IO传输更多的数据。这里internal_page_max 的主要作用为存储键值,这个值本身是可以影响B+TREE的形状的,在数据的搜寻中,必须通过key/value 来对数据进行查找,直到定位到对应的数据后,才能停止搜寻,所以这个尺寸对搜寻数据来说下探的子页面有相关的作用,

最后一个值为 leaf_page_max ,这个是关于叶子节点在磁盘上的大小的设定,值可以在512B 到 512MB 之间进行设置,默认值为32KB,这个值的重要性对于顺序性的数据更为重要,最大化IO性能,尤其在连续读取数据的情况下,以及应用对于表进行FULL-TABLE的扫描的情况,可以在单位IO中传输更多的数据。

除了以上的三个值,与 wiredTiger 在系统运行时的性能有关, split_pct也是一个有关的参数,值的范围在25 -100,默认是75,这个值主要的作用在于避免创建过多的小的页面,或经常进行页分割的情况发生。举例如果页面为1MB值为10 ,则数据存储到100KB 就开始产生新的数据页面了,而如果值在90,则页面会存储到900KB才能开始创建新的页面。

普通的MONGODB 的管理者是无法对这些值进行修改的,而如果想修改这些值,会需要其他的特殊手段进行修改。

参考文字连接:

http://source.wiredtiger.com/mongodb-4.4/tune_page_size_and_comp.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档