• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. mongostat
  2. 2. profile集合
  3. 3. mongoDB的日志
  4. 4. explain分析

3.3、索引构建情况分析

2018-01-04 19:16:06
总字数 1.1k
预计阅读时间 3 分钟

索引本身可以提高查询的效率
但是数据库要维护索引 , 需要额外的磁盘空间占用 , 并且写入的性能也会下降

要评判数据库当中的索引构建情况
常用的有下列4种方式

  1. mongostat工具
  2. profile集合
  3. mongoDB自身的日志
  4. explain分析

mongostat

这是mongoDB自带的一个工具 , 可以查看mongoDB的运行状态

在mongoDB的安装目录\bin当中 , 有一个名为mongostat.exe的程序 , 将bin路径加入到环境变量之后 , 就可以直接在控制台运行该程序

使用方式
mongostat -h <IP地址>:<端口号>
例如
mongostat -h 127.0.0.1:27017

这是一个针对mongoDB的综合监控程序
每秒根据各项指标进行采样
其中常用的各项指标的含义 ( 均是以每秒为单位 )

  • inserts - 写入数据的次数
  • query - 查询数据的次数
  • update - 更新数据的次数
  • delete - 删除数据的次数
  • getmore - 当查询的数据量较大时 , 为了防止内存溢出 , 并不会一次返回所有的数据 , 而是分批返回 , 获取下一批的数据执行的是getmore
  • command - 执行命令的数量
  • flushed - 将内存中的数据写入到硬盘的次数
  • vsize - 虚拟内存使用量,单位MB
  • res - 物理内存使用量,单位MB
  • faults/s - 访问失败数(只有Linux有),数据被交换出物理内存,放到swap。不要超过100,否则就是机器内存太小,造成频繁swap写入。此时要升级内存或者扩展
  • ids miss - 查询没有命中索引的比例 ( 如果太高的话可能是创建了不合理的索引或者索引的数量不够 , 是一个潜在隐患 , 数据量过大就可能出现性能问题 )
  • qr | qw - 读队列/写队列 , 如果值较高的话就代表读写的负载比较高 , 可能出现性能问题
  • ar | aw - 当前活跃的客户端的数量
  • conn - 连接数量

profile集合

在mongoDB当中存在一个记录读写操作日志的集合
使用db.getProfilingLevel()可以获得当前的记录级别

  • 0 关闭 , 不做任何记录
  • 1 开启 , 有慢查询的时候记录
  • 2 开启 , 记录所有内容

默认是0 , 可以使用db.setProfilingLevel(1)开启慢查询的记录
从而通过分析这个集合当中的数据
有针对性的通过创建所以解决慢查询的问题

也可以在配置文件中配置profile=1来进行默认开启
slowms参数表示慢查询的毫秒数 , 查询所用的时间超过这个值的就是慢查询 , 默认是100

由于向profile当中写入数据本身也是占用性能的 , 尤其是这个集合当中内容较多的情况下
所以这种方式的应用场景通常是在开发和测试阶段

mongoDB的日志

在1.1的mongoDB安装配置步骤当中 , 第三步是创建windows服务以方便使用
并且配置了数据库所在路径和日志所在路径
这个服务实际是执行了mongod命令来启动数据库
并且传递了dbpath和logpath两个参数用来指定数据的存储位置和日志的写入路径

我们也可以在本地创建一个配置文件( 通常是conf格式 )来配置这些参数 , 从而方便进行配置的修改
mongod --config "配置文件路径" --install --serviceName "MongoDB"
配置文件内容的写法与.properties文件相同
其中常用的配置项有

  • dbpath - 数据目录
  • port - 服务器监听的端口 , 默认是27017
  • fork - (true/false) 是否以守护进程方式运行
  • logpath - 日志输出路径
  • verbose - (v~vvvvv) 日志信息冗余级别 , v越多详细度越高
  • bind_ip - 绑定的IP地址 , 绑定以后只能通过该IP与数据库连接 ( 多个IP用逗号分隔 )
  • maxConns - 最大连接数

explain分析

用法 : 在find函数的返回结果上调用explain()
这个函数会返回这次查询的相关信息用于分析

  • 数据库
  • MongoDB
  • 索引
  • MongoDB

扫一扫,分享到微信

Hexo搭建个人博客
3.2.1、GeoJSON 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