Общее представление
Ignite Persistence или Native Persistence - это набор функций, предназначенных для обеспечения постоянного хранения. Когда он включен, Ignite всегда сохраняет все данные на диске и загружает столько данных, сколько может, в оперативную память для обработки. Например, если имеется 100 записей, а объем оперативной памяти позволяет хранить только 20, то все 100 хранятся на диске и только 20 кэшируются в оперативной памяти для повышения производительности.
Когда Native Persistence отключена и внешнее хранилище не используется, Ignite ведет себя как чистое хранилище в памяти.
Когда Persistence включена, на каждом узле сервера сохраняется подмножество данных, включающее только разделы, назначенные этому узлу (включая разделы резервного копирования, если резервное копирование включено).
Native Persistence основана на следующих функциях:
- Хранение разделов данных на диске;
- Ведение журнала с опережением записи;
- Контрольная точка;
- Использование подкачки ОС.
Включение Persistent Storage
Native Persistence настраивается для каждой области данных. Чтобы включить постоянное хранилище, установите для параметра persistenceEnabled значение true в конфигурации области данных. Вы можете одновременно иметь области данных в памяти и области данных с persistence.
Настройка Каталога Постоянного Хранилища
Когда сохраняемость включена, узел хранит пользовательские данные, индексы и файлы WAL в каталоге {IGNITE_WORK_DIR}/db. Этот каталог называется каталогом хранилища. Вы можете изменить каталог хранилища, установив свойство storagepath объекта DataStorageConfiguratio.
Журнал предварительной записи
Журнал предварительной записи - это журнал всех операций по изменению данных (включая удаления), которые выполняются на узле. Когда страница обновляется в оперативной памяти, обновление не записывается непосредственно в файл раздела, а добавляется в конец WAL.
Цель журнала предварительной записи - обеспечить механизм восстановления для сценариев, в которых один узел или весь кластер выходит из строя. В случае сбоя или перезапуска кластер всегда можно восстановить до последней успешно зафиксированной транзакции, полагаясь на содержимое WAL.
WAL состоит из нескольких файлов (называемых активными сегментами) и архива. Активные сегменты заполняются последовательно и перезаписываются в циклическом порядке. Как только 1-й сегмент заполнен, его содержимое копируется в архив WAL (см. раздел Архив WAL ниже). В то время как 1-й сегмент копируется, 2-й сегмент обрабатывается как активный файл WAL и принимает все обновления, поступающие со стороны приложения. По умолчанию существует 10 активных сегментов.
Существует три режима WAL. Каждый режим отличается тем, как он влияет на производительность, и обеспечивает различные гарантии согласованности.
FSYNC - Изменения гарантированно сохраняются на диске при каждой атомарной записи или фиксации транзакции.
LOG_ONLY - Режим по умолчанию.
Изменения гарантированно будут сброшены либо в буферный кэш операционной системы, либо в файл с отображением в памяти для каждой атомарной записи или транзакции.
Сопоставленный с памятью подход к файлам используется по умолчанию и может быть отключен, установив системное свойство IGNITE_WAL_MMAP в значение false.
BACKGROUND - Когда свойство IGNITE_WAL_MMAP включено (по умолчанию), этот режим ведет себя как режим LOG_ONLY.
Если подход с отображением файлов в память отключен, то изменения остаются во внутреннем буфере узла и периодически сбрасываются на диск. Частота промывки задается с помощью параметра walFlushFrequency.
NONE - WAL отключен. Изменения сохраняются только в том случае, если вы корректно завершите работу узла. Используйте Ignite.active(false), чтобы деактивировать кластер и выключить узел.
WAL архив
Архив WAL используется для хранения сегментов WAL, которые могут потребоваться для восстановления узла после сбоя. Количество сегментов, хранящихся в архиве, таково, что общий размер всех сегментов не превышает указанного размера архива WAL.
По умолчанию максимальный размер архива WAL (общее пространство, которое он занимает на диске) определяется как 4-кратный размер буфера контрольных точек. Вы можете изменить это значение в конфигурации.
Изменение размера сегмента WAL
Размер сегмента WAL по умолчанию (64 МБ) может быть неэффективным в сценариях с высокой нагрузкой, поскольку это приводит к слишком частому переключению WAL между сегментами, а переключение/вращение является дорогостоящей операцией. Больший размер сегментов WAL может помочь повысить производительность при высоких нагрузках за счет увеличения общего размера файлов WAL и архива WAL.
Вы можете изменить размер файлов сегмента WAL в конфигурации хранилища данных. Значение должно быть от 512 КБ до 2 ГБ.
Бывают ситуации, когда разумно отключить WAL, чтобы повысить производительность. Например, полезно отключить WAL во время начальной загрузки данных и включить его после завершения предварительной загрузки.
В следующих статьях мы это разберем более подробней.