Оптимизация таблицы не выполняется сразу после мутации таблицы - PullRequest
0 голосов
/ 07 февраля 2020

Я обновляю таблицу с такими мутациями:

ALTER TABLE T1 
UPDATE column1 = replaceAll('X', 'Y')

После этого я отправляю команду optimize-final с clickhouse-client следующим образом:

OPTIMIZE TABLE T1 FINAL

Ok.

0 rows in set. Elapsed: 0.002 sec.

Но он возвращается мгновенно (0.002 sec.), и я вижу, что строки еще не обновлены.

Через пару секунд (10-50) я снова запускаю команду optimize-final, но на этот раз она зависает пока таблица не будет оптимизирована.

Это ожидаемое поведение optimize-final?

1 Ответ

2 голосов
/ 07 февраля 2020

Я вижу, что строки еще не обновлены.

ALTER TABLE T1 UPDATE - асинхронный

Вы должны проверить select count() from system.mutations where not is_done;, что ваша мутация выполнена.


В следующих версиях вы можете запускать мутации синхронно ALTER TABLE T1 UPDATE column1 = replaceAll('X', 'Y') SETTINGS mutations_sync = 2

mutations_syn c, 0, "Ожидать синхронного выполнения запросов ALTER TABLE UPDATE / DELETE (мутации) .0 - выполнить асинхронно. 1 - дождаться текущего сервера. 2 - дождаться всех реплик, если они существуют.


ОПТИМИЗИРОВАТЬ ТАБЛИЦУ T1 FINAL

ОПТИМИЗИРОВАТЬ - merge не имеет отношения к мутациям.


0 строк в наборе. Прошло: 0.002 se c.

В некоторых случаях OPTIMIZE не может запуститься и немедленно возвращается

Используйте optimize_throw_if_n oop, чтобы выяснить причину

set optimize_throw_if_noop = 1;
OPTIMIZE TABLE T1 FINAL;
...