一.mongodb的监控

mongodb可以通过profile来监控数据,进行优化。

查看当前是否开启profile功能用命令

db.getProfilingLevel()  返回level等级,值为0|1|2,分别代表意思:0代表关闭,1代表记录慢命令,2代表全部

开始profile功能为

db.setProfilingLevel(level);  #level等级,值同上

level为1的时候,慢命令默认值为100ms,更改为db.setProfilingLevel(level,slowms)如db.setProfilingLevel(1,50)这样就更改为50毫秒

通过db.system.profile.find() 查看当前的监控日志。

如:

  1. > db.system.profile.find({millis:{$gt:500}})
  2. { "ts" : ISODate("2011-07-23T02:50:13.941Z"), "info" : "query order.order reslen:11022 nscanned:672230  \nquery: { status: 1.0 } nreturned:101 bytes:11006 640ms", "millis" : 640 }
  3. { "ts" : ISODate("2011-07-23T02:51:00.096Z"), "info" : "query order.order reslen:11146 nscanned:672302  \nquery: { status: 1.0, user.uid: { $gt: 1663199.0 } }  nreturned:101 bytes:11130 647ms", "millis" : 647 }

这里值的含义是

ts:命令执行时间

info:命令的内容

query:代表查询

order.order: 代表查询的库与集合

reslen:返回的结果集大小,byte数

nscanned:扫描记录数量

nquery:后面是查询条件

nreturned:返回记录数及用时

millis:所花时间

如果发现时间比较长,那么就需要作优化。

比如nscanned数很大,或者接近记录总数,那么可能没有用到索引查询。

reslen很大,有可能返回没必要的字段。

nreturned很大,那么有可能查询的时候没有加限制。

mongo可以通过db.serverStatus()查看mongod的运行状态

  1. > db.serverStatus()
  2. {
  3. "host" : "baobao-laptop",#主机名
  4. "version" : "1.8.2",#版本号
  5. "process" : "mongod",#进程名
  6. "uptime" : 15549,#运行时间
  7. "uptimeEstimate" : 15351,
  8. "localTime" : ISODate("2011-07-23T06:07:31.220Z"),当前时间
  9. "globalLock" : {
  10. "totalTime" : 15548525410,#总运行时间(ns)
  11. "lockTime" : 89206633,  #总的锁时间(ns)
  12. "ratio" : 0.005737305027178137,#锁比值
  13. "currentQueue" : {
  14. "total" : 0,#当前需要执行的队列
  15. "readers" : 0,#读队列
  16. "writers" : 0#写队列
  17. },
  18. "activeClients" : {
  19. "total" : 0,#当前客户端执行的链接数
  20. "readers" : 0,#读链接数
  21. "writers" : 0#写链接数
  22. }
  23. },
  24. "mem" : {#内存情况
  25. "bits" : 32,#32位系统
  26. "resident" : 337,#占有物理内存数
  27. "virtual" : 599,#占有虚拟内存
  28. "supported" : true,#是否支持扩展内存
  29. "mapped" : 512
  30. },
  31. "connections" : {
  32. "current" : 2,#当前链接数
  33. "available" : 817#可用链接数
  34. },
  35. "extra_info" : {
  36. "note" : "fields vary by platform",
  37. "heap_usage_bytes" : 159008,#堆使用情况字节
  38. "page_faults" : 907 #页面故作
  39. },
  40. "indexCounters" : {
  41. "btree" : {
  42. "accesses" : 59963, #索引被访问数
  43. "hits" : 59963, #所以命中数
  44. "misses" : 0,#索引偏差数
  45. "resets" : 0,#复位数
  46. "missRatio" : 0#未命中率
  47. }
  48. },
  49. "backgroundFlushing" : {
  50. "flushes" : 259,  #刷新次数
  51. "total_ms" : 3395, #刷新总花费时长
  52. "average_ms" : 13.108108108108109, #平均时长
  53. "last_ms" : 1, #最后一次时长
  54. "last_finished" : ISODate("2011-07-23T06:07:22.725Z")#最后刷新时间
  55. },
  56. "cursors" : {
  57. "totalOpen" : 0,#打开游标数
  58. "clientCursors_size" : 0,#客户端游标大小
  59. "timedOut" : 16#超时时间
  60. },
  61. "network" : {
  62. "bytesIn" : 285676177,#输入数据(byte)
  63. "bytesOut" : 286564,#输出数据(byte)
  64. "numRequests" : 2012348#请求数
  65. },
  66. "opcounters" : {
  67. "insert" : 2010000, #插入操作数
  68. "query" : 51,#查询操作数
  69. "update" : 5,#更新操作数
  70. "delete" : 0,#删除操作数
  71. "getmore" : 0,#获取更多的操作数
  72. "command" : 148#其他命令操作数
  73. },
  74. "asserts" : {#各个断言的数量
  75. "regular" : 0,
  76. "warning" : 0,
  77. "msg" : 0,
  78. "user" : 2131,
  79. "rollovers" : 0
  80. },
  81. "writeBacksQueued" : false,
  82. "ok" : 1
  83. }

