Я пытаюсь сделать mongodump из нашего производственного mongodb, пока производство работает.
У нас есть три производственных экземпляра: один обычный mongodb, один с очень небольшим количеством гигабайт данных в gridfs, третий с большим объемом данных в gridfs. Все экземпляры mongodb работают в версии 2.4.9 на виртуальном сервере ubuntu 10.04.
Я использую команду mongodump для экспорта баз на другой сервер.
К сожалению, наши машины практически размещены в центре обработки данных с "низкой производительностью" (на основе vmware), поэтому, когда я пытаюсь экспортировать большую базу данных gridfs, ввод-вывод диска достигает 100% (и 50% ЦП тоже начинает ждать ввода-вывода).
Это очень негативно сказывается на производственных приложениях, поскольку время доступа к базе данных чрезмерно увеличивается, что делает приложения непригодными для использования.
Я ищу способ отрегулировать mongodump, чтобы экспорт шел медленнее, но круче на аппаратных ресурсах, что позволяло повысить производительность приложений.
У кого-нибудь был подобный сценарий?
Нет возможности задушить чтение - и все mongodump
выполняется одно чтение, которое проходит по индексу _id для сбрасываемых баз данных, а затем записывает данные в формате BSON. Воздействие ввода-вывода, которое вы наблюдаете, связано с тем, что для чтения ему приходится переносить данные в память (это касается всех операций чтения).
Что касается предложений, я могу придумать несколько вещей, которые могут помочь:
mongodump
на вторичном, а не на первичномПервый вариант изолирует влияние на вторичный, и тогда он может отставать в репликации и должен наверстать упущенное, но если вы не используете вторичные чтения, это не повлияет на ваше приложение.
Если вы используете вторичное чтение, вы увидите влияние на приложение. Здесь на помощь приходит второй вариант - он будет означать получение слегка «устаревшей» версии данных (но это произойдет, как только вы напишете что-нибудь после mongodump
в любом случае), но, выключив его и вынув из набора, вы гарантируете отсутствие влияния на ваше приложение. Вы также можете просто взять файлы данных и использовать их напрямую - нет необходимости mongodump
(обычно это значительно быстрее).