Есть таблица ReplacingMergeTree с ~250 колонок. На стенде для разработки несколько раз обновляли cхему, какие-то колонки добавляли, какие-то удаляли через ALTER TABLE DROP COLUMN IF EXISTS mcolumn1
Потом встала необходимость использовать мутации. Мутации которые затрагивают определенный период времени падают с ошибкой
select * from system.mutations where is_done = 0
order by create_time limit 1 format Vertical;
database: scans_v2
table: nodes
mutation_id: mutation_8683024.txt
command: UPDATE correlated_state = 'UNSCANNED' WHERE (start >= '2021-10-26 14:42:18') AND (start <= '2021-11-25 00:00:00') AND (correlated_state = 'UNKNOWN')
create_time: 2022-04-13 07:39:56
block_numbers.partition_id: ['']
block_numbers.number: [8683024]
parts_to_do_names: ['202110_374935_375516_145_4413180']
parts_to_do: 1
is_done: 0
latest_failed_part: 202110_374935_375516_145_4413180
latest_fail_time: 2022-04-21 13:32:44
"latest_fail_reason: Code: 47, e.displayText() = DB::Exception: Missing columns: 'mcolumn1' 'mcolumn2' 'mcolumn3' ... 'mcolumnN' while processing query: 'ok_column1, ok_column2, mcolumn1, mcolumn2, mcolumn3, maybe you meant: [...] (version 21.3.20.1 (official build))"
За некоторое время таких упавших мутаций накопилось более 1.5 тыс. Обычные запросы стали работать в 10-20 раз медленне (например, 1с -> 20c).
После убийства мутаций kill mutation where is_done = 0 and length(latest_fail_reason) > 0 все стало работать нормально.
На самом деле мутации с fail_reason копились и до этого (миграции схемы), но не в таком количестве и их убийство помогало.
Что могло привести к такой ошибке? Можно ли дополнительно диагностировать проблемные партиции? И как это можно исправить?
Пока просто пропускаю проблемные партиции при новых мутациях и убиваю мутации с fail_reason.
Покопал еще немного, оказалось что проблемные партиции в compact формате. На диске в этом парте в columns.txt есть потерянные колонки. Что там в бинарных данных не знаю как посмотреть. После optimize table ... partition ..., остался только один wide part и все стало проходить на этой партиции. ALTER TABLE DROP COLUMN неправильно работает на part'ах в формате compact?
Отвечу сам себе для истории и поиска. Причиной оказался баг при удалении nested таблицы в part'е c форматом compact. Завел issue https://github.com/ClickHouse/ClickHouse/issues/36718
Обсуждают сегодня