MongoDB爱好者
垂直技术交流平台

解决方案、线上活动| MongoDB Page Fault 的发现与解决、腾讯云 MongoDB 智能诊断及优化实践

Page Fault 在大多数数据库中都会存在,页面错误的定义是当 MongoDB 读取数据时,发现数据不再常驻的 Cache 中,而需要等待从磁盘读取数据到内存中的页面,这些页面就被称之为 Page Faul。

 

Page Fault 主要产生问题的是在用户在读取,或进行 DML 操作时所需要读取的数据不再虚拟内存中,而需要等待从磁盘中获取这些数据。

鉴于以上的原理,Page Fault 的问题产生基于空余的内存不足的问题,在系统中使用页面的情况会经常判断是否有空余的页面空间,基于剩余的空余页面的不足,会频繁驱逐目前已经不在使用的页面中的数据,并且加载目前需要使用的页面,基于内存不足的情况,这样的获取信息和驱逐页面的工作会频繁的进行。

我们可以基于 db.serverStatus() 来进行相关的信息的分析工作。

var info = db.serverStatus()
info.wiredTiger.cache['pages read into cache']
info.wiredTiger.cache['unmodified pages evicted']

通过动态比较上面的两个系统的监控值,为当前的内存不足所引起的问题。如果读取的 page read into cache 与 unmodified pages evicted 页面之间存在正比的关系,就很有可能是因为内存不足,或查询中经常有一些大型的获取数据的查询并且可能没有走索引导致。

同时我们还可以通过查看当前系统的内存是否充足,如 FREE 剩余内存多少,是否已经使用 WAP 方式。同时打开慢查询分析,查看是否当前有一些走了全表扫描的语句正在批量执行。

 

这里画一个问题分析的逻辑结构图如何解决在发现 Page Faults 后的操作。

 

db.serverStatus().extra_info.page_faults ,也可以通过 extra_info 命令来获取系统内告知的 page_faults 的数量。

 

除此以外,我们还可以通过一些其他的手段来判断你当前的内存是否够目前的运行使用。

  • 可以将当前的经常使用的 collection 进行统计。
  • 通过 db.collection.totalIndexSize() 来收集当前热度很高的索引的大小有多少,如果这些索引已经超过了当前的 wiredtiger cache size 就需要注意当前的内存扩容的问题了。

另外根据官方文档中的文字介绍:Ensure Indexes Fit in RAM — MongoDB Manual

Indexes do not have to fit entirely into RAM in all cases. If the value of the indexed field increments with every insert, and most queries select recently added documents; then MongoDB only needs to keep the parts of the index that hold the most recent or “right-most” values in RAM. This allows for efficient index use for read and write operations and minimize the amount of RAM required to support the index.

实际上在 MongoDB 中并不是一定要把整体的索引都装载到内存中的数据库, MongoDB 仅仅需要保证最近经常访问的最右侧的值在内存中即可,对于较大的索引与不充分的内存的情况是有一定的帮助和改善的。

 

关于作者:刘华阳

MongoDB 中文社区成员,数据库爱好者18年,MongoDB 狂热粉丝,曾经任国产某数据库产品经理,目前某互联网餐饮公司数据库部门负责人,PostGreSQL ACE、Austindatabases 公众号写手,熟悉 PostGreSQL、MySQL、MongoDB、SQL Server 等数据库。

 

文章阅读完了,不要滑走!接下来还有线上活动来袭~

腾讯云数据库专家工程师带您走进腾讯云 MongoDB 的知识海洋,通过其场景的经典案例为你分析解答其中的核心原理及处理方法。

 

MongoDB 中文社区线上直播  

在本期直播中,将带您了解如何处理在腾讯云 MongoDB 的坑点、注意事项、核心实现原理、常见问题、智能诊断及优化实践。从而助力互联网行业的发展,并分享相关案例作为参考。
主题:
腾讯云 MongoDB 智能诊断及优化实践
分享嘉宾:
杨亚洲 | 腾讯云数据库专家工程师
时间:
6月15日(星期三)19:00

扫描下方二维码预约直播!

社区招募

为了让社区组委会成员和志愿者朋友们灵活参与,同时我们为想要深度参与社区建设的伙伴们开设了“招募通道”,如果您想要在社区里面结交志同道合的技术伙伴,想要通过在社区沉淀有价值的干货内容,想要一个展示自己的舞台,提升自身的技术影响力,即刻加入社区贡献队伍~ 点击链接提交申请:
http://mongoingmongoing.mikecrm.com/CPDCj1B
社区合作

接下来我们会在诸多城市举办技术大会,如果您有优质的议题和 MongoDB 相关经验的嘉宾可以与我们分享,或者有赞助合作意向的小伙伴,包含但不限制于联合主办方、媒体合作等,都可以随时联系我们的社区助手小芒果(微信ID:mongoingcom)沟通具体事宜。
赞(5)
未经允许不得转载:MongoDB中文社区 » 解决方案、线上活动| MongoDB Page Fault 的发现与解决、腾讯云 MongoDB 智能诊断及优化实践

评论 抢沙发

评论前必须登录!