Демон создания контрольных точек – это постоянно работающий файбер. Периодически он может создавать файлы снимка (.snap), а затем может удалять старые файлы снимка.

Настройки конфигурации checkpoint_interval и checkpoint_count определяют длительность интервалов и количество снимков, которое должно присутствовать до начала удалений.

Сборщик мусора Tarantool’а

Демон создания контрольных точек может запустить сборщик мусора Tarantool’а, который удаляет старые файлы. Такой сборщик мусора на отличается от сборщика мусора в Lua, который предназначен для Lua-объектов, и от сборщика мусора, который специализируется на обработке блоков шарда.

Если демон создания контрольных точек удаляет старый файл снимка, сборщик мусора Tarantool’а также удалит любые файлы журнала упреждающей записи (.xlog) старше файла снимка, содержащие информацию, которая присутствует в файле снимка. Он также удаляет устаревшие файлы .run в vinyl’е.

Демон создания контрольных точек и сборщик мусора Tarantool’а не удалят файл, если:

  • идет резервное копирование, и файл еще не был скопирован (см. «Резервное копирование»), или
  • идет репликация, и файл еще не был передан на реплику (см. «Архитектуру механизма репликации»),
  • реплика подключается, или
  • реплика отстает. Ход выполнения на каждой реплике отслеживается. Если реплика далеко не актуальна, сервер останавливается, чтобы она могла обновиться. Если администратор делает вывод, что реплика окончательно недоступна, необходимо перезагрузить сервер или же (предпочтительно) удалить реплику из кластера.
checkpoint_interval

Промежуток времени между действиями демона создания контрольных точек в секундах. Если значение параметра checkpoint_interval больше нуля, и выполняется изменение базы данных, то демон создания контрольных точек будет вызывать box.snapshot каждые checkpoint_interval секунд, каждый раз создавая новый файл снимка. Если значение параметра checkpoint_interval равно нулю, то демон создания контрольных точек отключен.

Например:

box.cfg{checkpoint_interval=60}

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

Тип: целое число
По умолчанию: 3600 (один час)
Динамический: да
checkpoint_count

Максимальное количество снимков, которые могут находиться в директории memtx_dir до того, как демон создания контрольных точек будет удалять старые снимки. Если значение checkpoint_count равно нулю, то демон создания контрольных точек не удаляет старые снимки. Например:

box.cfg{
    checkpoint_interval = 3600,
    checkpoint_count  = 10
}

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

Следует помнить, что как упоминалось выше, снимки не удаляются, если выполняется репликация, и файл еще не был передан на реплику. Таким образом, параметр checkpoint_count бесполезен, если какая-то реплика неактивна.

Тип: целое число
По умолчанию: 2
Динамический: да
checkpoint_wal_threshold

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

Тип: целое число
По умолчанию: 10^18 (большое число, поэтому по умолчанию предела фактически нет)
Динамический: да

Этот параметр добавили в версии 2.1. Он позволяет администраторам решить проблему, которая может возникнуть при подсчете объема дискового пространства, выделяемого для раздела с WAL-файлами. Например, предположим, что интервал между контрольными точками (checkpoint_interval) = 2 и количество контрольных точек (checkpoint_count) = 5, а средний объем, который Tarantool записывает между контрольными точками = 1 ГБ. Тогда можно было бы рассчитать, что необходим следующий объем: (2*5*1) =10 ГБ. Но такой расчет был бы неверным, если вместо записи 1 ГБ в течение одного интервала Tarantool попытался записать 11 ГБ, что вызвало бы ошибку операционной системы ENOSPC («нет места»). Задав более низкое значение для checkpoint_wal_threshold, например 9 ГБ, администратор может предотвратить ошибку.