Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MongoDB详细表级操作统计及详细时延统计实现原理

MongoDB详细表级操作统计及详细时延统计实现原理

作者头像
MongoDB中文社区
发布于 2021-08-06 02:56:57
发布于 2021-08-06 02:56:57
1.4K00
代码可运行
举报
文章被收录于专栏:MongoDB中文社区MongoDB中文社区
运行总次数:0
代码可运行

背景

MongoDB内核代码中提供有完善的gotool工具,这些开源工具作用主要有:数据导出及恢复(mongodump、mongorestore、mongoexport、mongoimport)工具、客户端shell链接工具(mongo)、IO测试工具(mongoperf)、流量qps/时延等监控统计工具(mongostat、mongotop)。

MongoDB默认只提供mongostat和mongotop工具来完成流量和时延统计,这两个工具的主要功能如下:

  • mongostat:监控整个集群的qps统计信息
  • mongotop:监控表级的读写时延统计信息

问题:

问题一:mongostat可以监控整个集群的qps信息,但是表级的qps信息如何监控?例如如果某一时刻读写流量突然暴涨引起集群抖动,怎么知道是那个具体的表引起?

问题二:mongotop可以获取整个表的读写时延消耗,如果某个表写时延很高,我们如何快速定位写时延高具体由增、删、改操作中的那个操作引起?

显然,mongostat和mongotop满足不了我们怼上面的两个问题的需求。实际上,MongoDB内部实现上提供有对应的表级别qps和表级别时延统计接口,拿到这些接口统计后,我们就可以快速获取对应的数据结果,本文讲分析表级统计的实现原理及核心代码实现。

1. mongostat、mongotop监控统计信息

MongoDB官方对外开源的qps及时延监控主要有mongostat和mongotop,本章节分析这两个工具的用法及监控项。

1.1 mongostat监控统计

MongoDB提供了mongostat工具来监控当前集群的各种操作统计。Mongostat监控统计如下图所示:

其中,insert、delete、update、query这四项统计比较好理解,分别对应增、删、改、查,getMore记录批量拉数据时候的游标操作统计,command统计在mongos和mongod中有不同的涵义,具体参考:MongoDB内核源码实现、性能调优、最佳运维实践系列-command命令处理模块源码实现三

mongostat help参数功能详细说明如下:

参数项

功能说明

general options:

获取版本信息、help帮助信息

verbosity options:

是否打印日志信息,-v表示打印日志,v个数越多日志打印越多 quiet默认不答应日志

connection options:

链接的mongo实例ip:port地址

ssl options:

SSL认证相关配置

authentication options:

鉴权认证的用户名和密码

uri options:

uri链接认证方式,类似MongoDB://username1:password1@ip:port

stat options:

统计选项设置: --discover:如果链接的是复制集节点,则输出整个复制集所有节点监控信息;如果 链接的是代理mongos节点,则输出整个分片集群节点监控信息。 -n:一共输出多少行即停止监控输出,默认没限制 --json:指定输出个数为json格式 -i: 直接同一个屏幕显示统计信息,屏幕刷新周期就是-i指定的时间 --humanReadable:是否进行字节到M或者K等的转换,默认true

1.2 mongotop监控统计

mongotop实现对所有表的读写时延消耗统计,并按照总耗时排序直观输出,对应统计打印信息如下图所示:

mongotop监控输出项各字段说明如下:

  • ns: 表名
  • read:1秒钟内客户端对该表读操作消耗的总时间
  • write:1秒钟内客户端对该表写操作消耗的总时间
  • total:1秒钟内客户端对该表读写消耗的总时间

mongotop工具help参数信息说明如下表所示:

参数项

功能说明

general options:

获取版本信息、help帮助信息

verbosity options:

是否打印日志信息,-v表示打印日志,v个数越多日志打印越多 quiet默认不答应日志

connection options:

链接的mongo实例ip:port地址

ssl options:

SSL认证相关配置

authentication options:

鉴权认证的用户名和密码

