mongodb и очень высокий процент блокировок с низкой пропускной способностью - PullRequest
4 голосов
/ 24 февраля 2012

У нас есть некоторые проблемы с нашим первым использованием mongodb :) Вот несколько фактов:

  • 95 + процент блокировки%
  • сервер - это виртуальная машина с 2 ядрами, 6 ГБ оперативной памяти, с общим ресурсом NFS v3 (noatime) на быстром NAS для mongodb.
  • centos 5.7 x86_64, mongo 2.0.2, php-pecl-mongo 1.2.6 (не последняя версия, но скоро будет обновлена:)
  • Монго (в настоящее время / неправильно) настроен как один мастер без ведомого
  • БД был создан сегодня с нуля. 20 веб-серверов пишут на него (используя обновление)
  • не уверен, сколько обновлений отправлено на сервер, но обработанная сумма очень мала
  • Я не уверен, что это проблема с индексом: как диагностировать?
  • текущие данные на диске (включая оплог, журнал ...) меньше 600 МБ
  • dstat:
----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 операций / с) (конечно, 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: Я также отправил это к пользователю в монго

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Пожалуйста, пожалуйста, , пожалуйста, , не используйте NFS в качестве базы данных. Есть так много проблем, особенно с блокировкой и особенно с NFS просто проблем с производительностью, NFS, вероятно, даже не следует рассматривать.

Я бы начал с переноса моей БД на локальный диск и посмотрел, решит ли это проблемы с производительностью - что, я подозреваю, будет ...

EDIT:

Люди из MongoDB , похоже, согласны , даже если несколько кратко, что NFS не рекомендуется.

4 голосов
/ 24 февраля 2012

Согласно результату mongostat, вы пишете в очереди (проверьте qr | qw, второе значение высокое и увеличивается), это означает, что ваша система не достаточно быстра для записи до новой записи.

Согласно вашему монгостату, не так много записей, но каждая из них идет медленно. Похоже, проблема в обновлениях. Используете ли вы, возможно, найти AndModify? Это блокирует БД на некоторое время, если вы используете сложный запрос. Или, может быть, информация, которую вы поместили в монгостат, была после огромного количества писем. В любом случае, они, вероятно, очень медленные, или вы не увидите эту высокую блокировку (и записи в очереди быстро уменьшатся)

Вам следует активировать профилировщик БД и проанализировать ваши обновления. Проверьте эту страницу для получения дополнительной информации

PD: размер индексов выглядит нормально:

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

Это меньше, чем 4 МБ

РЕДАКТИРОВАНИЕ: еще одна деталь, похоже, что одновременно подключено довольно много клиентов записи. Если имеется 20 веб-серверов, возможно, каждый из них подключается несколько раз.

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