设为首页 收藏本站
查看: 1966|回复: 0

[经验分享] mongodb分库

[复制链接]

尚未签到

发表于 2018-10-27 07:03:57 | 显示全部楼层 |阅读模式
测试机配置


  • SAS 硬盘
  • 16GB内存
  • 千兆网
  • 8 cores cpu
mongodb


  • 版本: 2.2.3
  • replicaset: 3台物理机
  • driver:pymongo2.5.2(w=2,safe=True,use_greenlets)
分库前测试结果
  之前有测试过mongodb的读写性能 对于单条数据比较小的应用场景 非常适合 读写的吞吐量很不错 但是我们的应用场景是单条数会超过1MB 实际测试下来的结果是写锁非常严重 吞吐量保持在20qps左右 但是mongodb的CPU占用率不到70% 内存占用量在40% - 50% 磁盘IO也未到瓶颈 mongostate 查看状态的时候 写锁的比例非常高
给常用查询的字段加索引
  开始测试时 没有给查询的字段加索引 使用explain的结果如下:
view source  print?    01 db.users.find({'uid':'123456789'}).explain()   02 {   03 "cursor" : "BasicCursor",   04 "isMultiKey" : false,   05 "n" : 0,   06 "nscannedObjects" : 2,   07 "nscanned" : 2,   08 "nscannedObjectsAllPlans" : 2,   09 "nscannedAllPlans" : 2,   10 "scanAndOrder" : false,   11 "indexOnly" : false,   12 "nYields" : 0,   13 "nChunkSkips" : 0,   14 "millis" : 9,   15 "indexBounds" : {},   16 }  在查询的时候 使用的是BasicCursor 没有对查询uid添加索引 导致查询时需要遍历所有的ns
  添加索引db.users.ensureIndex({'uid':1})后 再看查询的解释
view source  print?    01 db.users.find({'uid':'123456789'}).explain()   02 {   03 "cursor" : "BtreeCursor uid_1",   04 "isMultiKey" : false,   05 "n" : 0,   06 "nscannedObjects" : 0,   07 "nscanned" : 0,   08 "nscannedObjectsAllPlans" : 0,   09 "nscannedAllPlans" : 0,   10 "scanAndOrder" : false,   11 "indexOnly" : false,   12 "nYields" : 0,   13 "nChunkSkips" : 0,   14 "millis" : 0,   15 "indexBounds" : {   16 "uid" : [   17 [   18 "123456789",   19 "123456789"   20 ]   21 ]},   22 }  添加索引后 吞吐有一定的提升 但是非常有限 我们测试的主要场景是大量的更新操作 查看mongostat的结果 还是写锁严重
分库
  mongodb在2.2后的写锁是数据库级别的 所以我们尝试着进行分库 在单个replicaset集群上部署多个数据库 然后进行测试 实际的测试结果为 写锁被分散到多个数据库上 但是local这个数据库的写锁比例突然上升了很多 能到120%+
  查看local这个数据库 里面存的数据
view source  print?    1 switched to db local   2 dds:PRIMARY> show collections;   3 me   4 oplog.rs   5 replset.minvalid   6 slaves   7 system.indexes   8 system.replset  上述collections中 me是mongodb的host信息 slaves里面存了secondary和oplog同步的信息 opslog.rs里面记录的是oplog 怀疑是oplog同步导致local写锁比例上升
添加replicaset集群
  为了验证上述猜测 我们在测试的三台物理机上又搭建了一个replicaset 然后再进行测试 结果非常好 local写锁有明显下降 吞吐量提高到150qps


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626907-1-1.html 上篇帖子: mongodb与mysql命令对比 下篇帖子: linux下八步安装mongodb数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表