Чтобы обеспечить согласованность двоичного резервного копирования кластера, Shardman реализует механизм точек синхронизации.
Для достижения согласованной видимости распределённых транзакций используется метод глобальных снимков на основе физических часов (Clock-Si). Точно так же можно получить согласованный снимок для резервных копий, при этом время, соответствующее глобальному снимку, должно быть сопоставлено с набором LSN для каждого узла. Такой набор согласованных LSN в кластере называется точкой синхронизации.
В кластере Shardman каждый узел может генерировать свой собственный независимый локальный CSN, что не гарантирует глобального упорядочения значений по времени. Поэтому нельзя взять этот произвольный локальный CSN в качестве основы для точки синхронизации. Вместо этого Shardman в качестве основы для точки синхронизации выбирает только те CSN, которые соответствуют записям фиксации распределённых транзакций. Эти CSN обладают свойством глобального упорядочения алгоритма Clock-Si и могут использоваться для получения точки синхронизации. Основные особенности этого механизма описаны ниже.
Запись фиксации каждой завершённой транзакции в Shardman содержит назначенный CSN для этой транзакции. Это значение вместе с LSN этой записи образует пару значений (CSN, LSN). Каждый из узлов кластера хранит определённое количество таких пар в оперативной памяти в специальной структуре — карте CSNLSNMap. CSNLSNMap — это кольцевой буфер. Каждый элемент карты представляет собой пару (CSN, LSN). Размер карты задаётся параметрами конфигурации csn_lsn_map_size. Пара (CSN, LSN) может быть добавлена в карту, только если на узле нет транзакций, которые могут получить CSN меньше добавленного. Это важное условие гарантирует монотонный рост CSN и LSN в CSNLSNmap, но не гарантирует, что каждая запись фиксации попадёт в карту.
Когда пользователь отправляет запрос на создание точки синхронизации, в каждой CSNLSNMap выполняется поиск максимально возможного CSNg, для которого есть запись (CSN n, LSN) в каждом узле и условие CSNn <= CSNg верно. Свойство монотонного роста каждой CSNLSNMap гарантирует, что каждая найденная пара (CSNn, LSN) соответствует состоянию глобальных данных в момент времени, соответствующий CSNg. Если такое значение CSNg не найдено, операция получения точки синхронизации завершится ошибкой и может быть повторена позже. Если такое значение CSNg найдено, то точка синхронизации генерируется в виде особого типа записи WAL, которая дублируется на всех узлах кластера.
Получив точку синхронизации и взяв из неё LSN для каждого узла в кластере, можно сделать резервную копию каждого узла, которая обязательно должна содержать этот LSN. Также можно восстановить этот LSN, используя механизм восстановления на момент времени (PITR).