uri options:

uri链接认证方式,类似MongoDB://username1:password1@ip:port

stat options:

统计选项设置: -n:一共输出多少行即停止监控输出,默认没限制 --json:指定输出个数为json格式

2. 表级详细操作统计及其时延监控统计

mongod实例会对表级别的增、删、改、查、getMore、command进行详细的操作统计,并对每种操作的时延进行统计。每个表都拥有一个CollectionData结构,该结构中存储所有操作统计和时延统计;同一个操作的qps统计和时延统计通过UsageData结构实现,包含count和time两个成员。

2.1 表级统计实现原理

详细的表级统计通过以下几个类结构分层实现:

  • 全局UsageMap表

UsageMap是一个StringMap表结构,该map表中的成员类型为CollectionData,一个CollectionData对应一个表名及其该表的各自详细qps和时延统计信息,核心代码定义如下:

typedef StringMap<CollectionData> UsageMap;

  • CollectionData表统计信息

CollectionData结构中包含多个成员,包含了三个维度的统计,每个维度中的成员对应一个操作统计项,统计维度及其操作类型如下表:

  • UsageData

UsageData完成上面的锁维度和请求类型维度的操作计数和时延计数,UsageData包含count和time两个成员,分别用于操作计数和时延计数。

  • OperationLatencyHistogram表级汇总型统计

OperationLatencyHistogram实现表级别的操作汇总计数和汇总型时延统计,在该汇总型统计中把请求类型维度中的六项操作(queries、getmore、insert、update、remove、commands)合并汇总为三项统计:reads、writes、_commands。

2.2 核心代码实现

MongoDB表级详细统计实现主要由src/mongo/db/stats/目录中的top.cpp、top.h、operation_latency_histogram.cpp、operation_latency_histogram.h四个文件完成。

2.2.1 核心数据结构实现

核心数据结构代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Top {

   ......

  //map表中每个表占用一个  

  struct CollectionData {

    ......

    //锁维度

    UsageData readLock;

    UsageData writeLock;

      //表级别不同操作的时延统计,粒度相比OperationLatencyHistogram更小

      //请求类型维度,包含增、删、改、查、getMore、command六类

      UsageData queries;

      UsageData getmore;

      UsageData insert;

      UsageData update;

      UsageData remove;

      UsageData commands;

      //总的,上面的[queries,commands]

      UsageData total;

      

      //汇总型维度,包含读、写、command三个维度

      OperationLatencyHistogram opLatencyHistogram;

    };

    //锁类型,读锁还是写锁

    enum class LockType {

      ReadLocked,

      WriteLocked,

      NotLocked,

    };

    //Top._usage 各种命令的详细统计记录在该map表中

    //map表中每个表占用一个,参考Top::record

    typedef StringMap<CollectionData> UsageMap;

  public:

    //全局UsageMap表,表中每个成员对应一个collection表

    UsageMap _usage;  

    ......

  }

从上面的核心算法可以看出,UsageMap 为map表结构,包含有所有表名及其对应的表级请求统计和时延统计,每个表的所有统计记录到struct CollectionData {} 结构中。

CollectionData 结构中的成员可以分为三类:锁统计、详细请求统计、汇总型统计,其中汇总型统计由class OperationLatencyHistogram {}类实现,核心成员如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class OperationLatencyHistogram {

  ......

private:

  //可以用于记录历史统计,通过buckets来区分,最大可以记录kMaxBuckets个历史统计信息

  struct HistogramData {

    std::array<uint64_t, kMaxBuckets> buckets{};

    uint64_t entryCount = 0;

    uint64_t sum = 0;

  };

    ......

    HistogramData _reads, _writes, _commands;

  }

2.2.2 核心算法实现

按照不同的维度,表级详细统计核心算法实现可以包含:锁及请求类型详细统计算法实现、汇总型表级详细统计算法实现。

  • 锁类型统计和请求类型详细统计核心算法实现