db.stats()查看某一个库的原先状况

  1. > db.stats()
  2. {
  3. "db" : "order",#库名
  4. "collections" : 4,#集合数
  5. "objects" : 2011622,#记录数
  6. "avgObjSize" : 111.92214441878245,#每条记录的平均值
  7. "dataSize" : 225145048,#记录的总大小
  8. "storageSize" : 307323392,#预分配的存储空间
  9. "numExtents" : 21,#事件数
  10. "indexes" : 1,#索引数
  11. "indexSize" : 74187744,#所以大小
  12. "fileSize" : 1056702464,#文件大小
  13. "ok" : 1
  14. }

查看集合记录用

  1. > db.order.stats()
  2. {
  3. "ns" : "order.order",#命名空间
  4. "count" : 2010000,#记录数
  5. "size" : 225039600,#大小
  6. "avgObjSize" : 111.96,
  7. "storageSize" : 307186944,
  8. "numExtents" : 18,
  9. "nindexes" : 1,
  10. "lastExtentSize" : 56089856,
  11. "paddingFactor" : 1,
  12. "flags" : 1,
  13. "totalIndexSize" : 74187744,
  14. "indexSizes" : {
  15. "_id_" : 74187744#索引为_id_的索引大小
  16. },
  17. "ok" : 1
  18. }

mongostat命令查看运行中的实时统计,表示每秒实时执行的次数

mongodb还提供了一个机遇http的监控页面,可以访问http://ip:28017来查看,这个页面基本上是对上面的这些命令做了一下综合,所以这里不细述了。

二.mongodb的优化

根据上面这些监控手段,找到问题后,我们可以进行优化

上面找到了某一下慢的命令,现在我们可以通过执行计划跟踪一下,如

  1. > db.order.find({ "status": 1.0, "user.uid": { $gt: 2663199.0 } }).explain()
  2. {
  3. "cursor" : "BasicCursor",#游标类型
  4. "nscanned" : 2010000,#扫描数量
  5. "nscannedObjects" : 2010000,#扫描对象
  6. "n" : 337800,#返回数据
  7. "millis" : 2838,#耗时
  8. "nYields" : 0,
  9. "nChunkSkips" : 0,
  10. "isMultiKey" : false,
  11. "indexOnly" : false,
  12. "indexBounds" : {#使用索引(这里没有)
  13. }
  14. }

对于这样的,我们可以创建索引

可以通过  db.collection.ensureIndex({"字段名":1}) 来创建索引,1为升序,-1为降序,在已经有多数据的情况下,可用后台来执行,语句db.collection.ensureIndex({"字段名":1} , {backgroud:true})

获取索引用db.collection.getIndexes() 查看

这里我们创建一个user.uid的索引 >db.order.ensureIndex({"user.uid":1})

创建后重新执行

  1. db.order.find({ "status": 1.0, "user.uid": { $gt: 2663199.0 } }).explain()
  2. {
  3. "cursor" : "BtreeCursor user.uid_1",
  4. "nscanned" : 337800,
  5. "nscannedObjects" : 337800,
  6. "n" : 337800,
  7. "millis" : 1371,
  8. "nYields" : 0,
  9. "nChunkSkips" : 0,
  10. "isMultiKey" : false,
  11. "indexOnly" : false,
  12. "indexBounds" : {
  13. "user.uid" : [
  14. [
  15. 2663199,
  16. 1.7976931348623157e+308
  17. ]
  18. ]
  19. }
  20. }

扫描数量减少,速度提高。mongodb的索引设计类似与关系数据库,按索引查找加快书读,但是多了会对写有压力,所以这里就不再叙述了。

2.其他优化可以用hint强制索引查找,返回只是需要的数据,对数据分页等。

