Docs 菜单
Docs 主页
/
数据库手册
/ / / / /

查找慢速查询

MongoDB包含 数据库分析器,可以识别慢速查询并帮助您确定如何提高查询性能。

此任务使用数据库分析器来识别运行的mongod 实例上的慢速查询。启用后,数据库分析器会影响性能和磁盘使用情况,并会暴露未加密的查询数据。

警告

在生产部署中使用数据库分析器之前,请考虑对性能、存储和安全的影响。

Atlas用户可以利用Atlas查询分析器,通过图表的可视可视化,轻松识别慢速查询。

有关详细信息,请参阅 使用查询分析器监控查询性能。

慢速查询是指运行时间超过指定时间的查询。对于此任务,慢速查询阈值设立为 100 毫秒。

在某些使用案例中,您可能需要更快地运行查询。在其他情况下,您可能需要提高阈值,以仅关注那些最慢的查询。

选择反映特定应用程序和数据库需求的慢查询阈值。

启用后,数据库分析器仅监控数据库级别的查询。如果需要分析器监控多个数据库上的慢速查询,请在每个数据库上运行db.setProfilingLevel() 方法。

无法通过mongos使用数据库分析器。

1

启用数据库分析器能够监控慢速查询,请使用db.setProfilingLevel() 方法:

db.setProfilingLevel(1, 100)
{ was: 0, slowms: 1, sampleRate: 1, ok: 1}

这会将分析级别设置为 1,监控慢速查询,如果查询的运行时间超过 100 毫秒,则将其定义为慢速查询。

2

要列出数据库分析器发现的所有慢速查询,查询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
}
]

该命令提供数据库分析器观察到的慢查询列表。

投影筛选返回文档以包含可能有助于确定查询运行缓慢的原因的信息。

  • 如果keysExamined0 ,则表示查询未使用索引。要解决此问题,请在集合上创建索引。

  • 如果使用了索引并且 docsExamined 远大于 nreturned,则表明索引无效。您可能需要更新索引或在查询过滤使用的一个或多个字段上创建新索引。

  • 如果 keysExamined 为高且 docsExamined 为低,则表示索引使用有效。

3

如果数据库分析器发现某个查询需要进一步调查,请使用explain() 方法分析查询计划和执行统计信息。

有关详细信息,请参阅解释慢查询。

4

为确保数据库分析器不会进一步扰乱性能,请在不再需要时将其禁用:

db.setProfilingLevel(0)
{ was: 1, slowms: 1, sampleRate: 1, ok: 1}

要评估带有索引的集合的性能,可以使用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 } );

如果您想要比较使用集合扫描和索引扫描的查询的执行情况,您可能会发现这很有用。

后退

输出

在此页面上