2015-01-06 3 views
1

Несколько лет назад MongoDB улавливал некоторое количество тепла, чтобы иметь небезопасное значение по умолчанию, связанное с сохранением диска (см., Например, this question). Какие меры должен выполнить, чтобы обеспечить безопасную запись на диск? Достаточно ли позвонить fsync() после записи или принять другие меры предосторожности, такие как ведение журнала или конкретные способы использования диска?Безопасное сохранение на диске

ответ

2

Вызов fsync() приведет к очистке грязных страниц в буферном кэше с диском. Это зависит от нагрузки на вашем сервере, так как наличие большого количества грязных страниц в кеше и инициирование флеша могут привести к зависанию системы или к невосприимчивому состоянию. Однако его рекомендуется настроить некоторые из вертушек ядра с оптимальными значениями для vm.dirty_expire_centisecs, vm.dirty_background_ratio, чтобы все записи были безопасными и быстрыми и не хранились в кеше в течение длительного времени. Имея более низкие значения, можно замедлить среднюю скорость ввода-вывода, поскольку постоянная попытка записи грязных страниц приведет к более частому запуску кода перегрузки ввода-вывода.

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

Смежные вопросы