四个方面进行 cpu/io 方面的优化处理:

1.集群架构上进行读写分离。所有查询优先考虑在从库上读取,写操作在主库上执行。避免主库混合读写压力过大,也减少主库上读写记录的锁冲突。

connection string中readPreference 设置成secondarypreferred,C++ 驱动版本升级为3.1.3 mongo-cxx-driver(驱动升级,读写分离才生效) 。

2.热表msg_traces 索引优化

针对该慢查询创建联合索引 {"_id": 1, "account": 1, "app_key": 1, "s_pc": 1}。

3.mongodb 历史数据归档和删除

和开发同事沟通,根据实际业务需求,保留msgs、msg_traces 集合中一年左右的文档。在timestamp 字段上创建TTL索引。设置文档的过期时间为 3153600秒(365*24*3600)。

db.msgs.createIndex( { "timestamp ": 1 }, { expireAfterSeconds: 3153600 },{background: true} )

db.msg_traces.createIndex( { "timestamp ": 1 }, { expireAfterSeconds: 3153600 },{background: true} )

mongodb TTL索引将每隔60秒对过期数据执行一次删除操作。删除操作的持续实际取决于mongod 实例的负载。

4 .journal 日志的 commitIntervalMs 参数调整。

从默认的100ms调大到500ms。

目前通过读写分离和索引优化之后,原来分片1在业务高峰期间的cpu load 值由最高值250降低到5以内,优化效果非常明显。

mongodb 分片集群优化思路总结:

分片集群中出现某个分片负载特别高的情况。(往往是某个分片负载高,如果是多个分片节点负载都高,则需要逐个进行分析)

第一步:

首先通过top、iostat、vmstat、mongostat 等工具了解系统大致并发负载和读写比例,观察系统具体瓶颈所在。

第二步:

如果负载只是集中出现在某一个节点上,则通过 mongotop 工具先分析该mongodb实例的热点表是哪些并记录下来。

第三步:

通过 mlogfilter / mloginfo 工具分析业务高峰期间出现的TOP10 慢查询。

第四步:

定位需要优化的目标表,并进行查询优化。

通常第二步和第三步会出现很多相同的表。因为热点数据表和慢查询表往往存在相同的一些表。这些表就是我们需要优化的目标。

mongodb 分片表的优化大致从以下几方面着手:

1.查看表分片键、数据分布、数据总量、数据占用空间等信息。着重看数据分片键设置是否合理、数据分布是否均匀;

2.mloginfo 工具打印出来的慢查询信息中有每个慢查询的查询条件。确认慢查询表上是否有合适的索引满足查询条件执行。需要结合explain() 分析慢查询的具体执行计划。

3.选取业务高峰阶段的mongodb实例原始日志,搜索慢查询表相关的原始查询语句。记录这些原始查询语句,方便后续与开发同事沟通,看能否从业务场景上进行相应的优化。

4.对于日志、事件、会话信息等日志类型的表,可以按照业务需求,根据事件字段,只保留一定时间内的有效数据。通常这要与开发业务

沟通清楚。确认保留时间后,可以利用mongodb TTL索引特性,在特定时间字段上创建索引,设置记录过期时限。

第五步:

架构上做读写分离优化

如果在第三步找出来的 TOP10 慢查询不少是能有效利用索引的简单查询,正常情况下,执行应该很快(200ms之内)。

则需要考虑在架构上做读写分离的优化。因为热点表高并发的读写会让cpu 忙不过来,导致原本正常的查询都出现阻塞。

总之,mongodb 优化关键之处是找出系统瓶颈和问题根源。定位出需要优化的目标表后,简单地加个索引或者做个读写分离,性能问题往往就迎刃而解。

这个和医生看病颇为相似,通过望闻问切和各种医疗检验设备所反馈的数据和报告,再依据丰富的临床经验诊断出病因所在。找出病因后,开什么方子用什么药就是水到渠成的事了。当然,医生看病比给数据库做性能诊断复杂多了,误诊几率也不小。而且,数据库性能优化没找准原因还有不少试错的机会,但是医生试错成本就比较高了。所以当个好医生貌似比做个好DBA更难!

以上插了些题外话。优化上过程中,也需要和开发同事保持有效沟通。当我们理解慢查询产生的业务场景后,有时让开发同事配合做个简单的功能优化,头痛的性能问题也能随之解决。

转载于:https://www.cnblogs.com/duanxz/p/3621155.html

