linux - mongodb 和非常高的锁定百分比和低吞吐量

标签 linux mongodb concurrency locking

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

  • 锁定百分比超过 95%
  • 服务器是一个具有 2 个核心、6 GB RAM 的虚拟机,在用于 mongodb 的快速 NAS 上具有 NFS v3 共享 (noatime)。
  • centos 5.7 x86_64、mongo 2.0.2、php-pecl-mongo 1.2.6(不是最新版本,但很快就会更新:)
  • mongo(当前/错误)配置为单个主设备,没有从设备
  • 数据库今天已从头开始创建。 20 个网络服务器正在写入(使用更新)
  • 不确定发送到服务器的更新数量,但处理量非常小
  • 我不确定这是否是索引问题:如何诊断?
  • 当前磁盘数据(包括oplog、journal...)小于600 MB
  • 数据统计:
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   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 command flushes mapped  vsize    res faults locked % idx miss %     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    M   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    M   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    M   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    M   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()
{
        "host" : "foo001",
        "version" : "2.0.2",
        "process" : "mongod",
        "uptime" : 21370,
        "uptimeEstimate" : 18626,
        "localTime" : ISODate("2012-02-23T20:20:59.589Z"),
        "globalLock" : {
                "totalTime" : 21369761258,
                "lockTime" : 19450568051,
                "ratio" : 0.9101911722911022,
                "currentQueue" : {
                        "total" : 3570,
                        "readers" : 0,
                        "writers" : 3570
                },
                "activeClients" : {
                        "total" : 5500,
                        "readers" : 1,
                        "writers" : 5499
                }
        },
        "mem" : {
                "bits" : 64,
                "resident" : 255,
                "virtual" : 8782,
                "supported" : true,
                "mapped" : 1440,
                "mappedWithJournal" : 2880
        },
        "connections" : {
                "current" : 5501,
                "available" : 4099
        },
        "extra_info" : {
                "note" : "fields vary by platform",
                "heap_usage_bytes" : 81930736,
                "page_faults" : 2916
        },
        "indexCounters" : {
                "btree" : {
                        "accesses" : 2377,
                        "hits" : 2377,
                        "misses" : 0,
                        "resets" : 0,
                        "missRatio" : 0
                }
        },
        "backgroundFlushing" : {
                "flushes" : 356,
                "total_ms" : 2372,
                "average_ms" : 6.662921348314606,
                "last_ms" : 0,
                "last_finished" : ISODate("2012-02-23T20:20:56.446Z")
        },
        "cursors" : {
                "totalOpen" : 5500,
                "clientCursors_size" : 5500,
                "timedOut" : 0,
                "totalNoTimeout" : 5499
        },
        "network" : {
                "bytesIn" : 51373772,
                "bytesOut" : 51176411,
                "numRequests" : 176017
        },
        "repl" : {
                "ismaster" : true
        },
        "opcounters" : {
                "insert" : 0,
                "query" : 25,
                "update" : 142157,
                "delete" : 0,
                "getmore" : 39053,
                "command" : 284
        },
        "asserts" : {
                "regular" : 0,
                "warning" : 0,
                "msg" : 0,
                "user" : 0,
                "rollovers" : 0
        },
        "writeBacksQueued" : false,
        "dur" : {
                "commits" : 19,
                "journaledMB" : 0,
                "writeToDataFilesMB" : 0,
                "compression" : 0,
                "commitsInWriteLock" : 0,
                "earlyCommits" : 0,
                "timeMs" : {
                        "dt" : 3083,
                        "prepLogBuffer" : 0,
                        "writeToJournal" : 0,
                        "writeToDataFiles" : 0,
                        "remapPrivateView" : 0
                }
        },
        "ok" : 1
}
  • 我们的数据库:
{
        "db" : "mydb",
        "collections" : 6,
        "objects" : 119174,
        "avgObjSize" : 323.99872455401345,
        "dataSize" : 38612224,
        "storageSize" : 57286656,
        "numExtents" : 26,
        "indexes" : 4,
        "indexSize" : 3899952,
        "fileSize" : 469762048,
        "nsSizeMB" : 16,
        "ok" : 1
}

有什么提示吗?

问候,

D.

PS:我也将其交叉发布到 mongo-user

最佳答案

请、请、不要使用 NFS 作为数据库后端。存在很多问题,尤其涉及锁定,尤其涉及 NFS < v4。而且由于它们不仅仅是性能问题,因此可能根本不应该考虑 NFS。

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

编辑:

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

关于linux - mongodb 和非常高的锁定百分比和低吞吐量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421261/

相关文章:

python - pip install py2EXE/cs_Freeze 报错 Ubuntu

c++ - 无限递归变成D模式过程

java - Spring Data MongoDB 集合聚合

mongodb - Golang Mongodb %!(额外

c++ - 如何在 Linux 中提高 SSD I/O 吞吐量并发性

java - Android4.0.3源码编译错误: [out/target/product/generic/obj/STATIC_LIBRARIES/libext_intermediates/initext.o]错误1

c - `dup2` 是如何工作的?

java - Java中的线程安全类通过同步块(synchronized block)

mongodb - 通过浏览他/她的所有帖子获得该用户收到的喜欢总数 MongoDB

Python从URL高效下载图像