2013-09-05 2 views
0

У меня есть небольшой кластер, состоящий из нескольких осколков, и каждый осколок представляет собой набор реплик из двух реальных узлов и 1 ARBITER. sharding включен в коллекции, скажем, generator_v1_food.mongodb: sharded collection count keep reduction

Я прекратил все программы, обновляемые коллекции (в этих программах, есть ТОЛЬКОupsert и find операций, не remove вообще). Затем счетчик коллекции возвращается так (2-3-секундный интервал). Я также выключил балансир. Последние строки журнала (осколок, в котором я работал) были о наборе реплик.

mongos> db.generator_v1_food.find().count() 
28279890 
mongos> db.generator_v1_food.find().count() 
28278067 
mongos> db.generator_v1_food.find().count() 
28278008 
... 

Что происходит за сценой? Любые указатели были бы замечательными.

+0

Вы проверили currentops, а? – attish

+0

После завершения перезапуска сервера конфигурации «count reduction» останавливается. В следующий раз, когда это произойдет, я попытаюсь проверить 'currentop'. Благодарю. – maow

ответ

1

цитата:

Просто потому, что вы установили состояние балансира в положение «выключено» не означает, что не все еще работает, и заканчивая очистки от последнего moveChunk, которая была выполнена.

Вы должны иметь возможность видеть в конфигурационной БД в коллекции изменений, когда было событие last moveChunk.commit - это когда процесс moveChunk был привязан к тому, что документы из некоторого фрагмента перемещаются на новый (целевой) осколок. Но после этого асинхронно старый осколок должен удалить документы, которые больше не принадлежат ему. Поскольку «счет» берется из метаданных и на самом деле не запрашивает, сколько документов существует «по-настоящему», он будет удвоить количество документов «в полете» во время балансировочных раундов (или любых, которые не были должным образом очищены или от прерванного баланса попытки).

Ася