Lightweight Update
Lightweight Update
Когда легкие обновления включены, обновленные строки сразу помечаются как обновленные, и последующие запросы SELECT
автоматически вернут измененные значения. Когда легкие обновления не включены, вам, возможно, придется подождать, пока ваши мутации будут применены через фоновый процесс, чтобы увидеть измененные значения.
Легкие обновления могут быть включены для таблиц семейства MergeTree
, активировав параметры уровня запроса apply_mutations_on_fly
.
Пример
Создадим таблицу и запустим несколько мутаций:
Проверим результат обновлений через запрос SELECT
:
Обратите внимание, что значения строк еще не обновлены, когда мы запрашиваем новую таблицу:
Теперь давайте посмотрим, что произойдет, когда мы включим легкие обновления:
Запрос SELECT
теперь сразу возвращает правильный результат, не дожидаясь применения мутаций:
Влияние на производительность
Когда легкие обновления включены, мутации не материализуются сразу, а будут применяться только во время запросов SELECT
. Однако, обратите внимание, что мутации все еще материализуются асинхронно в фоновом режиме, что является тяжелым процессом.
Если количество поданных мутаций постоянно превышает количество мутаций, которые обрабатываются в фоновом режиме за определенный интервал времени, очередь нематериализованных мутаций, которые необходимо применить, будет продолжать расти. Это приведет к ухудшению производительности запросов SELECT
.
Мы рекомендуем включить параметр apply_mutations_on_fly
вместе с другими параметрами уровня MergeTree
, такими как number_of_mutations_to_throw
и number_of_mutations_to_delay
, чтобы ограничить бесконечный рост нематериализованных мутаций.
Поддержка подзапросов и недетерминированных функций
Легкие обновления имеют ограниченную поддержку подзапросов и недетерминированных функций. Поддерживаются только скалярные подзапросы с результатом разумного размера (контролируется параметром mutations_max_literal_size_to_replace
). Поддерживаются только постоянные недетерминированные функции (например, функция now()
).
Эти поведения контролируются следующими настройками:
mutations_execute_nondeterministic_on_initiator
- если true, недетерминированные функции выполняются на инициаторе реплики и заменяются как литералы в запросахUPDATE
иDELETE
. Значение по умолчанию:false
.mutations_execute_subqueries_on_initiator
- если true, скалярные подзапросы выполняются на инициаторе реплики и заменяются как литералы в запросахUPDATE
иDELETE
. Значение по умолчанию:false
.mutations_max_literal_size_to_replace
- максимальный размер сериализованных литералов в байтах, которые можно заменить в запросахUPDATE
иDELETE
. Значение по умолчанию:16384
(16 KiB).