MongoDB查询优化--explain,慢日志】的更多相关文章

引入 与Mysql数据库一样,MongoDB也有自己的查询优化工具,explain和慢日志 explain shell命令格式 db.collection.explain().<method(...)> 支持的method方法有: aggregate() count() find() remove() update() distinct() findAndModify() 例如: db.products.explain().remove( { category: "apparel&q…
背景     在分布式系统当中,我们有各种各样的WebService,这些服务可能分别部署在不同的服务器上,并且有各自的日志输出.为了方便对这些日志进行统一管理和分析.我们可以将日志统一输出到指定的数据库系统中,而再由日志分析系统去管理.而这个储存日志的数据库目前最适合的还是mongodb,一是因为它轻便.简单,与log4j整合方便,对系统的侵入性低.二是因为它与大型的关系型数据库相比有不少优势,比如查询快速.储存结构(json)利于扩展.免费等. log4j与mongodb整合 1.首先安装m…
前言 任何一种数据库都有各种各样的日志,MongoDB也不例外.MongoDB中有4种日志,分别是系统日志.Journal日志.oplog主从日志.慢查询日志等.这些日志记录着MongoDB数据库不同方面的踪迹.下面分别介绍这几种日志. 系统日志 系统日志在MongoDB数据库中很重要,它记录着MongoDB启动和停止的操作,以及服务器在运行过程中发生的任何异常信息. 配置系统日志的方法比较简单,在启动mongod时指定logpath参数即可 ? 1 mongod -logpath=/data/…
.在查询条件.排序条件.统计条件的字段上选择创建索引,可以显著提高查询效率. .用$or时把匹配最 多 结果的条件放在最前面,用$and时把匹配最 少 结果的条件放在最前面. .使用limit()限定返回结果集的大小,减少数据库服务器的资源消耗,以及网络传输的数据量. .尽量少用$in,而是分解成一个一个的单一查询.尤其是在分片上,$in会让你的查询去每一个分片上查一次,如果实在要用的话,先在每个分片上建索引. .尽量不用模糊匹配查询,用其它精确匹配查询代替,比如$in.$nin. .查询量大.…
摘要: 在MySQL中,慢查询日志是经常作为我们优化查询的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是开启Profiling功能.该工具在运行的实例上收集有关MongoDB的写操作,游标,数据库命令等,可以在数据库级别开启该工具,也可以在实例级别开启.该工具会把收集到的所有都写入到system.profile集合中,该集合是一个capped collection.更多的信息见:http://docs.mongodb.org/manual/tutorial/manage-th…
1. 按日志级别区分文件输出 有些人习惯按日志信息级别输出到不同名称的文件中,如info.log,error.log,warn.log等,在log4j2中可通过配置Filters来实现. 假定需求是把INFO及以下级别的信息输出到info.log,WARN和ERROR级别的信息输出到error.log,FATAL级别输出到fatal.log,配置文件如下: <Configuration status="WARN" monitorInterval="300"&g…
        我们平台过一段时间就会把生产数据库的慢查询导出来分析,要嘛修改写法,要嘛新增索引.以下是一些笔记.总结整理 慢查询排查         show status;  // 查询mysql数据库的一些运行状态         show status like 'uptime'; // 查看mysql数据库启动多长时间,myisam存储引擎长时间启动需要进行碎片整理         查看慢查询         show status like 'slow_queries';      …
一.索引基础索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更快.MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询优化技巧.下面是创建索引的命令:db.user.ensureIndex({"username":1}) 获取当前集合的索引:db.user.getIndexes() 删除索引的命令是:db.user.dropIndex({"username":1}) 在 MongoDB 中,我们同样可以创建复…
项目场景:Mongo在首次查询特慢,后面就好的.如果长时间不查询,下次开始的第一次又将非常慢,于是从链接当时多方面,排查最终发现还是mongo索引建的有问题. MongoDB在大批量数据查询时经常会遇到查询耗时长,通常情况采用建各种索引来优化. 首先第一步排查,可以在查询后使用.explain()来查看查询数据轨迹,便于分析每个分片的查询索引. db.Collection.find({}).explain() 查看索引,如果不位可以根据查询条件,新建索引. 1.查询索引 db.COLLECTIO…
开启慢查询Profiling Profiling级别说明 0:关闭,不收集任何数据. 1:收集慢查询数据,默认是100毫秒. 2:收集所有数据 1.通过修改配置文件开启Profiling 修改启动mongo.conf,插入以下代码 #开启慢查询,200毫秒的记录 profile = 1 slowms = 200 2.在启动mongodb服务以后,通过mongoshell来进行临时性打开启,只要关闭了mongodb服务,下次开启就不会启动,还得再开一次 (1).在mongodb有权限的情况下,通过…