0

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

profile 是 1,slowms 是 200

  1. >./mongod --dbpath /data/db --fork --profile 1 --slowms 200
  2. 做一个查询,这个查询花费了 415 毫秒
  3. log文件有相关操作信息,system.profile也有相关文件
  4. 再次进行查询,此查询花费了 110 毫秒
  5. log文件无相关操作信息,system.profile无相关文件

更新这两个参数“profile”和“slowms”

profile 是 2,slowms 是 200

  1. >./mongod --dbpath /data/db --fork --profile 2 --slowms 200
  2. 做一个查询,这个查询花费了 410 毫秒
  3. log文件有相关操作信息,system.profile也有相关文件
  4. 再次进行查询,此查询花费了 100 毫秒
  5. log文件无相关操作信息,system.profile无相关文件

当参数“profile”为2时,为什么日志文件和system.profile没有相关信息?谢谢!

4

1 回答 1

1

所有慢查询都写入 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

因此,对于您的第一次测试:

  1. ./mongod --dbpath /data/db --fork --profile 1 --slowms 200
  2. 做一个查询,这个查询花费了 415 毫秒
  3. log文件有相关操作信息,system.profile也有相关文件
  4. 再次进行查询,此查询花费了 110 毫秒
  5. log文件没有相关的操作信息,system.profile没有相关的文件更新,因为你有

这是您的分析设置为 1 且慢速为 200 毫秒时的预期结果:

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

对于您的第二次测试:

  1. >./mongod --dbpath /data/db --fork --profile 2 --slowms 200
  2. 做一个查询,这个查询花费了 410 毫秒
  3. log文件有相关操作信息,system.profile也有相关文件
  4. 再次进行查询,此查询花费了 100 毫秒
  5. 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)
于 2012-09-12T14:14:25.713 回答