MongoDB按照不同统计维度,同一个请求可以归纳到不同锁类型,同时也可以归纳到不同请求类型。例如,db.test.find({xxx})这个查询,在对test表详细统计的时候,该查询会同时对该表的读锁readLock统计及queries统计进行计数,也就是会同时记录该操作锁操作计数和查询操作计数。

锁类型统计及请求类型表级统计核心算法实现如下:

1. 找出对应表统计存储结构CollectionData

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void Top::record(...) {

  ......

  //根据表名从Map表种找到该表在表中对应hash位置

  auto hashedNs = UsageMap::HashedKey(ns);

  stdx::lock_guard<SimpleMutex> lk(_lock);

  //如果ns是已经删除的表,直接返回

  if ((command || logicalOp == LogicalOp::opQuery) && ns == _lastDropped) {

      _lastDropped = "";

      return;

    }

    //找到改表对应的CollectionData

    CollectionData& coll = _usage[hashedNs];

    //开始表级计数统计

    _record(opCtx, coll, logicalOp, lockType, micros, readWriteType);

  }

2. 对该表进行真正的计数统计操作

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Top::record**调用 各个命令的op及时延统计**

void Top::_record(...) { 

  //**汇总型详细表级统计**

  _incrementHistogram(opCtx, micros, &c.opLatencyHistogram, readWriteType); 

  //**该表总时延计数,包括增删改查getMore command六项** 及其他所有的统计

  c.total.inc(micros); 

  //**写锁计数**

  if (lockType == LockType::WriteLocked) 

    c.writeLock.inc(micros); 

    //**读锁计数**

    else if (lockType == LockType::ReadLocked) 

      c.readLock.inc(micros); 
    //**详细增 删 改 查 getMore command统计及时延**

    switch (logicalOp) { 

      //**无效类型**

      case LogicalOp::opInvalid: 

        // use 0 for unknown, non-specific 

        break; 

      case LogicalOp::opUpdate:  //**增**

        c.update.inc(micros); 

        break; 

      case LogicalOp::opInsert: //**插入**

        c.insert.inc(micros); 

        break; 

      case LogicalOp::opQuery: //**查询**

        c.queries.inc(micros); 

        break; 

      case LogicalOp::opGetMore: //getMore**游标**

        c.getmore.inc(micros); 

        break; 

      case LogicalOp::opDelete: //**删除**

        c.remove.inc(micros); 

        break; 

      case LogicalOp::opKillCursors: //

        break; 

      case LogicalOp::opCommand: 

        c.commands.inc(micros); 

        break; 

      default: 

        MONGO_UNREACHABLE; 

    } 

  }
  • 表级汇总型操作及时延统计

汇总型操作详细统计主要实现读、写、command操作统计及对应时延统计,这类操作核心代码实现如下:

1. 按照不同操作分类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//不同请求归类参考getReadWriteType

 //Top::_incrementHistogram  操作和时延计数操作

void OperationLatencyHistogram::increment(uint64_t latency, Command::ReadWriteType type) {

  //确定latency时延对应在[0-2]、(2-4]、(4-8]、(8-16]、(16-32]、(32-64]、(64-128]...中的那个区间

  int bucket = _getBucket(latency);

  switch (type) {

    //读时延累加,操作计数自增

    case Command::ReadWriteType::kRead:

      incrementData(latency, bucket, &reads);

        break;

      //写时延累加,操作计数自增

      case Command::ReadWriteType::kWrite:

        incrementData(latency, bucket, &writes);

        break;

      //command时延累加,操作计数自增

      case Command::ReadWriteType::kCommand:

        incrementData(latency, bucket, &commands);

        break;

      default:

        MONGO_UNREACHABLE;

    }

  }

2. 对应分类操作计数、时延计数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//OperationLatencyHistogram::increment中调用

//读 写 command总操作自增,时延对应增加latency

