если уже есть активный мерж, то задача не ставится.
В сети нашел инфу, что кому-то помогало попытаться сделать OPTIMIZE в момент пока нет задач, я пытался это поймать и выполнил с десяток или больше запросов на OPTIMIZE. Но вот на скрине есть мерж который выполняется уже 1000сек и он выполнился только на 0.05%
Получается эти задачи все равно ставились?
вставку остановить есть возможность? пока вы вставляете - КХ будет запускать новые мержи
может можно для этого шарда вес=0 сделать? это сработает?
OPTIMIZE - это не столько директивный приказ, сколько пожелание Кликхаусу. Типа - давай, посмотри, не пора ли тебе что-нибудь по-мерджить. А он попробует сделать (или нет), исходя из текущей нагрузки, состояния разделов в таблице и фазы Луны.. Отношения не как у водителя и машины, а скорее как у адмирала флота на флагманском корабле (которым непосредственно командует всё же капитан):) Если хотите бОльшей степени детерминированности, пробуйте OPTIMIZE FINAL. Для больших таблиц лучше ограничивать команду определённым PARTITION. А ещё лучше OPTIMIZE FINAL и настройкой SETTINGS optimize_throw_if_noop=1
Спасибо за объяснение. Можно ли приостановить запись в кх с помощью weight=0 для шарда? нужно ли перезапускать кх,
так а кто пишет в КХ? у вас вставка через distributed таблицу с ключом rand?
нет, у меня зукипер (и старый кх 22.2.2.1) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/buyouts_new_local', '{replica}') PARTITION BY toYYYYMMDD(buyout_date_time)
Хмм, ваще может так статься что мерж застрял, у него есть прогресс?
да, но медленный.
мне оч нужно выполнить DEDUPLICATE для таблицы, потому что произошла небольшая авария и данные задублировались. Вставку я остановить не могу, это хайлоад прод, но могу попробовать через весы выставить 0 для этого шарда. Это поможет? дедуплицировать нужно партицию на всем кластере, поэтому если так получится, то повторю еще на другой ноде
Много данных задублицировалось то?
А сколько строк в проблемной партиции?
Тяжелый мерж вообще относится к данной партиции или нет?
неужто предложите ему перетащить партишн в другую табличку и там дедуплицнуть?
Ну, один из вариантов
SELECT count() FROM tbl WHERE _partition_id = ''
а зукипер тут причём? в какую таблицу идёт вставка? как распределяете данные между шардами?
<yandex> <zookeeper> <node index="1"> <host>rtb-ch01-techru</host> <port>2181</port> </node> <node index="2"> <host>rtb-ch03-techru</host> <port>2181</port> </node> <node index="3"> <host>rtb-ch05-techru</host> <port>2181</port> </node> </zookeeper> <remote_servers> <rtb_cluster> <shard> <weight>1</weight> <internal_replication>True</internal_replication> <replica> <host>rtb-ch01-techru</host> <port>9000</port> <user>rtbch01_user</user> <password>***</password> </replica> </shard> <shard> <weight>1</weight> <internal_replication>True</internal_replication> <replica> <host>rtb-ch05-techru</host> <port>9000</port> <user>rtbch05_user</user> <password>***</password> </replica> </shard> <shard> <weight>1</weight> <internal_replication>True</internal_replication> <replica> <host>rtb-ch03-techru</host> <port>9000</port> <user>rtbch03_user</user> <password>***</password> </replica> </shard> </rtb_cluster> </remote_servers>
Обсуждают сегодня