mongodb的监控与性能优化的更多相关文章

  1. Dynamic CRM 2013学习笔记(七)追踪、监控及性能优化

    本文将介绍CRM的三个内容追踪.监控及性能优化.追踪是CRM里一个很有用的功能,它能为我们的CRM调试或解决错误.警告提供有价值的信息:我们可以用window的性能监控工具来了解CRM的性能状况:最后 ...

  2. Oracle管理监控之段空间利用监控-oracle性能优化

    SELECT S.OWNER,       S.SEGMENT_NAME,       S.SEGMENT_TYPE,       S.PARTITION_NAME,       ROUND(BYTE ...

  3. Mongodb的性能优化问题

    摘要 数据库性能对软件整体性能有着至关重要的影响,对于Mongodb数据库常用的性能优化方法主要有: 范式化与反范式化: 填充因子的使用: 索引的使用: 一. 范式化与反范式化 范式是为了消除重复数据 ...

  4. iOS性能优化总结

    iOS性能优化总结.关于 iOS 性能优化梳理: 基本工具.业务优化.内存优化.卡顿优化.布局优化.电量优化. 安装包瘦身.启动优化.网络优化等. 关于iOS 性能优化梳理: 基本工具.业务优化.内存 ...

  5. mongodb可以通过profile来监控数据 (mongodb性能优化)

    mongodb可以通过profile来监控数据 (mongodb性能优化)   开启 Profiling  功能 ,对慢查询进行优化: mongodb可以通过profile来监控数据,进行优化. 查看 ...

  6. MongoDB性能优化

    一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...

  7. MongoDB性能优化指南

    一.索引 MongoDB 提供了多样性的索引支持,索引信息被保存在system.indexes 中,且默认总是为_id创建索引,它的索引使用基本和MySQL 等关系型数据库一样.其实可以这样说说,索引 ...

  8. Mongodb高级篇-性能优化

    1.监控 mongodb可以通过profile来监控数据,进行优化. 查看当前是否开启profile功能用命令:db.getProfilingLevel()返回level等级,值为0|1|2,分别代表 ...

  9. MongoDB学习笔记(四)--索引 && 性能优化

    索引                                                                                             基础索引 ...

随机推荐

  1. onclick事件分析

     有些时候,我们想实现这样的一种效果:      <a href="imgs/2.jpg" title="A fireworks display" onc ...

  2. c++ string的实现。

    第三次做了.只是做个复习.偶然发现之前的版本有内存泄露.基本功还是不过关.这次应该没有内存泄漏了.虽然是个简单版本. 1)了解堆,栈,值copy. 2)几个常用的c的字符函数和c中的char 如何表示 ...

  3. Python学习(10)元组

    目录 Python 元组 访问元组 修改元组 删除元组 元组运算符 元组索引,截取 无关闭分隔符 元组内置函数 Python 元组 Python的元组与列表类似,不同之处在于元组的元素不能修改. 元组 ...

  4. (一)stm32之CMSIS标准、库目录、GPIO

    一.CMSIS标准 ST公司的stm32采用的是cortex-m3内核,内核是整个微处理器的CPU.该内核是ARM公司设计的一种处理器体系架构.内核与外设的关系就像PC上的CPU与硬盘.主板.内存等的 ...

  5. opencl 学习资源

    1.AMD  opencl-optimization-guide http://developer.amd.com/tools-and-sdks/opencl-zone/amd-accelerated ...

  6. Jqplot使用总结之二(双Y轴)

    最近需要用Jqplot做双Y轴的Chart图,首先我找到了文档上的例子并对数据做了一些调整: 1.例子展示: var s1 = [["2002-01-01", 112000], [ ...

  7. 百度编辑器 无法获取post过去的值

    如果你的,表单form是套用 table的话,请一下,要把 form 放在table的最外面.否则获取不到post值

  8. windows 下使用 Filezilla server 搭建 ftp 服务器

    windows 下使用 Filezilla server 搭建 ftp 服务器 1. Filezilla server 免费,开源, ftp 服务端 2. 下载安装, windows  https:/ ...

  9. sap 中怎样把非限制库存转为销售订单库存?

    把非限制库存转为销售订单库存: MB1B 移动类型413 把销售订单库存转为非限制库存: MB1B移动类型411 E 切记!

  10. SSIS包部署

    1.ssis包部署可以生成部署文件,部署到sqlserver,再通过sqlserver计划作业来执行. 2.也可以通过shell来调用dtsx ,通过windows计划任务来定时调用exe. 不论是哪 ...