Перейти к содержимому
Последнее обновление

Timestamp Oracle (TSO)

SinceVersion dev

Обзор​

Timestamp Oracle (TSO) выделяет монотонно возрастающие временные метки на Master FE, обеспечивая общую основу для упорядочивания транзакций Doris и инкрементальной обработки. Сейчас TSO доступен только в dev и управляется параметром конфигурации FE enable_feature_changelog, значение которого по умолчанию равно false. Физическая составляющая может увеличиваться с опережением реального времени, поэтому TSO не является точным показанием системных часов.

Основы использования​

  1. Установите enable_feature_changelog = true в файле конфигурации FE fe.conf и перезапустите FE. Этот экспериментальный параметр нельзя изменять динамически; его значение должно быть одинаковым на всех FE. Прежде чем изменять его, оцените влияние включения changelog на кластер.
  2. Убедитесь, что в кластере есть готовый к работе Master FE, и подготовьте действительные учётные данные Doris.
  3. Выполните запрос к эндпоинту состояния, доступному только для чтения. Эта команда использует HTTP-порт по умолчанию и запрашивает пароль root:
curl --user root http://127.0.0.1:8030/api/tso

Успешный ответ содержит code = 0; в его поле data находятся курсор выделения временных меток, физическое время, логический счётчик и конец окна. Запросы, отправленные на FE, не являющийся Master FE, по умолчанию перенаправляются на Master FE. Полный пример ответа приведён в разделе Операция TSO.

Чтобы проверить локальное состояние FE, получающего запрос, выполните:

curl --user root 'http://127.0.0.1:8030/api/tso?local=true'

Этот вызов не выделяет временную метку. Локальное состояние может быть неинициализированным; локальный результат FE, не являющегося Master FE, не отражает состояние выделения временных меток действующего Master FE.

Формат временных меток и восстановление​

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

Master FE резервирует окно для будущего выделения временных меток и сохраняет его границу вместе с зафиксированным состоянием TSO. При запуске или смене Master FE сервис воспроизводит это состояние и в ходе калибровки определяет безопасную начальную точку, прежде чем приступить к выделению временных меток. Сохранение состояния входит в текущую реализацию и не требует отдельных переключателей для журналирования TSO или создания контрольных точек.

Справочник по конфигурации​

Это параметры конфигурации FE; см. Конфигурация FE. Базовый переключатель enable_feature_changelog имеет тип boolean, значение по умолчанию false, не поддерживает динамическое изменение и действует не только на Master FE.

ПараметрТипПо умолчаниюМожно изменять динамическиТолько Master FEОписание
tso_service_update_interval_msint50 msfalsetrueИнтервал между проверками необходимости обновления окна выделения временных меток.
tso_max_update_retry_countint3truetrueМаксимальное число попыток обновления состояния TSO.
tso_max_get_retry_countint10truetrueМаксимальное число попыток выделения TSO перед сообщением об ошибке.
tso_service_window_duration_msint1000 mstruetrueДлительность зарезервированного окна выделения временных меток; также задаёт верхнюю границу интервала периодического сохранения состояния.
tso_clock_backward_startup_threshold_mslong1800000 mstruetrueМаксимально допустимая разница между восстановленной конечной границей окна и показаниями системных часов при калибровке во время запуска.
tso_time_offset_debug_modeint0 mstruefalseСмещение часов только для тестирования; не используйте при обычной эксплуатации.
enable_tso_forward_when_counter_fullbooleantruetruetrueУвеличивать физическую составляющую на 1 мс, когда значение логического счётчика превышает половину его ёмкости, а системное время увеличилось недостаточно.

Ошибки и ограничения​

  • Калибровка при запуске завершается ошибкой, если восстановленная граница окна опережает системные часы более чем на tso_clock_backward_startup_threshold_ms. Сервис не может безопасно выделять новые TSO. Проверьте синхронизацию часов, сохранённое состояние и логи FE.
  • Откат системных часов во время работы приводит к появлению предупреждений и отражается в метриках, но не останавливает сервис немедленно. Если физическое время не может увеличиваться, логический счётчик может исчерпать свой диапазон; после исчерпания попыток выделения транзакции, которым требуется TSO, могут завершиться ошибкой.
  • /api/tso возвращает снимок состояния и не расходует значения логического счётчика. Нулевые значения или внешне нормальный снимок не отменяют необходимости проверять инициализацию и фиксацию транзакций.
  • information_schema.rowsets.COMMIT_TSO представляет собой строку с диапазоном TSO для rowset, а не одно значение BIGINT. См. rowsets.

Рекомендации​

Синхронизируйте часы FE, проверяйте состояние через HTTP-эндпоинт и используйте логи FE для диагностики ошибок калибровки или выделения временных меток. Не изменяйте отладочное смещение часов, кроме случаев целенаправленного тестирования. Включайте базовый переключатель только после оценки changelog и зависящих от него функций; сама по себе потребность получить значение системных часов не является причиной для его включения.