MongoDB Database Profiling

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

MongoDB Profiler是一个捕获数据库执行活动的系统,它可以帮助识别慢查询和操作。

 

Profiling级别



可用的捕获级别意义如下:


级别 设置

0 禁用

1 启用,只记录慢操作

2 启用,记录所有操作

 

查看Profiling级别


1
> db.getProfilingLevel()

 

启用Profiler


1
> db.setProfilingLevel(1)

完整命令为:

1
db.setProfilingLevel( level ,slowms)


当level为1的时候,慢操作的默认值为100ms,若指定慢操作为500ms:

1
> db.setProfilingLevel(1,500)

 

注意:

在默认情况下,mongod记录所有的慢查询(由showOpThresholdMs定义,默认值为100ms)到MongoDB日志文件中。

只在关键时候启用Profiling,尽量不要在生产环境启用它。

基于独立mongod实例启用Profiling。该设置将不会通过副本集或分片集群扩散到其他实例。

 

查看Profiler结果



使用的是system.profile 来记录,而system.profile 是一个capped collection。在你的数据库的system.profile集合,调用mongo shell命令show profile,或者查询system.profile集合可以查看Profiler的输出,如:

1
db.system.profile.find( { millis : { $gt : 1000 } } )

就可以输出,查询时间大于1秒的慢查询。

 

Profiler信息内容详解



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来获取的。

 

性能优化

 

尽管我们没有启用Profiler,但在生产环境中,我们查看日志文件仍可以看到大于100ms的慢操作。

1
tail  -f  /data/var/log/mongodb/mongod .log
1
Mon May 25 02:57:22.670 [conn756] query MyTest.Pro query: { $query: { CutePath: /^122-133-1456(-\d+)*$/, Avail.Status: { $lt: 5 }, $or: [ { _id: { $lt: 3310 } }, { _id: { $gt: 8520, $lt: 8530 } }, { _id: { $gt: 9720, $lt: 9730 } } ] }, $orderby: { Avail.Status: 1, AvgRate: -1 } } ntoreturn:200 ntoskip:0 nscanned:18764 scanAndOrder:1 keyUpdates:0 numYields: 10 locks(micros) r:217999 nreturned:200 reslen:563505 116ms


如果nscanned(扫描的记录数)远大于nreturned(返回结果的记录数)的话,那么我们就要考虑通过加索引来优化记录定位了。


reslen 如果过大,那么说明我们返回的结果集太大了,这时请查看find函数的第二个参数是否只写上了你需要的属性名。


对于创建索引的建议是:如果很少读,那么尽量不要添加索引,因为索引越多,写操作会越慢。如果读量很大,那么创建索引还是比较划算的。

 

参见:

http://docs.mongodb.org/manual/administration/analyzing-mongodb-performance/#database-profiling

http://docs.mongodb.org/master/MongoDB-crud-guide.pdf














本文转自UltraSQL51CTO博客,原文链接:http://blog.51cto.com/ultrasql/1654989 ,如需转载请自行联系原作者




相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL MongoDB
MongoDB Database Tools 安装实现备份、恢复
MongoDB Database Tools 安装实现备份、恢复
408 0
|
存储 NoSQL Unix
MongoDB(3)- Database 数据库相关
MongoDB(3)- Database 数据库相关
167 0
|
存储 运维 Kubernetes
上海·2020线上年会来了!| MongoDB,More than Document Database.
2020年MongoDB中文社区年终大会一起重新认识MongoDB!(2021-1-8 上海线下)
2545 0
上海·2020线上年会来了!| MongoDB,More than Document Database.
|
NoSQL 安全 网络协议
Mongodb - Security Weaknesses in a typical NoSQL database
Over the last year or so, I’ve noticed 2 ports appearing more frequently during internal penetration tests, namely 27017/tcp and 28017/tcp.
1079 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
20天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
21天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。