Timestamp Oracle (TSO)
Обзор
Timestamp Oracle (TSO) выделяет монотонно возрастающие временные метки на Master FE, обеспечивая общую основу для упорядочивания транзакций Doris и инкрементальной обработки. Сейчас TSO доступен только в dev и управляется параметром конфигурации FE enable_feature_changelog, значение которого по умолчанию равно false. Физическая составляющая может увеличиваться с опережением реального времени, поэтому TSO не является точным показанием системных часов.
Основы использования
- Установите
enable_feature_changelog = trueв файле конфигурации FEfe.confи перезапустите FE. Этот экспериментальный параметр нельзя изменять динамически; его значение должно быть одинаковым на всех FE. Прежде чем изменять его, оцените влияние включения changelog на кластер. - Убедитесь, что в кластере есть готовый к работе Master FE, и подготовьте действительные учётные данные Doris.
- Выполните запрос к эндпоинту состояния, доступному только для чтения. Эта команда использует 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_ms | int | 50 ms | false | true | Интервал между проверками необходимости обновления окна выделения временных меток. |
tso_max_update_retry_count | int | 3 | true | true | Максимальное число попыток обновления состояния TSO. |
tso_max_get_retry_count | int | 10 | true | true | Максимальное число попыток выделения TSO перед сообщением об ошибке. |
tso_service_window_duration_ms | int | 1000 ms | true | true | Длительность зарезервированного окна выделения временных меток; также задаёт верхнюю границу интервала периодического сохранения состояния. |
tso_clock_backward_startup_threshold_ms | long | 1800000 ms | true | true | Максимально допустимая разница между восстановленной конечной границей окна и показаниями системных часов при калибровке во время запуска. |
tso_time_offset_debug_mode | int | 0 ms | true | false | Смещение часов только для тестирования; не используйте при обычной эксплуатации. |
enable_tso_forward_when_counter_full | boolean | true | true | true | Увеличивать физическую составляющую на 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 и зависящих от него функций; сама по себе потребность получить значение системных часов не является причиной для его включения.