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的配置文件中添加相关配置即可。