MongoDB优化之二:常见优化方法相关推荐

  1. SQL性能优化技巧,常见优化10经验,数据库查询好慢,还能怎么办

    我熟练应用ctrl c和ctrl v 开发curd代码好多年了. mysql查询为什么会慢,关于这个问题,在实际开发经常会遇到,而面试中,也是个高频题. 遇到这种问题,我们一般也会想到是因为索引. 那 ...

  2. mysql 极限优化配置_MySQL优化(二) 优化诀窍

    一.索引的使用 (1)查询要使用索引最重要的条件是查询条件中的字段建立了索引: (2)下列几种情况可能使用到索引: <1> 对于创建的多列索引,只要查询条件使用了最坐边的列,索引一般就会被 ...

  3. 关于SQL优化的二十个小方法

    一.查询SQL尽量不要使用select *,而是具体字段 1.反例 SELECT * FROM user 2.正例 SELECT id,username,tel FROM user 3.理由 节省资源 ...

  4. 在机器学习中,怎么对超参数Hyper parameter优化?我总结了以下常见的方法

    @Author:Runsen 机器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数( ...

  5. Android性能优化(2):常见内存泄漏与优化(二)

    文章目录 1. Android虚拟机:Dalvik和ART 1.1 JVM与Dalvik区别 1.2 Dalvik与ART区别 1.3 Dalvik/ART的启动流程 2. 常见内存分析工具 2.1 ...

  6. 性能优化指南:性能优化的一般性原则与方法

    作为一个程序员,性能优化是常有的事情,不管是桌面应用还是web应用,不管是前端还是后端,不管是单点应用还是分布式系统.本文从以下几个方面来思考这个问题:性能优化的一般性原则,性能优化的层次,性能优化的 ...

  7. MongoDB 教程五: MongoDB固定集合和性能优化 (索引Indexes, 优化器, 慢查询profile)

    mongodb索引详解(Indexes) 索引介绍 索引在mongodb中被支持,如果没有索引,mongodb必须扫描每一个文档集合选择匹配的查询记录.这样扫描集合效率并不高,因为它需要mongod进 ...

  8. MySQL性能优化(二)

    1.MySQL基础操作一:MySQL基础操作1:MySQL表复制复制表结构 + 复制表数据create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样)ins ...

  9. CSDN问答标签技能树(二) —— 效果优化

    目录 系列文章 1. 问题背景 2. 技能树优化 2.1 技能树结构优化 2.1.1 知识覆盖率 2.1.2 等级体系 2.2 匹配算法效果优化 2.2.1 匹配算法的优化 2.2.2 预处理优化 2 ...

  10. 【学习笔记】产品经理必备技能之数据分析(二)常见数据分析方法(上)

    内容来自小破站<黑马程序员-产品经理必备技能之数据分析>复习自用 [学习笔记]产品经理必备技能之数据分析(二)常见数据分析方法(上) 3 常见数据分析方法 3.1 基础数据分析(日常工作) ...

最新文章

  1. Cucumber 入门一
  2. github创建一个新的tag
  3. php接收文件,如何通过php 发送与接收流文件
  4. springboot指定注解扫描范围
  5. 不服OceanBase跑分?今天起可到阿里云上一战
  6. WOOTConf 2017:Lockpicking,Willie Nelson开发人员等等
  7. 前端综合性文档和教程总结(持续更新)
  8. Ubuntu下映射串口设备到docker
  9. 【火炉炼AI】深度学习006-移花接木-用Keras迁移学习提升性能
  10. 机器学习初学者入门实践:怎样轻松创造高精度分类网络
  11. 机器学习python_深入浅出Python机器学习[PDF][176.39MB]
  12. OI造数据以及Lemon评测教程
  13. 基于PDF和JSPDF实现调整pdf文件大小功能
  14. 基金常用的分析指标:跟踪误差率、信息比率、夏普比率到底是什么意思?
  15. 电脑桌面上文件夹图标右上角有双箭头
  16. 华为服务器cpu位置,服务器cpu参数详解
  17. 概括TTL、RS32、RS485特点及区别
  18. Robot Toolbox (一):Puma机器人仿真
  19. Delphi XE5教程9:基本语法元素
  20. 英语美文阅读:当爱向你们挥手

热门文章

  1. 网站打开速度多少毫秒为正常_个人做shopify-怎么测试和优化网站打开速度
  2. 挑战程序设计竞赛_实力爆棚!2019年,华中科技大学拿下亚洲区竞赛金牌4枚!...
  3. html纵向的跑马灯效果,HTML+CSS入门 如何实现跑马灯/走马灯效果
  4. jekenis父子结构项目打包_maven 父子工程打包 并且上传linux服务器
  5. 系统接口对接的进度工作应该谁来干_第三方分账系统开发的那些坑,给你节省几十万...
  6. 升级 ubuntu_重要:Canonical 安全更新,请相关 Ubuntu 版本赶紧升级
  7. golang语言变量定义、打印、占位符
  8. eclipse配置本地连接 hadoop
  9. ios mysql 创建不同的用户表_iOS中数据库-创建表-增删改查数据-基础语法
  10. mysql id会用完吗_数据库自增ID用完了会怎样?