首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MONGODB 性能与调优 -- 内存调优 2 (怎么计算驱逐率与调整参数)

MONGODB 性能与调优 -- 内存调优 2 (怎么计算驱逐率与调整参数)

作者头像
AustinDatabases
发布于 2022-05-19 00:53:13
发布于 2022-05-19 00:53:13
1.2K00
代码可运行
举报
文章被收录于专栏:AustinDatabasesAustinDatabases
运行总次数:0
代码可运行

接上次文,当MONGODB 在操作时脏的数据块达到一定程度的情况下,就需要将这些数据转移到磁盘中,我们可以称之为驱逐。驱逐实际上是一个正常的操作,但是如果是一个大的驱逐的操作,换而言之,当你要推入磁盘的数据太大的时候,就会产生一个叫拥塞的东西,也就是你产生的“食物”,无法一次性快速的赛道嘴里,然后还要强塞,那你就噎着了。

解决这个问题的方法很多,

1 你拥有更强大的带宽的磁盘设备,也就是你有一张大嘴。

2 进来不要让你产生的食物涨大道可以噎死你的地步。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var wtt=db.serverStatus().wiredTiger
var blockingEvictRate=wtt['thread-yield']['page acquire eviction blocked']*100 / wtt['cache']['eviction server evicting pages']

上面的公式主要的含义为,我从我驱逐的页面再次获得我要的信息,与我从内存中驱逐的页面之比

通过上面的方式来计算你的数据的页面的驱逐率,当你发现你的MONGODB BLOCKED 驱逐率逐步走高的情况下。除了上面的你可以从硬件方面可以做的。

还可以试一下,通过调整参数的方式来让你的MONGODB 的支持更快的刷新速度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.adminCommand({
... ... setParameter: 1,
... ... wiredTigerEngineRuntimeConfig:
... ... `eviction=(threads_min=4,threads_max=4),
... ... eviction_dirty_trigger=5,eviction_dirty_target=1,
... ... eviction_trigger=95,eviction_target=80`
... ... });

上面的调整为,对wiredTiger引擎的配置进行更改,其中将驱逐的线程进行固化 4个, 并且触发脏页刷新的触发机制提前,这就类似于提高数据库的checkpoint 的频率。可以解决一部分的问题,但如果你的硬件真的不怎么样,这样做也是徒劳。

其实徒劳的原因和下一个我们说的操作 CHECKPOINT 有关, 大量的数据写入到内存中,必须要找时间释放到磁盘上,将脏页刷新到磁盘,默认的刷新时间为60秒,

那么一个不好的checkpoint 会产生什么影响

1 大量的数据瞬间写入到磁盘,会影响当时时刻的整体的数据库的性能,可能会导致短暂的语句的处理的缓慢的情况 。

那么如果磁盘出现锯齿装的I/O 那么就值得来看看我们的问题了

这里有两个参数我们上面使用过了

eviction_dirty_trigger

eviction_dirty_target_settings

这里会牵扯几个问题,1 多少信息保留在cache中 2 什么情况下会触发将内存的数据刷到我们的磁盘上,减少这些参数的情况下,可以提高刷新脏页的频度。

eviction.threads_min

eviction.threads_max

这两个是针对多少线程来进行对CHECKPOINT 的操作,这个设置与我们的CPU 的核心数和繁忙度有关。

checkpoint的时间设置可以调整, 减少时间可以增加数据的刷新率,但是如果间隔过短,但是数据量过大,会造成磁盘的压力,导致系统卡顿。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.adminCommand({
setParameter: 1,
wiredTigerEngineRuntimeConfig:
`eviction=(threads_min=10,threads_max=10),
checkpoint=(wait=500),
eviction_dirty_trigger=5,
eviction_dirty_target=1`
});

所以当你发现的你的系统的性能在每个一分钟发生性能的抖动,那么很幸运也不幸运,你发现了问题,但解决是一个难题。

通过下面的命令可以去查看当前MONGODB 的配置文件信息

db._adminCommand( {getCmdLineOpts: 1})

下面是查看你刚刚配置的MOGNODB 的配置信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.adminCommand({getParameter: 1, wiredTigerEngineRuntimeConfig: 1})

