首页
论坛
社团
我的

ADSKN论坛

 找回密码
立即注册

扫一扫,微信登陆

开启左侧

深入解说 MongoDB的慢日志 查询(profile)

[复制链接]
 楼主| 余一一 发表于2022-7-19 00:37:43 | 显示全部楼层 |阅读模式 | 来自 上海市 腾讯云

马上注册加入论坛,获取更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

媒介

说到MongoDB的慢日志 分析,就不得不提到profile分析器,profile分析器将纪录 的慢日志 写到system.profile聚集 下,这个聚集 是一个固定聚集 。我们可以通过对这个聚集 的查询,来相识 当前的慢日志 ,进而对数据库举行 优化。

团体 情况

MongoDB 3.2.5

实战

Part1:输出树模

在查询

  1. system.profile
复制代码
的时候,我们能够观察到全部 的操作,包罗remove,update,find等等都会被纪录 到
  1. system.profile
复制代码
聚集 中,该聚集 中包含了诸多信息,如:

  1. {
  2. "op" : "query",
  3. "ns" : "test.c",
  4. "query" : {
  5. "find" : "c",
  6. "filter" : {
  7. "a" : 1
  8. }
  9. },
  10. "keysExamined" : 2,
  11. "docsExamined" : 2,
  12. "cursorExhausted" : true,
  13. "keyUpdates" : 0,
  14. "writeConflicts" : 0,
  15. "numYield" : 0,
  16. "locks" : {
  17. "Global" : {
  18. "acquireCount" : {
  19. "r" : NumberLong(2)
  20. }
  21. },
  22. "Database" : {
  23. "acquireCount" : {
  24. "r" : NumberLong(1)
  25. }
  26. },
  27. "Collection" : {
  28. "acquireCount" : {
  29. "r" : NumberLong(1)
  30. }
  31. }
  32. },
  33. "nreturned" : 2,
  34. "responseLength" : 108,
  35. "millis" : 0,
  36. "execStats" : {
  37. "stage" : "FETCH",
  38. "nReturned" : 2,
  39. "executionTimeMillisEstimate" : 0,
  40. "works" : 3,
  41. "advanced" : 2,
  42. "needTime" : 0,
  43. "needYield" : 0,
  44. "saveState" : 0,
  45. "restoreState" : 0,
  46. "isEOF" : 1,
  47. "invalidates" : 0,
  48. "docsExamined" : 2,
  49. "alreadyHasObj" : 0,
  50. "inputStage" : {
  51. "stage" : "IXSCAN",
  52. "nReturned" : 2,
  53. "executionTimeMillisEstimate" : 0,
  54. "works" : 3,
  55. "advanced" : 2,
  56. "needTime" : 0,
  57. "needYield" : 0,
  58. "saveState" : 0,
  59. "restoreState" : 0,
  60. "isEOF" : 1,
  61. "invalidates" : 0,
  62. "keyPattern" : {
  63. "a" : 1
  64. },
  65. "indexName" : "a_1",
  66. "isMultiKey" : false,
  67. "isUnique" : false,
  68. "isSparse" : false,
  69. "isPartial" : false,
  70. "indexVersion" : 1,
  71. "direction" : "forward",
  72. "indexBounds" : {
  73. "a" : [
  74. "[1.0, 1.0]"
  75. ]
  76. },
  77. "keysExamined" : 2,
  78. "dupsTested" : 0,
  79. "dupsDropped" : 0,
  80. "seenInvalidated" : 0
  81. }
  82. },
  83. "ts" : ISODate("2015-09-03T15:26:14.948Z"),
  84. "client" : "127.0.0.1",
  85. "allUsers" : [ ],
  86. "user" : ""}
复制代码

Part2:输出解读

  1. system.profile.op
复制代码

这一项告急 包含如下几类

  1. insert
  2. query
  3. update
  4. remove
  5. getmore
  6. command

代表了该慢日志 的种类是什么,是查询、插入、更新、删除照旧 其他。

  1. system.profile.ns
复制代码

该项表明该慢日志 是哪个库下的哪个聚集 所对应的慢日志 。

  1. system.profile.query
复制代码

该项详细 输出了慢日志 的详细 语句和活动

  1. system.profile.keysExamined
复制代码

该项表明为了找出终极 结果MongoDB搜索 了多少个key

  1. system.profile.docsExamined
复制代码

该项表明为了找出终极 结果MongoDB搜索 了多少个文档

  1. system.profile.keyUpdates
复制代码

该项表名有多少个index key在该操作中被更改,更改索引键也会有少量的性能斲丧 ,由于 数据库不单单要删除旧Key,还要插入新的Key到B-Tree索引中

  1. system.profile.writeConflicts
复制代码

写辩论 发生的数目 ,比方 update一个正在被别的update操作的文档

  1. system.profile.numYield
复制代码

为了让别的操作完成而屈服的次数,一般发生在须要 访问的数据尚未被完全读取到内存中,MongoDB会优先完成在内存中的操作

  1. system.profile.locks
复制代码

在操作中产生的锁,锁的种类有多种,如下:

Global Represents global lock.
MMAPV1Journal Represents MMAPv1 storage engine specific lock to synchronize journal writes; for non-MMAPv1 storage engines, the mode forMMAPV1Journal is empty.
Database Represents database lock.
Collection Represents collection lock.
Metadata Represents metadata lock.
oplog Represents lock on the oplog.

锁的模式也有多种,如下:

Lock Mode Description
R Represents Shared (S) lock.
W Represents Exclusive (X) lock.
r Represents Intent Shared (IS) lock.
w Represents Intent Exclusive (IX) lock.

  1. system.profile.locks.acquireCoun
复制代码

在各种不消 的种类下,请求锁的次数

  1. system.profile.nreturned
复制代码

该操作终极 返回文档的数目

  1. system.profile.responseLength
复制代码

结果返回的大小,单位为bytes,该值假如 过大,则需考虑limit()等方式减少输出结果

  1. system.profile.millis
复制代码

该操作从开始到竣事 耗时多少,单位为毫秒

  1. system.profile.execStats
复制代码

包含了一些该操作的统计信息,只有query类型的才会表现

  1. system.profile.execStats.stage
复制代码

包含了该操作的详细 信息,比方 是否用到索引

  1. system.profile.ts
复制代码

该操作执行时的时间

  1. system.profile.client
复制代码

哪个客户端发起的该操作,并表现 出该客户端的ip或hostname

  1. system.profile.allUsers
复制代码

哪个认证用户执行的该操作

  1. system.profile.user
复制代码

是否认证用户执行该操作,如认证后利用 其他用户操作,该项为空

总结

  1. system.profile
复制代码
聚集 是定位慢SQL的手段之一,相识 每一个输出项的含义有助于我们更快的定位标题 。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者禁绝 确的地方,不当 之处恳请读者品评 指正。

好了,以上就是这篇文章的全部内容了,希望本文的内容对各人 的学习或者工作能带来肯定 的资助,假如 有疑问各人 可以留言交换 ,谢谢各人 对脚本之家的支持。


来源:https://www.jb51.net/article/117441.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
公告
  • 问题反馈请扫码加入一期核心用户群
  • [学生认证] 认证后获取生活类板块发帖权限
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

QQ|Archiver|手机版|小黑屋|ADSKN短链接收益平台 ( 冀ICP备2021002162号 )

GMT+8, 2022-12-4 19:30 , Processed in 0.343518 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表