MongoDB包含 数据库分析器,可以识别慢速查询并帮助您确定如何提高查询性能。
关于此任务
性能、存储和安全
此任务使用数据库分析器来识别运行的mongod
实例上的慢速查询。启用后,数据库分析器会影响性能和磁盘使用情况,并会暴露未加密的查询数据。
警告
在生产部署中使用数据库分析器之前,请考虑对性能、存储和安全的影响。
Atlas Query Profiler
Atlas用户可以利用Atlas查询分析器,通过图表的可视可视化,轻松识别慢速查询。
有关详细信息,请参阅 使用查询分析器监控查询性能。
慢查询
慢速查询是指运行时间超过指定时间的查询。对于此任务,慢速查询阈值设立为 100 毫秒。
在某些使用案例中,您可能需要更快地运行查询。在其他情况下,您可能需要提高阈值,以仅关注那些最慢的查询。
选择反映特定应用程序和数据库需求的慢查询阈值。
上下文
启用后,数据库分析器仅监控数据库级别的查询。如果需要分析器监控多个数据库上的慢速查询,请在每个数据库上运行db.setProfilingLevel()
方法。
分片集群
无法通过mongos
使用数据库分析器。
步骤
启用数据库分析器。
启用数据库分析器能够监控慢速查询,请使用db.setProfilingLevel()
方法:
db.setProfilingLevel(1, 100)
{ was: 0, slowms: 1, sampleRate: 1, ok: 1}
这会将分析级别设置为 1
,监控慢速查询,如果查询的运行时间超过 100 毫秒,则将其定义为慢速查询。
检查慢速查询。
要列出数据库分析器发现的所有慢速查询,查询system.profile
集合以获取相关数据:
db.system.profile.find( { }, { command: 1, millis: 1, docsExamined: 1, keysExamined: 1, nreturned: 1 } ).sort( { ts: -1 } )
[ { command: { find: 'people', filter: { age: { '$gt': 35 } }, lsid: { id: UUID('ae3e9932-0a78-47ab-b741-01dd3bfb3563') }, '$db': 'contacts' }, keysExamined: 0, docsExamined: 100000, nreturned: 40, millis: 143 } ]
该命令提供数据库分析器观察到的慢查询列表。
投影筛选返回文档以包含可能有助于确定查询运行缓慢的原因的信息。
解释该查询。
如果数据库分析器发现某个查询需要进一步调查,请使用explain()
方法分析查询计划和执行统计信息。
示例
Ignore Indexes
要评估带有索引的集合的性能,可以使用hint( {
$natural: 1 } )
方法将查询设立为忽略索引。
db.listingsAndReviews.find( { $or: [ { "address.market": "Berlin" }, { "review_scores.review_scores_cleanliness": { $lt: 5 } } ], $where: function () { return this.amenities && this.amenities.length > 15; } } ).sort( { description: 1 } ).hint( { $natural: 1 } );
如果您想要比较使用集合扫描和索引扫描的查询的执行情况,您可能会发现这很有用。