前面的话

本文将详细介绍MongoDB数据库索引构建情况分析
概述
创建索引可以加快索引相关的查询,但是会增加磁盘空间的消耗,降低写入性能。这时,就需要评判当前索引的构建情况是否合理。有4种方法可以使用
1、mongostat工具
2、profile集合介绍
3、日志
4、explain分析
mongostat
mongostat是mongodb自带的状态检测工具,在命令行下使用。它会间隔固定时间获取mongodb的当前运行状态,并输出。如果发现数据库突然变慢或者有其他问题的话,首先就要考虑采用mongostat来查看mongo的状态
mongostat是查看mongodb运行状态的程序,使用方式如下
mongostat -h ip:port
【字段说明】
insert/s : 每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作 query/s : 每秒的查询操作次数 update/s : 每秒的更新操作次数 delete/s : 每秒的删除操作次数 getmore/s: 每秒查询cursor(游标)时的getmore操作数 command: 每秒执行的命令数,在主从系统中会显示两个值(例如 3|0),分别代表 本地|复制 命令 dirty: 脏数据字节的缓存百分比 used:正在使用中的缓存百分比 flushes:checkpoint的触发次数在一个轮询间隔期间。一般都是0,间断性会是1, 通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了 vsize: 虚拟内存使用量,单位MB res: 物理内存使用量,单位MB。 res会慢慢的上升,如果res经常突然下降,要查看下是否有别的程序狂吃内存 qr: 客户端等待从MongoDB实例读数据的队列长度 qw:客户端等待从MongoDB实例写入数据的队列长度 ar: 执行读操作的活跃客户端数量 aw: 执行写操作的活客户端数量。如果ar或aw数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。查看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了 netIn:MongoDB实例的网络进流量 netOut:MongoDB实例的网络出流量 conn: 打开连接的总数,是qr,qw,ar,aw的总和 time:当前时间
【实例】
插入100000条数据,并打开mongostat查询mongodb运行状态
由下图看出,插入值insert值在插入数据时大量增加,在插入完毕后变成0。flush两个1之间的间隔时间很长,说明性能还不错;res在慢慢上升,没有出现突然下降的情况,说明没有其他的程序大量占用内容的情况;qrw及arw数据很小,说明数据库读写状态正常,负载较小。总体而言,mongodb数据库运行状态良好
profile
mongodb可以通过profile来监控数据,进行优化
【级别】
首先,要查看当前是否开启profile功能
使用下面的命令会返回level等级,值为0|1|2,0代表关闭,即不记录任何操作;1代表记录慢命令(默认值为100ms),即记录运行时间超过100ms的操作;2代表全部,即记录任何操作
db.getProfilingLevel()
使用下面的命令可以设置level等级
db.setProfilingLevel()
如下图所示,默认地,profile关闭。使用setProfilingLevel()方法以50ms慢命令的方式开启profile
【状态】
操作被记录到system.profile集合中
通过db.system.profile.find() 查看当前的监控日志
op:操作类型 ns:命名空间 query:查询字符串 responseLength:返回长度 ts:时间 mills:执行耗时
【使用】
在系统中开启profile之后,如果profile记录的数据非常大,会比较明显的降低系统的性能。因此,profile的使用场景一般是新系统上线之前的测试阶段,以及刚上线时的观察阶段,查看数据库的设计及应用程序的使用是否正常。如果profile记录了大量的字段,需要调整系统附在、调整索引等,减小它的大小
日志
在配置日志文件时,可以使用verbose参数来配置日志详细程度,参数值从'v'到'vvvvv','v'越多,详细度越高
日志会记录mongodb的运行状态,包括连接时间、当前正在进行的操作等
explain
MongoDB 提供了一个 explain 命令让我们获知系统如何处理查询请求。利用 explain 命令,可以很好地观察系统如何使用索引来加快检索,同时可以针对性优化索引
explain有三种模式,分别是:queryPlanner、executionStats、allPlansExecution。现实开发中,常用的是executionStats模式
首先,插入10万条数据
在time字段上建立索引
接着,寻找time范围在100和200之间的文档,并使用explain()
结果分为queryPlanner、executionStats和serverInfo三个部分。接下来,将分别对这三个部分的结果进行详细分析
【queryPlanner】
queryPlanner.plannerVersion: 版本
queryPlanner.namespace: 查询的表
queryPlanner.indexFilterSet: 针对该query是否有indexfilter
queryPlanner.parsedQuery: 查询条件
queryPlanner.winningPlan: 查询优化器针对该query所返回的最优执行计划的详细内容
queryPlanner.winningPlan.stage: 最优执行计划的stage
queryPlanner.winningPlan.inputStage: 用来描述子stage,并且为其父stage提供文档和索引关键字。
queryPlanner.winningPlan.inputstage.stage,此处是IXSCAN,表示进行的是index scanning
queryPlanner.winningPlan.inputstage.keyPattern: 索引键值对
queryPlanner.winningPlan.inputstage.indexName:索引名称
queryPlanner.winningPlan.inputstage.isMultiKey: 是否是Multikey,此处返回是false,如果索引建立在array上,此处将是true
queryPlanner.winningPlan.inputstage.direction:查询顺序,此处是forward,如果用了.sort({time:-1})将显示backward
queryPlanner.winningPlan.inputstage.indexBounds: 所扫描的索引范围
queryPlanner.rejectedPlans:其他执行计划
【executionStats】
executionStats.executionSuccess: 是否成功
executionStats.nReturned: 查询返回条目个数
executionStats.totalKeysExamined: 索引扫描条目个数
executionStats.totalDocsExamined: 文档扫描条目个数
executionStats.executionStages.stage: 扫描类型
executionStats.executionTimeMillis: 整体查询时间
executionStats.executionStages.executionTimeMillisEstimate: 根据索引检索文档获得数据的时间
executionStats.executionStages.inputStage.executionTimeMillisEstimate: 扫描索引所用时间
【serverInfo】
serverInfo.host: 主机名
serverInfo.port: 端口
serverInfo.version: 版本
serverInfo.gitVersion: git版本
【性能分析】
1、执行时间
executionTimeMillis值越小越好
2、条目数量
最理想的状态是: nReturned=totalKeysExamined=totalDocsExamined
3、stage类型
stage的类型列举如下:
COLLSCAN:全表扫描 IXSCAN:索引扫描 FETCH:根据索引去检索指定document SHARD_MERGE:将各个分片返回数据进行merge SORT:表明在内存中进行了排序 LIMIT:使用limit限制返回数 SKIP:使用skip进行跳过 IDHACK:针对_id进行查询 SHARDING_FILTER:通过mongos对分片数据进行查询 COUNT:利用db.coll.explain().count()之类进行count运算 COUNTSCAN:count不使用Index进行count时的stage返回 COUNT_SCAN:count使用了Index进行count时的stage返回 SUBPLA:未使用到索引的$or查询的stage返回 TEXT:使用全文索引进行查询时候的stage返回 PROJECTION:限定返回字段时候stage的返回
不希望看到包含如下的stage:
COLLSCAN(全表扫描) SORT(使用sort但是无index) 不合理的SKIP SUBPLA(未用到index的$or) COUNTSCAN(不使用index进行count)
以上这篇基于MongoDB数据库索引构建情况全面分析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# mongodb数据库索引
# MongoDB索引使用详解
# MongoDB的基础查询和索引操作方法总结
# MongoDB性能篇之创建索引
# 组合索引
# 唯一索引
# 删除索引和explain执行计划
# MongoDB中创建索引需要注意的事项
# pymongo给mongodb创建索引的简单实现方法
# MongoDB查询字段没有创建索引导致的连接超时异常解案例分享
# MongoDB学习笔记(六) MongoDB索引用法和效率分析
# mongodb处理中文索引与查找字符串详解
# pymongo为mongodb数据库添加索引的方法
# MongoDB数据库中索引(index)详解
# Mongodb索引的优化
# MongoDB入门教程之索引操作浅析
# MongoDB教程之索引介绍
# MongoDB的索引
# MongoDB数据库中索引和explain的使用教程
# mongodb索引知识_动力节点Java学院整理
# MongoDB TTL索引的实例详解
# 关于MongoDB索引管理-索引的创建、查看、删除操作详解
# 运行状态
# 的是
# 客户端
# 文档
# 给大家
# 可以使用
# 最优
# 值为
# 使用量
# 都是
# 分片
# 很好
# 让我们
# 其他的
# 执行时间
# 可以通过
# 用了
# 希望能
# 将是
# 详细介绍
相关文章:
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
Swift中switch语句区间和元组模式匹配
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
,购物网站怎么盈利呢?
一键网站制作软件,义乌购一件代发流程?
赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?
网站图片在线制作软件,怎么在图片上做链接?
深入理解Android中的xmlns:tools属性
Python如何创建带属性的XML节点
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
jQuery 常见小例汇总
已有域名如何免费搭建网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
网站插件制作软件免费下载,网页视频怎么下到本地插件?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何在自有机房高效搭建专业网站?
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
代刷网站制作软件,别人代刷火车票靠谱吗?
宝塔面板创建网站无法访问?如何快速排查修复?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
Android使用GridView实现日历的简单功能
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
如何在阿里云服务器自主搭建网站?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
高端智能建站公司优选:品牌定制与SEO优化一站式服务
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何快速查询网站的真实建站时间?
如何在万网开始建站?分步指南解析
建站主机系统SEO优化与智能配置核心关键词操作指南
XML的“混合内容”是什么 怎么用DTD或XSD定义
网站制作报价单模板图片,小松挖机官方网站报价?
TestNG的testng.xml配置文件怎么写
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
建站168自助建站系统:快速模板定制与SEO优化指南
网站制作需要会哪些技术,建立一个网站要花费多少?
浅谈Javascript中的Label语句
如何通过智能用户系统一键生成高效建站方案?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
韩国服务器如何优化跨境访问实现高效连接?
公司网站制作价格怎么算,公司办个官网需要多少钱?
建站VPS配置与SEO优化指南:关键词排名提升策略
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
*请认真填写需求信息,我们会在24小时内与您取得联系。