MongoDB — опция надежности WiredTiger transaction_sync

На веб-сайте MongoDB доступно мало документации по wiredTiger, и она не охватывает многие параметры конфигурации, перечисленные на веб-сайте wiredTiger. На основе документации wiredtiger (http://source.wiredtiger.com/develop/tune_durability.html#tune_durability_flush_config), я включил параметры устойчивости транзакций, как показано ниже:

storage:
    engine: "wiredTiger"
    wiredTiger:
        engineConfig:
            cacheSizeGB: 3
            configString: "log=(enabled),transaction_sync=(enabled=true,method=fsync)"

Мой вопрос в том, поддерживается ли это? Сервер mongoDB запускается без жалоб на эту опцию, но как я могу убедиться, что она действует?

Спасибо


person Milind    schedule 23.03.2015    source источник
comment
Какого эффекта вы пытаетесь достичь? Скорее всего, есть другой правильный способ добраться туда.   -  person Asya Kamsky    schedule 23.03.2015
comment
Я хочу чаще сохранять данные на диске (по возможности в режиме реального времени). С MMAPV1 мы могли бы использовать ведение журнала, писать о проблеме и использовать commitinterval для настройки, но что мы делаем с wiredTiger?   -  person Milind    schedule 23.03.2015
comment
если вы используете функцию записи j:true, то в WT это приведет к синхронной очистке журнала, т. е. запись не будет подтверждена до тех пор, пока она не будет сброшена на диск вместе с журналом. Вы не должны вносить какие-либо изменения в конфигурацию mongod — просто используйте j:true в качестве проблемы записи по умолчанию (или только для определенных записей, в зависимости от ваших потребностей). Я опубликую это как ответ.   -  person Asya Kamsky    schedule 24.03.2015


Ответы (1)


Вы пояснили, что хотите, чтобы записи на диск сохранялись как можно чаще, по возможности в режиме реального времени.

Вы можете добиться этого с помощью WiredTiger, не изменяя никаких параметров запуска. Использование writeConcern j:true или "журнал подтвержден" ваши записи будут подтверждены только после того, как они будут записаны в журнал и сброшены на диск. Вы можете установить значение writeConcern по умолчанию для подключения к j:true или для отдельных записей, в зависимости от ваших требований.

person Asya Kamsky    schedule 23.03.2015
comment
Привет Ася, спасибо за ваше время и ответ. Как упоминалось ранее, я использую механизм wiredTiger, а параметры storage.wiredTiger не включают параметры журнала и commitIntervalMs, но они используются для mmapv1. Могу ли я вместо этого изменить настройки репликации, чтобы использовать fsync, как показано ниже? cfg.settings={ chainingAllowed: true, heartbeatTimeoutSecs: 10, getLastErrorModes: {}, getLastErrorDefaults: {w: большинство, wtimeout: 0, fsync: true}}. Принесет ли это желаемый результат — максимально возможную надежность транзакций? - person Milind; 27.03.2015
comment
вам никогда не следует использовать fsync:true, так как он просто возвращается к j:true и будет объявлен устаревшим. Использование j:true является максимально возможной устойчивостью транзакций (на одном сервере). если у вас есть набор реплик, добавление w:majority повысит устойчивость кластера. WiredTiger не включает те же параметры, что и mmap, потому что его поведение по умолчанию отличается, и нет смысла иметь параметр для чего-то, что уже происходит автоматически (fsync'ирует журнал на j:true синхронно). - person Asya Kamsky; 28.03.2015
comment
Спасибо тебе за пояснение. У меня есть еще один вопрос к вам: когда вы говорите синхронно, разве это не обусловлено свойством commitIntervalMs, которое принимает наименьшее значение 2 мс? Еще раз спасибо за ваше время и терпение. Ценю вашу помощь. - person Milind; 28.03.2015
comment
нет, commitIntervalMs прямо сейчас применяется только к mmap, где он асинхронный. Это синхронно в wiredTiger. См. этот запрос на добавление асинхронной опции в WiredTiger: jira.mongodb.org/browse/SERVER-16609< /а> - person Asya Kamsky; 28.03.2015