Ребят, может подсказать кто-нибудь? Есть табличка ReplacingMergeTree, есть в ней дубли. При чём дубли в неожиданных местах, раз в несколько месяцев просто появляются и никуда не исчезают. Запись в таблицу постоянно происходит, ну и схлопывание более-менее нормально отрабатывает, а тут столкнулись с дублями. Подскажите куда копать, как исправить, если возможно, и почему старые записи не оптимизируются одновременно с новыми. Спасибо
Причин, почему в Replacing таблицах дубли много.
Самый первый вопрос, - имеете ли вы дело с дублями потому что они ЕЩЁ не схлопнулись, или потому что для некоторых записей дубли и НЕ ДОЛЖНЫ схлопнуться.
Соответственно, приостановить запись в таблицу, затем либо успешный OPTIMIZE FINAL, либо добавить FINAL к SELECTу, считающему uniqExact по ключу (ну или как вы выявляете дубли). И если дублей после этого не будет - значит по каким-то причинам они ЕЩЁ не схлопывались. ("Ещё" в обычном состоянии может затянуться до бесконечности).
Но если после этого всё равно дубли - значит либо всё-таки предыдущий случай (у кликхауса могли быть причины не до предела мерджить (превышение максимального размера парта, например), либо другая группа причин: эти дубли не могли и не должны были схлопнуться.
Например, не схлопываются, если записи, образующие дубль попали в разные партишны.
Также в случае ReplicatedReplacing таблиц, поверх которых Distributed, с которым мы и работаем, дубли могут получаться, когда записи на разных серверах (т.е. шардирование должно учитывать потребности Replacing таблиц)