[MongoDB]当'profile'为2时,哪些操作将保存在system.profile集合中?

时间:2012-09-12 03:03:53

标签: mongodb

今天我想测试这两个参数“profile”和“slowms”。以下是我的案例:

profile为1,slowms为200

  1. > ./ mongod --dbpath / data / db --fork --profile 1 --slowms 200
  2. 执行查询,此查询的费用为415毫秒
  3. 日志文件有相关的操作消息,system.profile也有相关的文件
  4. 再次进行查询,此查询费用为110毫秒
  5. 日志文件没有相关的操作消息,system.profile没有相关的文件
  6. 更新这两个参数“profile”和“slowms”

    个人资料为2,慢速度为200

    1. > ./ mongod --dbpath / data / db --fork --profile 2 --slowms 200
    2. 执行查询,此查询费用为410毫秒
    3. 日志文件有相关的操作消息,system.profile也有相关的文件
    4. 再次进行查询,此查询费用为100毫秒
    5. 日志文件没有相关的操作消息,system.profile没有相关的文件
    6. 当参数“profile”为2时,为什么日志文件和system.profile没有相关信息?谢谢!

1 个答案:

答案 0 :(得分:1)

所有慢速查询都会写入mongod日志。默认slowms值为100毫秒。

MongoDB profiling levels允许将其他信息写入数据库的system.profile上限集合。

分析级别为:

0 - off
1 - write slow operations 
    to the system.profile collection
2 - write all operations to the system.profile collection

如果将概要分析级别作为命令行或配置文件参数传递,则它们会影响所有数据库的缺省值。您还可以使用db.setProfilingLevel(..) shell中的db.getProfilingLevel(..)mongo来设置或获取每个数据库的分析级别。

所以对你的第一次测试:

  1. ./ mongod --dbpath / data / db --fork --profile 1 --slowms 200
  2. 执行查询,此查询的费用为415毫秒
  3. 日志文件有相关的操作消息,system.profile也有相关的文件
  4. 再次进行查询,此查询费用为110毫秒
  5. 日志文件没有相关的操作消息,system.profile没有相关的文档更新,因为你有
  6. 这是预期结果,您的分析设置为1,慢速为200ms:

    • 您的慢查询(415ms> 200ms)正在记录到system.profile以及日志文件
    • 第二个查询(110毫秒<200毫秒)不被视为慢查询,因此未记录或保存在system.profile中

    进行第二次测试:

    1. &gt; ./ mongod --dbpath / data / db --fork --profile 2 --slowms 200
    2. 执行查询,此查询费用为410毫秒
    3. 日志文件有相关的操作消息,system.profile也有相关的文件
    4. 再次进行查询,此查询费用为100毫秒
    5. 日志文件没有相关的操作信息,system.profile没有相关的文件

      • 您的慢速查询正在记录到
      • 第二个查询速度不慢,但仍会以systemiling level 2的形式记录到system.profile
    6. 请注意,如果分析级别为2,您将在system.profile中收集更多条目。 find()的默认顺序将从最旧到最新,因此如果要查看给定集合的最新查询,则需要按相反的自然顺序排序。

      例如,要查找people数据库中test集合的最后一个查询,您可以搜索test.people命名空间,类似于:

      db.system.profile.find({'ns':'test.people'}).sort({$natural:-1}).limit(1)