void OperationLatencyHistogram::_incrementData(uint64_t latency, int bucket, HistogramData* data) {

  //落在bucket桶指定时延范围的对应操作数自增

  data->buckets[bucket]++;

  //该操作总计数

  data->entryCount++;

  //该操作总时延计数

  data->sum += latency;

  }

3. 时延范围分区桶统计

MongoDB进行汇总型操作及时延统计后,可以获取总体的读、写、command平均时延,但是无法获取例如最大时延、95%分位时延、99分位时延等。MongoDB为了满足这些需求,同时降低代码实现难度,通过分区时延统计来满足业务的这些需求。

时延范围分区桶实现原理:根据时延值,按照如下时延范围和分区桶得对应关系来完成统计操作,时延和桶的对应关系如下图所示:

时延范围分区桶核心算法实现核心代码实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//桶计数

void OperationLatencyHistogram::_incrementData(uint64_t latency, int bucket, HistogramData* data) {

  //落在bucket桶指定时延范围的对应操作数自增

  data->buckets[bucket]++;

  ......

}

 

//不同请求归类参考getReadWriteType

//Top::_incrementHistogram  操作和时延计数操作

  void OperationLatencyHistogram::increment(uint64_t latency, Command::ReadWriteType type) {

    //确定latency时延对应在[0-2]、(2-4]、(4-8]、(8-16]、(16-32]、(32-64]、(64-128]...中的那个区间

    int bucket = _getBucket(latency);

    switch (type) {

      //读时延累加,操作计数自增

      case Command::ReadWriteType::kRead:

        incrementData(latency, bucket, &reads);

        break;

      //写时延累加,操作计数自增

      case Command::ReadWriteType::kWrite:

        incrementData(latency, bucket, &writes);

        break;

      //command时延累加,操作计数自增

      case Command::ReadWriteType::kCommand:

        incrementData(latency, bucket, &commands);

        break;

      default:

        MONGO_UNREACHABLE;

    }

  }

从上面的代码可以看出,汇总型统计中的读、写、command操作统计及时延统计包含该请求类型中的所有时延范围分区桶统计,已下图中的collection表read统计为例:

1. reads.ops=reads.histogram[]数组count之和

2. histogram.micros代表时延范围分区桶的时延边界值,例如2、4、8、16,以此类推。

3. 表级详细统计对外接口

3.1 表级别锁维度及请求类型维度相关统计接口

表级别锁维度及请求类型维度相关统计对外接口可以通过下面的命令获取得到(注:只能在mongod实例执行):

use admin

db.runCommand( { top: 1 } )

3.2 汇总型表级别统计

表级别汇总型读、写、command相关操作及时延统计可以通过如下命令获取:

db.collection.latencyStats( { histograms:false}).pretty()

不同时间段对应有那些操作,例如那些操作时延比较高,可以通过时延范围分区桶统计接口获取:

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

