在MySQL中,慢查询日志是经常作为我们优化数据库的依据,那在MongoDB中是否有类似的功能呢?答案是肯定的,那就是Mongo Database Profiler.不仅有,而且还有一些比MySQL的Slow Query Log更详细的信息。它就是我们这篇文章的主题。
开启 Profiling 功能
有两种方式可以控制 Profiling 的开关和级别,第一种是直接在启动参数里直接进行设置。
启动MongoDB时加上–profile=级别 即可。
也可以在客户端调用db.setProfilingLevel(级别) 命令来实时配置。可以通过db.getProfilingLevel()命令来获取当前的Profile级别。
> db.setProfilingLevel(2); {"was" : 0 , "ok" : 1} > db.getProfilingLevel() |
上面斜体的级别可以取0,1,2 三个值,他们表示的意义如下:
0 – 不开启
1 – 记录慢命令 (默认为>100ms)
2 – 记录所有命令
Profile 记录在级别1时会记录慢命令,那么这个慢的定义是什么?上面我们说到其默认为100ms,当然有默认就有设置,其设置方法和级别一样有两种,一种是通过添加–slowms启动参数配置。第二种是调用db.setProfilingLevel时加上第二个参数:
db.setProfilingLevel( level , slowms ) db.setProfilingLevel( 1 , 10 ); |
查询 Profiling 记录
与MySQL的慢查询日志不同,Mongo Profile 记录是直接存在系统db里的,记录位置 system.profile ,所以,我们只要查询这个Collection的记录就可以获取到我们的 Profile 记录了。
> db.system.profile.find() {"ts" : "Thu Jan 29 2009 15:19:32 GMT-0500 (EST)" , "info" : "query test.$cmd ntoreturn:1 reslen:66 nscanned:0 query: { profile: 2 } nreturned:1 bytes:50" , "millis" : 0} db.system.profile.find( { info: /test.foo/ } ) {"ts" : "Thu Jan 29 2009 15:19:40 GMT-0500 (EST)" , "info" : "insert test.foo" , "millis" : 0} {"ts" : "Thu Jan 29 2009 15:19:42 GMT-0500 (EST)" , "info" : "insert test.foo" , "millis" : 0} {"ts" : "Thu Jan 29 2009 15:19:45 GMT-0500 (EST)" , "info" : "query test.foo ntoreturn:0 reslen:102 nscanned:2 query: {} nreturned:2 bytes:86" , "millis" : 0} {"ts" : "Thu Jan 29 2009 15:21:17 GMT-0500 (EST)" , "info" : "query test.foo ntoreturn:0 reslen:36 nscanned:2 query: { $not: { x: 2 } } nreturned:0 bytes:20" , "millis" : 0} {"ts" : "Thu Jan 29 2009 15:21:27 GMT-0500 (EST)" , "info" : "query test.foo ntoreturn:0 exception bytes:53" , "millis" : 88} |
列出执行时间长于某一限度(5ms)的 Profile 记录:
> db.system.profile.find( { millis : { $gt : 5 } } ) {"ts" : "Thu Jan 29 2009 15:21:27 GMT-0500 (EST)" , "info" : "query test.foo ntoreturn:0 exception bytes:53" , "millis" : 88} |
查看最新的 Profile 记录:
db.system.profile.find().sort({$natural:-1})
Mongo Shell 还提供了一个比较简洁的命令show profile,可列出最近5条执行时间超过1ms的 Profile 记录。
Profile 信息内容详解:
ts-该命令在何时执行.
millis Time-该命令执行耗时,以毫秒记.
info-本命令的详细信息.
query-表明这是一个query查询操作.
ntoreturn-本次查询客户端要求返回的记录数.比如, findOne()命令执行时 ntoreturn 为 1.有limit(n) 条件时ntoreturn为n.
query-具体的查询条件(如x>3).
nscanned-本次查询扫描的记录数.
reslen-返回结果集的大小.
nreturned-本次查询实际返回的结果集.
update-表明这是一个update更新操作.
fastmod-Indicates a fast modify operation. See Updates. These operations are normally quite fast.
fastmodinsert – indicates a fast modify operation that performed an upsert.
upsert-表明update的upsert参数为true.此参数的功能是如果update的记录不存在,则用update的条件insert一条记录.
moved-表明本次update是否移动了硬盘上的数据,如果新记录比原记录短,通常不会移动当前记录,如果新记录比原记录长,那么可能会移动记录到其它位置,这时候会导致相关索引的更新.磁盘操作更多,加上索引更新,会使得这样的操作比较慢.
insert-这是一个insert插入操作.
getmore-这是一个getmore 操作,getmore通常发生在结果集比较大的查询时,第一个query返回了部分结果,后续的结果是通过getmore来获取的。
MongoDB 查询优化
如果nscanned(扫描的记录数)远大于nreturned(返回结果的记录数)的话,那么我们就要考虑通过加索引来优化记录定位了。
reslen 如果过大,那么说明我们返回的结果集太大了,这时请查看find函数的第二个参数是否只写上了你需要的属性名。(类似 于MySQL中不要总是select *)
对于创建索引的建议是:如果很少读,那么尽量不要添加索引,因为索引越多,写操作会越慢。如果读量很大,那么创建索引还是比较划算的。(和RDBMS一样,貌似是废话 -_-!!)
MongoDB 更新优化
如果写查询量或者update量过大的话,多加索引是会有好处的。以及~~~~(省略N字,和RDBMS差不多的道理)
Use fast modify operations when possible (and usually with these, an index). See Updates.
Profiler 的效率
Profiling 功能肯定是会影响效率的,但是不太严重,原因是他使用的是system.profile 来记录,而system.profile 是一个capped collection 这种collection 在操作上有一些限制和特点,但是效率更高。
分享到:
相关推荐
MongoDB的慢日志查询,或称为Database Profiler,是一个非常重要的工具,它允许开发者和数据库管理员监控并分析性能瓶颈,以优化数据库操作。在MySQL等关系型数据库中,慢查询日志同样起到了关键作用,而在NoSQL的...
6. 分析器:MongoDB 数据库分析器显示的是针对数据库的每个操作的性能特征,如果使用 profiler 查询时,速度比实际速度慢。 7. 移动 moveChunk 目录下的旧文件:可以移动 moveChunk 目录中的旧文件,在正常的碎片...
knowledge point 9: Profiler 在 MongoDB 中的作用 * MongoDB 数据库分析器显示针对数据库的每个操作的性能特征 * 您可以使用探查器找到比其慢的查询 knowledge point 10: 将旧文件移动到 moveChunk 目录中 * 是...
本项目是一个基于Java源码的SSM框架房屋租赁系统,旨在为房屋租赁市场提供一个便捷、高效、安全的管理平台。系统主要功能包括房屋信息管理、租赁合同管理、租金收取管理、租客信息管理等。通过该系统,房东可以轻松发布房屋信息,管理租赁合同和租金收取,而租客则可以方便地查找合适的房源,提交租赁申请,签订电子合同,并进行租金支付。系统采用SSM框架(Spring、Spring MVC、MyBatis)进行开发,确保了系统的稳定性和扩展性。Spring框架负责依赖注入和业务逻辑管理,Spring MVC处理前端请求和页面展示,MyBatis则用于数据库操作。项目还集成了权限管理、日志记录等模块,提升了系统的安全性和可维护性。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。
MDM Bypasser Tool激活锁并保存数据工具 绕过 iPhone 上的 iCloud 激活锁并保存您的数据。
OC-Dialect线上多语言(多列表) 3.SDK每个方法解析
内容概要:本文档围绕数学实验的MATLAB应用进行了详细介绍,涵盖了基本的四则运算、含有三角函数和指数函数的复杂运算、向量及其多种类型的运算方法(包括数乘、加减及点积计算)、不同方式实现的数的阶乘(普通脚本函数、递归函数以及直接利用MATLAB内置函数)和矩阵的基本及高级运算等多个方面的内容。每个部分都有25道练习题目帮助理解。 适合人群:面向对MATLAB感兴趣的学习者和有一定编程基础的研究者。 使用场景及目标:通过一系列具体的数学实验和编程训练,加深对于MATLAB这一强大科学计算工具的认识与掌握程度,能够灵活运用各种基本函数解决实际问题。 阅读建议:随着教程逐步深入,读者应在电脑上跟随指南亲自操作,以便更好地理解决定思路与具体步骤,将理论转化为实操能力。
本项目是一个基于Java源码的SSM框架汽车在线销售系统,旨在为汽车销售行业提供一个便捷、高效的在线交易平台。系统采用了Spring、Spring MVC和MyBatis三大框架技术,实现了前后端的分离与高效交互,确保了系统的稳定性和可扩展性。主要功能包括用户注册与登录、汽车信息展示、在线购车、订单管理、支付系统以及客户服务等。用户可以通过系统浏览各类汽车信息,进行在线咨询和购买,系统提供了详细的车型介绍、价格以及用户评价等信息,帮助用户做出更为明智的购车决策。订单管理模块允许用户查看和管理自己的购车订单,支付系统则支持多种支付方式,确保交易的安全与便捷。项目为完整毕设源码,先看项目演示,希望对需要的同学有帮助。
内容概要:本文围绕小学数学课程采用游戏教学法存在的若干问题展开讨论。作者详细列举了游戏内容偏离教学目标、游戏设计创新不足、游戏时间和难度不合理及选材不合适等问题,随后针对这些问题从学校管理、教师自主设计游戏、游戏规则制定及优化等多个维度提出了切实可行的解决策略。 适用人群:小学教师、教研员、教育行政管理人员。 使用场景及目标:适用于希望通过改进游戏化教学提升学生学习兴趣和效果的小学数学教育工作者,旨在解决现行小学数学游戏中遇到的具体难题。 其他说明:该文章不仅指出了当下小学数学游戏教学中普遍存在的缺陷,同时也为教育从业者提供了科学合理的改进思路与操作指南,对于推动数学游戏化教学的发展具有积极的意义。
内容概要:本文探讨了两个无约束优化问题及其相关数值实验。首先讨论了一阶反应动力学的参数估计问题,涉及线性常微分方程组的解及其与实验数据的最佳拟合。其次,详细分析了一个复杂的无约束优化问题,提供了多种求解方法(基本牛顿法、信赖域法、拟牛顿法)的结果和比较,旨在评估不同算法的性能。最后,作者对实验过程中遇到的问题及解决方案进行了总结,并分享了对无约束最优化算法的理解。 适用人群:适用于化学工程、数学建模和优化领域的研究人员及学生。 使用场景及目标:用于理解和应用各种无约束优化算法,提高科研工作者和学生的算法选择能力和实际操作经验。 其他说明:文中引用了多部权威教材和技术手册,如《数学规划基础》和《非线性规划:概念、算法及化工过程的应用》,为理论背景提供了可靠依据。此外,还提供了详细的数值实验步骤和算法实现细节,便于读者复现和深入研究。
2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html【带音效】 效果演示https://www.lmtaolu.cn/biaobai/xkyanhua/ 跨年烟花代码html编程【过年放烟花特效代码+带音效】 新年烟花代码(纯js和html)可以随时嵌入项目的新年烟花代码,复制即可运行。 2024跨年烟花代码html/烟花代码大全html/跨年烟花源代码html【带音效】
第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码.zip,基于以上任务,我选择使用3个openart mini来解决。其中art1摄像头负责A4坐标纸的识别以及图像分类任务;art2负责校准车的位置;art3负责无框卡片的搜寻。任务的不同,三个art的位置和镜头也有所不同。art1位置最低,使得A4纸点坐标识别特别精准;同时art1镜头装配偏振片,减少因为比赛场地出现强光对图像分类造成影响;art2位置最高同时使用广角镜头,目的是增大视野范围,即使车的定位比较偏也足矣找到卡片并进一步校准;art3使用130°大角度镜头,同时倾斜放置,增大视野范围,能够以最快速度遍历全图。下面将详细讲解各个任务的实现细节。 第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明.zip第十八届全国大学生智能汽车竞赛 智能视觉组比赛 视觉任务源代码+说明
欧姆龙CP1H+CIF11与施耐德ATV变频器通讯程序 功能:原创程序,可直接用于现场程序。 欧姆龙CP1H的CIF11通讯板,实现对施耐德ATV12变频器 设定频率,读取实际频率,变频器状态功能。 反应灵敏,通讯稳定可靠。 非常灵活方便。 同时解决了施耐德变频器断电重启后,自准备过程,无需人为再准备。 器件:欧姆龙CP1H,CP1W CIF11串口网关板,1台施耐德ATV12变频器,昆仑通态TPC7062KD触摸屏。 说明:是程序,带注释,带变频器手册,接线,参数设置都提供。 通讯稳定可靠,实用有效。
内容概要:本文档详细介绍了教育技术学2021级《Web应用开发》课程期末考查的作品要求,主要涉及创建一个具有教育功能的动态网站,涵盖项目结构设计、用户界面展示、登录管理、用户和内容管理、日志记录等多个方面,以及详细的评分标准。 适合人群:针对教育技术学2021级的学生,尤其是修读《Web应用开发》课程的同学。 使用场景及目标:用于指导学生进行课程项目的选题与开发,确保项目符合教学目标和评分标准,最终完成高质量的作品并获得好的成绩。 阅读建议:仔细阅读每一条要求和评分细则,结合个人兴趣选定独特的教育主题,在规定的时间节点完成各项开发任务,并严格按照规范打包提交。建议边开发边测试,及时发现并解决问题。
通用verilog串口控制器: 1.无奇偶校验,通过高低温等实验稳定运行,可靠性强,方便移植。 2.提供整体工程,仿真,提供。
ST traction inverter
1. 用户管理 用户注册与登录:支持学生、教师及管理员通过邮箱或身份证号码注册和登录。 角色权限管理:根据用户类型(如学生、教师、管理员)设置不同的权限,确保信息安全与隐私保护。 2. 考试信息管理 考试安排管理:管理员可以创建、修改和删除考试安排,包括考试时间、地点、科目等信息。 考生信息录入:记录每位考生的基本信息,如姓名、学号、班级、联系方式等。 3. 考试报名 在线报名系统:学生可以在线选择所需报考的科目并进行报名,系统实时更新可用名额。 报名状态查询:学生可以查看自己的报名状态,包括已报名、待审核、审核通过等信息。 4. 考试资源管理 试题库管理:系统支持上传、编辑和分类各种类型的试题,方便后续调取与使用。 试卷生成:根据设定的规则和标准,从试题库中自动生成试卷,并生成PDF文件供打印。 5. 考试监控与管理 考场安排:管理员可以根据考生人数和考场数量合理安排考场,并分配监考老师。 监考记录:监考人员可在系统上记录考生的出勤情况以及考试中的违规行为。 6. 成绩管理 成绩录入:教师可在系统内录入考生的考试成绩,支持批量导入和手动输入。 成绩查询:学生可随时查询个人的考试成绩,
内容概要:该文档详细讲解了HTTP协议的概念以及其实现方式,包括HTTP协议的基本构成(GET/POST请求方法的区别、响应代码解读),并通过实验的形式探讨HTTP无状态特性以及cookie和session的作用和原理。通过具体实验步骤引导读者掌握HTTP Cookie, session, Authorization(授权)和cache(高速缓存)的知识点。此外,文档还通过实例讲解了HTTP响应的不同部分(Date, Content-Length, Content-Type等首部含义)。 适合人群:适用于希望深入了解和掌握HTTP协议的高年级本科生或者IT行业的技术人员。 使用场景及目标:通过实际的操作,帮助学习者更加直观地理解HTTP协议的工作机制,加深理论知识的理解,能够更好地应用于网络应用程序的设计与优化。 其他说明:为了达到最好的学习效果,推荐结合Wireshark软件来捕捉和分析网络流量,以实践验证理论知识点。在实验过程中,可以重点关注不同请求与响应之间的关系及其背后的机制。
rabinovich_3dj_01_230116
本项目是一个基于微信小程序的在线投稿系统,旨在为校园内的学生、教师及外部作者提供一个便捷、高效的投稿平台。系统主要功能包括用户注册与登录、稿件提交、稿件审核、通知反馈以及作者后台管理等。用户可以通过小程序界面直接提交稿件,包括文本、图片和附件等形式,系统后台会对提交的内容进行审核,审核结果将通过微信通知及时反馈给作者。此外,管理员可以在后台管理系统中查看所有提交的稿件,并进行审核操作,确保稿件质量。 项目采用前后端分离的开发模式,前端使用微信小程序原生框架,确保良好的用户体验和流畅的操作。后端采用Node.js搭建,使用Express框架处理业务逻辑,数据库则使用MongoDB存储用户数据和稿件信息。项目的开发不仅提升了校园内外的投稿效率,也为学生提供了一个实践技术、锻炼能力的平台。