MongoDB的setProfilingLevel()函数
setProfilingLevel()
函数用于激活或关闭数据库的分析工具,通过记录查询请求的详细信息,可以分析数据库的性能瓶颈及资源消耗情况,以作出相应的优化措施。该函数可以设置三个不同的值:0表示关闭分析工具,1表示仅记录慢速操作,2表示记录所有请求。
使用方法
setProfilingLevel()
函数是在数据库中执行的。若要使用该函数,请先打开MongoDB shell并连接到您的数据库。
$ mongo
> use mydb
接下来,调用setProfilingLevel()
函数,并为其传递一个整数参数,该参数指定了要设置的分析级别。例如,要将分析级别设置为“记录所有请求”:
> db.setProfilingLevel(2)
要将分析级别设为“仅记录慢速操作”:
> db.setProfilingLevel(1)
要关闭分析工具:
> db.setProfilingLevel(0)
示例
示例1
假设我们要找出数据库中执行时间超过5毫秒的所有查询,我们可以首先开启分析工具并将分析级别设置为记录所有请求。然后我们可以使用find()
函数查询所有超时操作。
> db.setProfilingLevel(2)
> db.myCollection.find({}).forEach(function(doc){ printjson(doc); });
查询完成后,我们可以使用system.profile
集合来查看、分析查询的信息。例如,要查看查询耗时超过5毫秒的查询:
> db.system.profile.find({ millis : { $gt : 5 } }).sort( { ts : -1 } ).limit( 10 ).pretty()
示例2
假如我们想要找出一天中最消耗资源的请求,并进行分析和优化。我们首先将分析级别设置为记录所有请求,然后在24小时之内进行所以操作,比如给集合插入一些数据、删除一些数据等。
> db.setProfilingLevel(2)
> # 执行24小时内的所有操作
> db.myCollection.insert( ... )
> db.myCollection.remove(... )
然后,我们可以使用以下命令获取性能数据:
> db.system.profile.aggregate(
... [ { $match: { "op" : "query", "ts" : { $gte : new ISODate("2021-04-20T00:00:00Z") } } },
... { $group: { _id: "$ns", totalQueryCount: { $sum: 1 }, totalTime: { $sum: "$millis" } } },
... { $sort: { totalTime : -1 } },
... { $limit: 10 }
... ]
... ).pretty()
这将返回集合中查询请求次数最多且消耗时间最长的前10个命令和总时间。
总结
我们详细介绍了setProfilingLevel()
函数的作用和基本用法。使用该函数可以轻松地记录查询请求的详细信息,并根据这些信息进行性能优化。无论是小型还是大型项目,该函数都是至关重要的一项功能。