分享

mongo 慢日志分析_mongo key examind

 hongjing_z 2023-08-17 发布于上海

一、背景

mongodb版本 3.2.5

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

二、分析

在查询system.profile的时候,我们能够观察到所有的操作,包括remove,update,find等等都会被记录到system.profile集合中,该集合中包含了诸多信息,如:

  1. {
  2. "op" : "query", //system.profile.op 代表了慢日志的种类,是查询,插入,更新,删除还是其它
  3. "ns" : "test.c",//该项表示了哪个库下面的哪个集合对应的慢日志
  4. "query" : { //该项详细输出了慢日志的具体语句和行为
  5. "find" : "c",
  6. "filter" : {
  7. "a" : 1
  8. }
  9. },
  10. "keysExamined" : 2,//该项表明了为了找出最终的结果,mongo搜索了多少个索引key
  11. "docsExamined" : 2, //该项表明了为了找出最终的结果,mongo搜索了多少个文档
  12. "cursorExhausted" : true,//
  13. "keyUpdates" : 0, //表明了有多个索引key在本次操作中被修改,更改索引key也会有少量的性能消耗,因为mongo不仅要删除旧key,还要插入新key到B-Tree中
  14. "writeConflicts" : 0, //写冲突发生的数量,例如update一个正在被别的update操作的文档
  15. "numYield" : 0, //为了让别的操作完成而屈服的次数,一般发生在需要访问的数据尚未被完全读取到内存中,mongo会优先完成在内存中的操作(冷数据?)
  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,//结果返回的大小,单位为bytes,该值如果过大,则需要考虑limit等方式减少输出结果。
  35. "millis" : 0, //该操作从开始到结束耗时多少,单位毫秒
  36. "execStats" : { //包含了一些该操作的统计信息,只有query类型才会显示
  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", //发起请求的客户端ip。并显示出该客户端的ip或hostname
  85. "allUsers" : [ ],//哪个认证用户执行的操作
  86. "user" : ""}//是否认证用户执行该操作,如认证后使用其它用户操作,该项为空

system.profile.locks

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

GlobalRepresents global lock.
MMAPV1JournalRepresents MMAPv1 storage engine specific lock to synchronize journal writes; for non-MMAPv1 storage engines, the mode forMMAPV1Journal is empty.
DatabaseRepresents database lock.
CollectionRepresents collection lock.
MetadataRepresents metadata lock.
oplogRepresents lock on the oplog.

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

Lock ModeDescription
RRepresents Shared (S) lock.
WRepresents Exclusive (X) lock.
rRepresents Intent Shared (IS) lock.
wRepresents Intent Exclusive (IX) lock.

system.profile.locks.acquireCoun

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

三、拓展

一个mongodb神器,mtools

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多