MongoDB集群性能优化

1、软件方面
  • MongoDB版本选择
  • 锁粒度
  • Global(2.2-)
  • DB锁(2.2+)
  • Collection(2.4+)
  • Document锁(2.6+)
  • 读写锁、写优先锁
  • 性能逐渐增强
  • 启发
    • 尽量选择新的稳定版本
      • 性能提升
      • 稳定
      • bugs fixed
索引创建 设计不合理长索引
  • 字符串等
id
  • objectid
  • 12字节
  • 应用程序替换
  • 月业务需要
  • uid
  • 灵活控制
索引设计过多索引使用不合理启发
  • 使用短索引
    • 小索引字段
    • 业务
    • 合理设计
数据量增大 热点数据超过内存频繁swap 导致性能地下 内存规划
  • 内存大于热门数据加上索引
启发
  • 加大内存容量
数据空洞 大量删除数据造成大量数据碎片和空间内存中包含空洞数据利用率低数据收缩
  • Online compact
  • offline收缩
  • 数据库无空洞、无碎片、进奏、性能较高
2、硬件方面
  • 物理内存小
  • 硬盘性能检查
    • 无法满足目前的读写并发
  • 优化方案
  • 加大内存容量
  • 硬件类型
    • SSD》SDS》SATA
3、如何尽快发现MongoDB集群性能问题
  • 监控的方式
  • 机器资源监控
    • CPU资源
      • 核心数
      • top
    • 内存资源
      • 内存使用和剩余情况
      • free -g
    • 磁盘资源
      • 磁盘空间
      • df -h
      • 性能
      • iostat -xdk 1
    • 网络资源
      • ifstat 1
    • 负载均衡
      • load average
      • <=总核数
    • 语义监控
      • 进程管理
      • 是否正常工作
      • 模拟发送请求
      • 预期结果对比
      • 如果持续返回错误表示性能有问题
    • 错误日志监控
      • 进程管理
      • 服务是否正常
      • 阈值设置1分钟
      • 基于日志的准实时统计
      • 如果超过阈值性能,数据集群可能出现问题
  • monostat
    • 读写情况、加锁、索引命中、缺页终端、读写
    • 监控分析
      • locked、faults、miss、qr|qw
      • 内存、内冷数据、索引设置不合理、qr|qw堆积
  • mongotop
    • 追踪mongodb读写所用时间
    • 表级性能问题
      • 表级读写时间
如何收缩数据提升性能 Online CompressOffline 收缩数据 如何Scale Up方式提升性能 概念
  • Scale Vertically
  • 纵向扩展
软件方面
  • 锁粒度问题
  • 索引优化
    • 更紧凑索引
  • 业务层优化
    • SQL语义优化
    • 批量读写优化
    • 连接池优化
如何Scale out方式提升性能 概念
  • Scale horizontally
  • 横向扩展,向外扩展
数据迁移
  • 增加一个新增副本集合
  • 更通用数据迁移方案
    • 时效性
      • 过去作废
      • 迁移简单
      • 业务开始写入,到时终止
    • 永久数据
      • 消息队列(写入命令进行回放)
      • 中间存储快照
集群优化集合 尽早发现
  • 机器监控报警
  • 语义控制报警
  • 错误日志报警
  • mongostat
  • mongotop
scale outscale up

你可能感兴趣的:(MongoDB)