文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mongodb 利用率高如何解决

2024-04-02 19:55

关注

本篇文章为大家展示了mongodb 利用率高如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Step1: 分析数据库正在执行的请求

db.currentOp() 

client:请求是由哪个客户端发起的?

opid:操作的opid,有需要的话,可以通过 db.killOp(opid) 直接干掉的操作

secs_running/microsecs_running: 这个值重点关注,代表请求运行的时间,如果这个值特别大,就得注意了,看看请求是否合理

query/ns: 这个能看出是对哪个集合正在执行什么操作

lock*:还有一些跟锁相关的参数

Step2:分析数据库慢请求

MongoDB 支持 profiling 功能,将请求的执行情况记录到同DB下的 system.profile 集合里,profiling 有3种模式

profiling 设置文档在这里,多看官网文档

关闭 profiling

针对所有请求开启 profiling,将所有请求的执行都记录到 system.profile 集合

针对慢请求 profiling,将超过一定阈值的请求,记录到system.profile 集合

默认请求下,MongoDB 的 profiling 功能是关闭,生产环境建议开启,慢请求阈值可根据需要定制,如不确定,直接使用默认值100ms。

设置100ms的慢请求

db.setProfilingLevel(1, { slowms: 100 })

在开启了慢请求 profiling 的情况下(MongoDB 云数据库是默认开启慢请求 profiling的),我们对慢请求的内容进行分析,来找出可优化的点,常见的包括。

profiling的结果输出含义在这里,多看官网文档

CPU杀手1:全表扫描

全集合(表)扫描 COLLSCAN,当一个查询(或更新、删除)请求需要全表扫描时,是非常耗CPU资源的,所以当你在 system.profile 集合 或者 日志文件发现 COLLSCAN 关键字时,就得注意了,很可能就是这些查询吃掉了你的 CPU 资源;确认一下,如果这种请求比较频繁,最好是针对查询的字段建立索引来优化。

一个查询扫描了多少文档,可查看 system.profile 里的 docsExamined 的值,该值越大,请求CPU开销越大。

> 关键字:COLLSCAN、 docsExamined

CPU杀手2:不合理的索引

有的时候,请求即使查询走了索引,执行也很慢,通常是因为合理建立不太合理(或者是匹配的结果本身就很多,这样即使走索引,请求开销也不会优化很多)

如下所示,假设某个集合的数据,x字段的取值很少(假设只有1、2),而y字段的取值很丰富。

{ x: 1, y: 1 }

{

{ x: 1, y: 2 }

{

{ x: 1, y: 3 }

.

......

{

{ x: 1, y: 100000} 

{

{ x: 2, y: 1 }

{

{ x: 2, y: 2 }

{

{ x: 2, y: 3 }

.

......

{

{ x: 1, y: 100000} 

要服务 {x: 1: y: 2} 这样的查询

db.createIndex( {y: 1 } )        效果好,因为y相同取值很少

d

db.createIndex( {y: 1, x: 1 } )  效果好,因为y相同取值少

一个走索引的查询,扫描了多少条索引,可查看 system.profile 里的 keysExamined 字段,该值越大,CPU 开销越大。

>关键字:IXSCAN、keysExamined

CPU杀手3:大量数据排序

当查询请求里包含排序的时候,如果排序无法通过索引满足,MongoDB 会在内存李结果进行排序,而排序这个动作本身是非常耗 CPU 资源的,优化的方法仍然是建立索引,对经常需要排序的字段,建立索引。

当你在 system.profile 集合 或者 日志文件发现 SORT 关键字时,就可以考虑通过索引来优化排序。当请求包含排序阶段时, system.profile 里的 hasSortStage 字段会为 true。

> 关键字:SORT、hasSortStage

======================MongodDB shard key片键选择=====================

主要考虑key的「离散度」以及「频率」,离散度越高越好,能更好的分散数据;频率越低越好,避免出现热点;

===========MongoDB 连接串样例========================

正确连接分片集群的姿势

要正确连接复制集,需要先了解下MongoDB的Connection String URI,所有官方的driver都支持以 Connection String 的方式来连接 MongoDB 分片集群。

下面就是Connection String包含的主要内容

mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

mongodb:// 前缀,代表这是一个Connection String

username:password@ 如果启用了鉴权,需要指定用户密码

hostX:portX 多个 mongos 的地址列表

/database 鉴权时,用户帐号所属的数据库

?options 指定额外的连接选项

上述内容就是mongodb 利用率高如何解决,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