MongoDB如何查询耗时记录的方法详解

1. 背景

在使用MongoDB过程中,有时候我们需要查询某个操作或某个查询的耗时记录,以便于优化查询效率或者查找问题所在。本文将介绍如何在MongoDB中查询耗时记录。

2. 慢查询日志

2.1 慢查询日志介绍

慢查询日志是MongoDB提供的一种日志记录功能,可以记录指定时间内执行时间超过阈值的操作,帮助我们分析查询性能问题。

2.2 开启慢查询日志

我们可以通过设置MongoDB的配置文件来开启慢查询日志:

# 在mongod实例的配置文件中增加如下配置:

systemLog:

slowQueries:

threshold: 100

rotateEveryBytes: 1000000

以上配置表示,当某个操作的执行时间超过100毫秒时,就会被记录到慢查询日志中,同时每个文件大小为1MB时,就会切换到新文件。

3. 查询慢查询日志

3.1 查看慢查询日志路径

我们可以使用以下命令来查看MongoDB慢查询日志的路径:

db.adminCommand( { getParameter: 1, slowms: 1 } )

以上命令会返回慢查询日志的路径:

{

"slowms" : 100,

"ok" : 1,

"path" : "/data/db/mongod.log"

}

3.2 查看慢查询日志内容

我们可以使用以下命令来查看MongoDB的慢查询日志:

cat /data/db/mongod.log | grep "slow query"

以上命令会输出所有符合“slow query”的记录,也可以根据需要进行筛选。如下所示:

2021-01-01T01:00:11.500+0800 I COMMAND [conn1] command testdb.testc command: aggregate { aggregate: "testc", pipeline: [ { $match: { a: 1 } }, { $group: { _id: "$a", count: { $sum: 1 } } } ], cursor: {}, lsid: { id: UUID("d45a9b64-7b52-4757-813f-d8a381f9c451") }, $db: "testdb", $clusterTime: { clusterTime: Timestamp(1603586408, 1), signature: { hash: BinData(0, 0000000000000000000000000000000000000000), keyId: 0 } }, $readPreference: { mode: "primaryPreferred" } } planSummary: COLLSCAN keysExamined:0 docsExamined:36704 cursorExhausted:1 numYields:286 nreturned:1 reslen:154 locks:{ Global: { acquireCount: { r: 287 } }, Database: { acquireCount: { r: 287 } }, Collection: { acquireCount: { r: 287 } } } protocol:op_msg 1531ms

2021-01-01T01:00:31.500+0800 I QUERY [conn1] query testdb.testc query: { b: 1 } planSummary: COLLSCAN keysExamined:0 docsExamined:36704 cursorExhausted:1 numYields:286 nreturned:1 reslen:154 locks:{ Global: { acquireCount: { r: 287 } }, Database: { acquireCount: { r: 287 } }, Collection: { acquireCount: { r: 287 } } } protocol:op_msg 2547ms

以上内容是MongoDB慢查询日志的示例,其中包含以下信息:

时间戳:日志记录的时间。

日志级别:INFO、WARNING、ERROR等。

操作类型:COMMAND、QUERY等。

操作集合:执行操作的集合。

查询条件:执行操作的查询条件。

执行计划:查询所使用的索引或执行方式。

执行时间:操作的执行时间。

4. 总结

本文介绍了MongoDB中如何查询慢查询日志的方法,通过查看慢查询日志,我们可以找到执行时间较慢的查询操作,并对其进行优化。开启慢查询日志的过程非常简单,只需要在MongoDB的配置文件中添加相关配置即可。

数据库标签