本文分享自 Mongoing中文社区 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
想使用 MongoDB ,你应该了解这8个方面!
Meteor默认使用MongoDB作为数据库,虽然它正对Mongo进行了封装,但当应用扩大后,对于MongoDB性能调优的了解也是必不可少的。本文来自OneAPM,教给你使用MongoDB所需要了解的8个方面。 应用性能高低依赖于数据库性能,MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 本文针对实时监控 MongoD
时见疏星
2018/06/01
5820
MongoDB command命令处理模块源码实现二
《MongoDB command命令处理模块源码实现一》中我们分析了一个客户端请求到来后,mognodb服务端大体处理流程如下:
MongoDB中文社区
2021/04/22
1.2K0
MongoDB command命令处理模块源码实现二
MongoDB 监控
MongoDB自带了mongostat和mongotop这两个命令来监控MongoDB的运行情况。这两个命令对于我们处理MongoDB数据库变慢等等问题非常有用,能详细的统计MongoDB当前的状态信息。除此之外,还可以用db.serverStatus()、db.stats()、开启profile功能通过查看日志进行监控分析。
子润先生
2021/07/01
7550
Promethues 应用监控的一些实践
在具体设计 Metrics 之前,首先需要明确需要测量的对象。需要测量的对象应该依据具体的问题背景、需求和需监控的系统本身来确定。
我是阳明
2021/10/20
4960
核心18问 | 万亿级数据库MongoDB集群性能优化实践合辑(下)
之前我们阅读了OPPO文档数据库mongodb负责人杨亚洲老师2020年分享干货-万亿级数据库MongoDB集群性能优化实践合辑(上),本次我们分享来自答疑内容核心18问,包括内容如下:
MongoDB中文社区
2021/04/02
2.5K0
011.MongoDB性能监控
MongoDB自带了mongostat 和 mongotop 这两个命令来监控MongoDB的运行情况。这两个命令用于处理MongoDB数据库变慢等等问题非常有用,能详细的统计MongoDB当前的状态信息。除此之外,还可以用db.serverStatus()、db.stats()、开启profile功能通过查看日志进行监控分析。
木二
2019/07/01
2.6K0
MongoDB 第五期 : 托管 MongoDB 操作指南
一、自动化部署工具介绍 1、业务入口 (1)MongoDB申请 ①界面地址:http://bianque.webdev.com/mongo/mongoApply ②注意事项: 提供测试库和正式线上
迪B哥
2017/08/09
1.5K0
MongoDB 第五期 : 托管 MongoDB 操作指南
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
作者 | 朱瑜坚 腾讯云后台开发工程师 Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期
腾讯云可观测平台
2020/06/05
2.7K0
浅析HystrixRollingNumber(用于qps计数的数据结构)
考虑到一种需求场景,我们需要统计系统qps、每秒平均错误率等。qps表示每秒的请求数目,能想到的最简单的方法就是统计一定时间内的请求总数然后除以总统计时间,所以计数是其中最核心的部分。通常我们的额系统是工作在多线程的环境下,所以计数我们可以考虑使用AtomicInteger/AtomicLong系列,AtomXXX中没有使用锁,使用的是循环+CAS,在多线程的条件下可以在一定程度上减少锁带来的性能损失。但是在竞争特别激烈的情况,会大量出现cas不成功的情况带来性能上的开销。为了更进一步分散线程写的压力,JDK8中引入了LongAdder,前面的博客中介绍了LongAdder,LongAdder会分成多个桶,将每个线程绑定到固定的桶空间中进行读写,计数可以对所有的桶中的值求总数。前面提到求qps最简单的方法就是统计一定时间内的请求总数然后除以总统计时间,这样的方法虽然简单但是对有一定的问题,比如说统计出的qps跳跃性会比较大,不够平滑等。在本文中将介绍HystrixRollingNumber,这个数据结构在统计qps等类似的求和统计的场景下非常有用。
LNAmp
2018/09/05
1.6K0
MongoDB多纬度监控方法详解
一、mongostat工具方法 mongostat是mongdb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果你发现数据库突然变慢或者有其他问题的话,你第一手的操作就考虑采用mongostat来查看mongo的状态。 mongostat命令参数 --help : 查看帮助信息 --version : 查看mongodb版本号 --host : 要连接的主机同时也可以指定端口 --port :
小小科
2018/05/04
1.5K0
叮咚买菜自建MongoDB上腾讯云实践
随着近年来公有云技术及云基础设施的发展,越来越多的企业转为使用公有云来托管自己的服务。云数据库因为数据可靠性、资源弹性、运维便捷行,云上数据库服务也正成为企业数据管理的较好的选择。   本文以叮咚买菜自建MongoDB数据库整体迁移上腾讯云MongoDB为背景,分享叮咚买菜上云过程中的遇到的疑难问题及对应的性能优化解决方法等,主要包括以下分享内容:    · 云上MongoDB版本选型    · 安全上云及切换方案    · 叮咚买菜业务侧性能优化    · 上云遇到的疑难问题及解决方法    · 自建上
腾讯云数据库 TencentDB
2021/12/15
4.3K3
一文了解MongoDB监控
MongoDB Manual (Version 4.2)> Administration > Monitoring for MongoDB
MongoDB中文社区
2021/03/01
1.1K0
MongoDB高频命令集合
Power
2025/03/02
890
MongoDB触发oom-killer的简单处理(一)(r7笔记第54天)
今天正在处理问题,突然收到一封邮件,提示mongo的一个副本集出现了问题。邮件内容如下: 当前状态:PROBLEM 事件编号:11187790 发生时间:2015.12.21 13:30:01 持续时长:1h 20m 监控节点:mongo_mobile_gl_comment_sec.161 报警级别:高危(High) 事件信息:One or more replication members need attention 事件详情:Replication: Count of ReplicaSet Member
jeanron100
2018/03/16
1.9K0
浅尝辄止MongoDB:管理(2)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/83012634
用户1148526
2019/05/25
4660
搞会这个索引添加法,十亿级时延敏感集群想抖动都难
杨亚洲,前滴滴出行专家工程师,现任OPPO文档数据库mongodb负责人,负责数万亿级数据量文档数据库mongodb内核研发、性能优化及运维工作,一直专注于分布式缓存、高性能服务端、数据库、中间件等相关研发。
jeanron100
2021/09/02
5060
鹅厂程序员爆肝整理,万字长文讲透MongoDB中的锁
MongoDB 作为世界领先的文档型数据库广受开发者的喜爱,而 MongoDB 中的锁又为数据库高并发的读写提供了保障。本文从 MongoDB 的慢日志引入 MongoDB 中的锁,通过介绍 MongoDB 中的资源分类、锁分类、锁结构、锁实现以及锁的使用情况与查询方法,深入浅出地介绍 MongoDB 中锁的相关技术。长文干货,建议先点赞收藏再细细阅读~
腾讯云开发者
2024/02/22
7841
鹅厂程序员爆肝整理,万字长文讲透MongoDB中的锁
Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!
Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位。本文即基于最佳实践的 Metrics 设计方法,结合具体的场景实例——TKE 的网络组件 IPAMD 的内部监控,以个人实践经验谈一谈如何设计和实现适合的、能够更好反映系统实时状态的监控指标(Metrics)。该篇内容适于 Prometheus 或相关监控系统的初学者(可无任何基础了解),以及近期有 Prometheus 监控方案搭建和维护需求的系统开发管理者。通过这篇文章,可以加深对 Prometheus Metrics 的理解,并能针对实际的监控场景提出更好的指标(Metrics)设计。
腾讯云原生
2020/05/22
3.8K0
MongoDB特定场景性能数十倍提升优化实践(记一次MongoDB核心集群雪崩故障)
某核心JAVA长连接服务使用MongoDB作为主要存储,客户端数百台机器连接同一MongoDB集群,短期内出现多次性能抖动问题,此外,还出现一次“雪崩”故障,同时流量瞬间跌零,无法自动恢复。本文分析这两次故障的根本原因,包括客户端配置使用不合理、MongoDB内核链接认证不合理、代理配置不全等一系列问题,最终经过多方努力确定问题根源。
MongoDB中文社区
2020/10/10
1.2K0
MongoDB特定场景性能数十倍提升优化实践(记一次MongoDB核心集群雪崩故障)
百万级高并发mongodb集群性能数十倍提升优化实践(上篇)
线上某集群峰值TPS超过100万/秒左右(主要为写流量,读流量很低),峰值tps几乎已经到达集群上限,同时平均时延也超过100ms,随着读写流量的进一步增加,时延抖动严重影响业务可用性。该集群采用mongodb天然的分片模式架构,数据均衡的分布于各个分片中,添加片键启用分片功能后实现完美的负载均衡。集群每个节点流量监控如下图所示:
美的让人心动
2019/12/26
3.1K0
百万级高并发mongodb集群性能数十倍提升优化实践(上篇)
推荐阅读
相关推荐
想使用 MongoDB ,你应该了解这8个方面!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验