【问题标题】:mongodb and very high lock percentage with low throughputmongodb和非常高的锁定百分比,吞吐量低
【发布时间】:2012-03-14 08:13:59
【问题描述】:

我们第一次使用 mongodb 时遇到了一些问题 :) 以下是一些事实:

  • 95+% 锁定百分比
  • 服务器是具有 2 个内核、6 GB 内存的 VM,在用于 mongodb 的快速 NAS 上具有 NFS v3 共享 (noatime)。
  • centos 5.7 x86_64, mongo 2.0.2, php-pecl-mongo 1.2.6(不是最新版本,但很快就会更新:)
  • mongo 被(当前/错误地)配置为没有从属的单个主控
  • db 今天从头开始创建。 20 个网络服务器正在写入(使用更新)
  • 不确定有多少更新/秒发送到服务器,但处理量非常小
  • 我不确定这是否是索引问题:如何诊断?
  • 当前磁盘数据(包括 oplog、journal ...)小于 600 MB
  • 数据统计:
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq|阅读令状|接收发送|进出|诠释 csw
 46 1 53 0 0 0| 0 4096B| 42k 19k| 0 0 | 317 5328
 48 1 52 0 0 1| 0 92k| 46k 7590B| 0 0 | 321 5308
 50 2 48 0 0 0| 0 0 | 39k 7218B| 0 0 | 304 5359
 47 1 51 0 0 1| 0 0 | 47k 10k| 0 0 | 332 5679
 46 1 52 0 0 0| 0 0 | 44k 15k| 0 0 | 319 5099
  • nfsiostat 为空(0 ops/s)(当然 iostat 也一样)
  • mongostat:
insert query update delete getmore 命令刷新映射的 vsize res 错误锁定 % idx 未命中 % qr|qw ar|aw netIn netOut conn repl time
     0 0 0 0 0 1 0 1.41g 8.39g 242m 0 96.2 0 0|3280 1|5322 62b 1k 5324 米 21:11:50
     0 0 0 0 0 1 0 1.41g 8.39g 242m 0 96.5 0 0|3204 1|5322 62b 1k 5324 米 21:11:51
     0 0 0 0 0 1 0 1.41g 8.39g 242m 0 96 0 1|3351 1|5322 62b 1k 5324 米 21:11:52
     0 0 1 0 0 1 0 1.41g 8.39g 242m 0 96.9 0 0|3251 1|5322 485b 1k 5324 米 21:11:53
     0 0 0 0 1 1 0 1.41g 8.39g 242m 0 95.6 0 0|3280 1|5322 112b 1k 5324 M 21:11:54
  • db.serverStatus()
{ “主机”:“foo001”, “版本”:“2.0.2”, “进程”:“mongod”, “正常运行时间”:21370, “正常运行时间估计”:18626, "localTime" : ISODate("2012-02-23T20:20:59.589Z"), “全局锁定”:{ “总时间”:21369761258, “锁定时间”:19450568051, “比率”:0.9101911722911022, “当前队列”:{ “总数”:3570, “读者”:0, “作家”:3570 }, “活跃客户”:{ “总数”:5500, “读者”:1, “作家”:5499 } }, “记忆”:{ “位”:64, “居民”:255, “虚拟”:8782, “支持”:是的, “映射”:1440, “mappedWithJournal”:2880 }, “连接”:{ “当前”:5501, “可用”:4099 }, “额外信息”:{ "note" : "字段因平台而异", “heap_usage_bytes”:81930736, “page_faults”:2916 }, “索引计数器”:{ “树”:{ “访问”:2377, “命中”:2377, “未命中”:0, “重置”:0, “错过率”:0 } }, “背景冲洗”:{ “冲洗”:356, “总毫秒”:2372, “平均毫秒”:6.662921348314606, “last_ms”:0, “last_finished”:ISODate(“2012-02-23T20:20:56.446Z”) }, “光标”:{ “总开放”:5500, “clientCursors_size”:5500, “超时”:0, “总无超时”:5499 }, “网络” : { “字节输入”:51373772, “字节输出”:51176411, “请求数”:176017 }, “回复”:{ “ismaster”:是的 }, “操作计数器”:{ “插入”:0, “查询”:25, “更新”:142157, “删除”:0, “获取更多”:39053, “命令”:284 }, “断言”:{ “常规”:0, “警告”:0, “味精”:0, “用户”:0, “翻转”:0 }, “writeBacksQueued”:假, “杜尔”:{ “提交”:19, “journaledMB”:0, “writeToDataFilesMB”:0, “压缩”:0, “commitsInWriteLock”:0, “早期提交”:0, “时间”:{ “dt”:3083, “prepLogBuffer”:0, “writeToJournal”:0, “writeToDataFiles”:0, “重新映射私有视图”:0 } }, “好”:1 }
  • 我们的数据库:
{ “分贝”:“我的分贝”, “收藏”:6, “对象”:119174, “avgObjSize”:323.99872455401345, “数据大小”:38612224, “存储大小”:57286656, “numExtents”:26, “索引”:4, “索引大小”:3899952, “文件大小”:469762048, “nsSizeMB”:16, “好”:1 }

有什么提示吗?

问候,

D.

PS:我也将这个交叉发布给 mongo-user

【问题讨论】:

  • 您的更新操作是什么样的?您可以省略确切的数据,但了解正在使用的运算符以及组合了多少运算符会有所帮助。另外,哪些字段被索引?
  • 您能否发布您为解决这种情况所做的后续工作?或链接到跟进。

标签: linux mongodb concurrency locking


【解决方案1】:

请,请,请不要使用 NFS 作为数据库后端。有很多问题,尤其是与锁定和尤其是与 NFS 性能问题,因此可能甚至不应该考虑 NFS。

我会先将我的数据库移动到本地磁盘,看看是否能解决性能问题 - 我怀疑它会...

编辑:

MongoDB 人seem to agree,即使有点简洁,也不推荐使用 NFS。

【讨论】:

  • 很好,是的,NFS 不应该是数据库后端的选项
  • 好的,如果不建议将 NFS 与 Mongo 一起使用,那么确保文档集中的好解决方案是什么? crontabed rsync 脚本?
【解决方案2】:

根据 mongostat 结果,您正在排队写入(检查 qr|qw,第二个值是高并且正在上升),这意味着您的系统在新的写入到来之前还不够快。

根据你的 mongostat,写的不多,但每个都很慢。看起来问题是更新。您是否正在使用 findAndModify?如果您使用复杂的查询,这将锁定数据库一段时间。 或者,您在 mongostat 上提供的信息可能是在大量写入之后。无论如何,它们可能很慢,或者您不会看到那么高的锁(并且排队的写入会迅速减少)

您应该激活数据库分析器并分析您的更新。查看this page了解更多信息

PD:索引的大小看起来不错:

    "indexes" : 4,
    "indexSize" : 3899952,

小于 4 MB

已编辑:另一个细节,看起来有很多写入客户端同时连接。如果有 20 台 Web 服务器,可能每台都连接几次。

"activeClients" : {
                    "total" : 5500,
                    "readers" : 1,
                    "writers" : 5499
                  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多