与内存有关的性能问题还有一个地方就是我们的读写中的concurrency, 我们通过 db.serverStatus().wiredTiger.concurrentTransactions 来查看当前的系统中的状态是如何的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
db.adminCommand({setParameter: 1, wiredTigerConcurrentWriteTransactions: '256'})

为什么要动这个值,实际上对于MONGODB 频繁写入的情况下,通过Mongostat 来查看系统的性能的情况下,qw会持续的走高,这说明写入在进行排队的操作,WiredTiger无法满足数据插入的情况,此时如果CPU 负载不高情况下,可以调整上面的参数看看是否有改善,但带来的问题就是内存会使用率上升,另外不建议扩展的过高,太高对于CPU的负载压力过大。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MongoDB性能分析之WiredTiger引擎
MongoDB的WiredTiger引擎可以设置其可使用的最大内存,由cacheSizeGB参数控制,单位为G,表示WiredTiger引擎能够缓存的最大热数据量。每一个连接数都会消耗内存使用,可通过命令行db.serverStatus().connections查看当前连接数,如果连接数较大可通过连接池的方式控制mongodb的连接数。
Power
2025/03/02
1840
MONGODB 大内存参数的调节,checkpoint 与性能的关系
每种数据库本身都有自身的特性,同时面临的业务不同,也会导致每种数据库需要进行调节,来满足某种业务的需求.
AustinDatabases
2020/09/10
1.5K0
MONGODB  大内存参数的调节,checkpoint 与性能的关系
Mongodb日常操作命令
db.js_wx_setting_menu.storageSize();
DBA实战
2024/11/18
1440
Mongodb日常操作命令
MONGODB 性能与调优 -- 内存调优 1
最近发生了一些事情,由于之前开发和运维对于MONGODB的了解停留在用而已,已经某些外部原因,导致MONGODB 在某些不可抗力的情况下,出现了问题,导致了我不能说的经济损失。
AustinDatabases
2022/04/05
1.7K0
MONGODB  性能与调优 -- 内存调优 1
WiredTiger存储引擎之六:Cache分配规则与Page的淘汰机制
WiredTiger存储引擎系列文章将从逻辑正确、内容完整的角度全面介绍WiredTiger存储引擎。本篇作为WiredTiger存储引擎介绍系列文章第六篇,也是本系列文章的最后一篇。
MongoDB中文社区
2020/10/10
1.1K0
WiredTiger存储引擎之六:Cache分配规则与Page的淘汰机制
【最佳实践】巡检项:云数据库(MongoDB)Cache 脏数据
检查腾讯云数据库 MongoDB 实例 dirty cache 脏页的比例是否大于cache size 的20%,如果超过20%,用户线程将参与刷盘,阻塞业务的请求。
ivesjiang@DBA
2022/04/07
2.1K0
MongoDB 常用运维实践总结
MongoDB是一个基于分布式文件存储的数据库,其目的在于为WEB应用提供可扩展的高性能数据存储解决方案。下面将以3台机器介绍最常见的集群方案。具体介绍,可以查看官网 https://docs.mongodb.com/v3.4/introduction/。
我是阳明
2021/03/18
2.4K1
MongoDB 常用运维实践总结
【赵渝强老师】MongoDB的WiredTiger存储引擎
WiredTiger提供文档级别(Document-Level)的并发控制,检查点(CheckPoint),数据压缩和本地数据加密( Native Encryption)等功能。从MongoDB 3.2 版本开始,WiredTiger成为MongDB默认的Storage Engine。
赵渝强老师
2024/09/02
2390
【赵渝强老师】MongoDB的WiredTiger存储引擎
MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移
当我对公司的一个内部系统性能无可忍受时,意外发现在这个内存仅为 32G 的服务器上,运行着一个 MongoDB 数据库,其主进程 mongod 占用了 30.705 G的虚拟内存空间。这立刻引起了我的兴趣,必须要研究一下其工作原理。
数据和云
2018/07/27
1.8K0
MongoDB 初体验:存储引擎 MMAPv1 与高内存消耗及升级迁移
核心18问 | 万亿级数据库MongoDB集群性能优化实践合辑(下)
之前我们阅读了OPPO文档数据库mongodb负责人杨亚洲老师2020年分享干货-万亿级数据库MongoDB集群性能优化实践合辑(上),本次我们分享来自答疑内容核心18问,包括内容如下:
MongoDB中文社区
2021/04/02
2.6K0
百万级高并发mongodb集群性能数十倍提升优化实践(上篇)
线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性。该集群采用mongodb天然的分片模式架构,数据均衡的分布于各个分片中,添加片键启用分片功能后实现完美的负载均衡。集群每个节点流量监控如下图所示:
美的让人心动
2019/12/26
3.2K0
百万级高并发mongodb集群性能数十倍提升优化实践(上篇)
MONGODB what's going on page fault ? 发现与解决
Page fault 在大多数数据库中都会存在,页面错误的定义是当mongodb读取数据时,发现数据不再常驻的cache中,而需要从等待从磁盘读取数据到内存中的页面,这些页面就被称之为 page fault.
AustinDatabases
2022/07/13
4090
MONGODB   what's going on page fault ?  发现与解决
干货!万亿级数据库MongoDB集群性能优化实践合辑(上)
本文来自OPPO文档数据库mongodb负责人杨亚洲老师2020年深圳Qcon全球软件开发大会《专题:现代数据架构》专场、dbaplus专场:万亿级数据库MongoDB集群性能优化实践、mongodb2020年终盛会分享,分享内容如下(体验万亿级mongodb服务层、存储引擎、高并发线程模型、异地多活容灾等实现细节)。
MongoDB中文社区
2021/04/02
2.9K0
MongoDB基础知识及原理概述
MongoDB将等到它达到你请求的级别或者超时时间.如果它超时,它可能仍然完成了其中的一部分.如果发生超时,你可能需要确认状态
鳄鱼儿
2024/05/21
2460
MongoDB基础知识及原理概述
MongoDB线上案例:一个参数提升16倍写入速度
今天在线上遇到了一个MongoDB的性能问题,经过排查和参数调优,最终解决,还是很有收获,这里记录下整个问题排查过程以及思路,如果你不是搞MongoDB数据库的,那看看也无妨,这个排查问题的思路,后续会对你排查其他数据库有帮助。
AsiaYe
2021/08/06
10.9K2
MONGODB serverStatus 对监控的意义
最近听到一些对MONGODB的理解的歧义,认为MONGODB 数据库内容比较少,并没有一些值得深入研究,诚然对比不少数据库MONGODB看似是简单的,但任何一门技术都有他的特殊性,如果只是表面皮毛的利用和使用,或许也没有什么问题,可遇到问题后,如何解决就成了问题, 是做扁鹊 还是扁鹊的哥哥们,或者是一个庸医,都在你自己的一念之差.
AustinDatabases
2020/09/18
9510
《MongoDB极简教程》第二章 MongoDB 基本命令(Shell)
MongoDB的所有请求都以命令的形式发出,支持的命令列表参考Database Commands
一个会写诗的程序员
2018/08/20
5590
千亿数据扛不住,三思后还是从MySQL迁走了……
杨亚洲,前滴滴出行专家工程师,现任OPPO文档数据库MongoDB负责人,负责数万亿级数据量文档数据库MongoDB内核研发、性能优化及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。后续持续分享《MongoDB内核源码设计、性能优化、最佳运维实践》。
jeanron100
2021/06/09
1.3K0
MongoDB的WiredTigerLAS.wt大小异常分析
最近在运维MongoDB时遇到一个磁盘空间增长异常的问题,主要是WiredTigerLAS.wt这个文件占用了70GB以上的空间。经排查,有不少用户都遇到过这个问题,其背后的根本原因和MongoDB的一个bug有关。本篇文章会详细分析这个问题背后的原因以及涉及到的相关技术原理,并给出解决方法。
MongoDB中文社区
2020/08/25
3K0
MongoDB的WiredTigerLAS.wt大小异常分析
MongoDB大数据量模型设计最佳实践
数据质量项目,实时消费kafka数据,并经过流式计算后,需要展示并处理有问题的数据。
MongoDB中文社区
2021/08/06
1.2K0
MongoDB大数据量模型设计最佳实践
推荐阅读
相关推荐
MongoDB性能分析之WiredTiger引擎
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档