所有慢查询都写入 mongod 日志。默认slowms
值为 100 毫秒。
MongoDB分析级别允许将附加信息写入数据库的 system.profile 上限集合。
分析级别是:
0 - off
1 - write slow operations
to the system.profile collection
2 - write all operations to the system.profile collection
如果您将分析级别作为命令行或配置文件参数传递,它们会影响所有数据库的默认值。您还可以在shell 中使用db.setProfilingLevel(..)
and来设置或获取每个数据库的分析级别。db.getProfilingLevel(..)
mongo
因此,对于您的第一次测试:
- ./mongod --dbpath /data/db --fork --profile 1 --slowms 200
- 做一个查询,这个查询花费了 415 毫秒
- log文件有相关操作信息,system.profile也有相关文件
- 再次进行查询,此查询花费了 110 毫秒
- log文件没有相关的操作信息,system.profile没有相关的文件更新,因为你有
这是您的分析设置为 1 且慢速为 200 毫秒时的预期结果:
- 您的慢查询(415ms > 200ms)正在记录到 system.profile 以及日志文件
- 第二个查询(110ms < 200ms)不被视为慢查询,因此不会记录或保存在 system.profile
对于您的第二次测试:
- >./mongod --dbpath /data/db --fork --profile 2 --slowms 200
- 做一个查询,这个查询花费了 410 毫秒
- log文件有相关操作信息,system.profile也有相关文件
- 再次进行查询,此查询花费了 100 毫秒
log文件无相关操作信息,system.profile无相关文件
- 您的慢查询正在记录到两者
- 第二个查询并不慢,但仍将作为分析级别 2 记录到 system.profile
请注意,配置级别为 2 时,您将在 system.profile 中收集更多条目。find() 的默认顺序是从最旧到最新,因此如果您想查看给定集合的最新查询,您需要按逆自然顺序排序。
例如,要查找数据库中people
集合的最后一个查询test
,您可以在test.people
命名空间上进行搜索,类似于:
db.system.profile.find({'ns':'test.people'}).sort({$natural:-1}).limit(1)