184 похожих чатов

Здравствуйте. На некоторых столбцах таблицы (подневное партиционирование) стоит однодневный TTL (

"dateField + toIntervalDay(1)" ).
В результате слияний, дополнительно подгоняемых OPTIMIZE FINAL, партиции, устаревшие на несколько дней (и в которые больше не приходят данные) свернулись в единственный парт.
Но в некоторых из таких партиций-партов столбцы с суточным TTL не до конца обнуляются (иногда несколько десятков % записей оставались со своими исходными значениями в TTL-столбцах).

В файловой системе внутри соответствующих parts в файле ttl.txt все столбцы, которые должны были очиститься перечислены уже с нулями в min и max:( Т.е. если clickhouse ориентируется на ttl.txt, то он должен считать свою работу выполненной?
(А вот в system.parts для этих parts указаны правильные delete_ttl_info_max и delete_ttl_info_min).

Здесь что-то уже пошло не так, или такое может быть?

( Если к таким parts применить MATERIALIZE TTL IN PARTITION , то после завершения мутации TTL-столбцы полностью очищаются, как и должно было быть. )

9 ответов

13 просмотров

может есть TTL only drop parts=true? хотя на колонки влиять не должен. если можете воспроизвести - откройте баг.

Konstantin-Rebrikov Автор вопроса
【D】【J】
может есть TTL only drop parts=true? хотя на колон...

На таблицу установлен ttl_only_drop_parts=1. Но, действительно, он же для таблицы в целом, не должен препятствовать обнуление отдельных столбцов. И, в общем и целом, столбцы в старых партах обнуляются, вот только иногда не до конца. (Версия 20.10.7.4) > если можете воспроизвести - откройте баг Посмотрю, как дальше будет схлопывание происходить.

Konstantin Rebrikov
На таблицу установлен ttl_only_drop_parts=1. Но, д...

есть вариант что этот случай просто так реализован (колоночные ТТЛ + ttl_only_drop_parts)... хотя

это речь про summingMT ? а кто сказал что записи из партиции в партицию смогут перепрыгнуть? вы хакнули - сломали себе таблицу похоже это все делается через TTL group by современный КХ такое не позволяет create table t1(A Int64, D Date TTL D + interval 1 day, V Float64) Engine=SummingMergeTree partition by D order by A DB::Exception: Trying to set TTL for key column D.

Konstantin-Rebrikov Автор вопроса
Denny [Altinity]
это речь про summingMT ? а кто сказал что записи и...

Я в вопросе этого не указал:( - нет, там не SummingMergeTree, a просто ReplicatedMergeTree. За предыдущие дни в свёрнутых до 1 парта партициях (слияния форсировались ночными optimize final) иногда оставалась часть записей с не до конца очищенными COLUMN TTL столбцами (сутки: ( ...+ toIntervalDay(1))). Но поскольку у меня уже не поддерживаемая версия 20.10.7.4 и в любом случае надо на 21.3 переезжать, я в итоге перестал с этим эффектом разбираться. Вместо OPTIMIZE FINAL пока использую аккуратные MATERIALIZE TTL IN PARTITION.

Konstantin Rebrikov
Я в вопросе этого не указал:( - нет, там не Summin...

я тогда видимо вообще все не так понял. Т.е. у вас ReplicatedMergeTree , вы пытаетесь колонки очищать toIntervalDay(1) но у вас часть строк остается неочищенными, несмотря на то что в партиции один парт? При этом эти поля с TTL, не являются частью partition by / order by.

Konstantin-Rebrikov Автор вопроса
Denny [Altinity]
я тогда видимо вообще все не так понял. Т.е. у ва...

Таблица ReplicatedMergeTree ( end_datetime типа DateTime - время самого события): ... PARTITION BY toYYYYMMDD(end_datetime) ORDER BY (user_id, end_datetime) TTL (toDate(end_datetime) + toIntervalDay(5) SETTINGS min_rows_for_wide_part = 4194304, ttl_only_drop_parts = 1; На используемом (тестовом) стенде проблемы с местом, поэтому чтобы выжать максимальное число дней в глубине хранения, поставил ... TTL toDate(end_datetime) + toIntervalDay(1) на все второстепенные столбцы. Поля, входящие в ключ, без TTL. merge_with_ttl_timeout = 14400 (дефолтный), но без дополнительного стимулирования он сам довольно лениво чистил. Пробовал периодическими MATERIALIZE TTL ClickHouse подгонять, но пару раз видимо переборщил, и нехорошее начиналось (типа того, что DJ описывал - https://t.me/clickhouse_ru/168468 ). В отличие от этого OPTIMIZE FINAL каждой ночью безопасный. Но столкнулся с тем, что при этом в старых партишнах, схлопнутых до 1 парта иногда для части записей столбцы, на которых стоит TTL toIntervalDay(1) оставались не очищенными. В итоге вернулся к периодическим MATERIALIZE TTL – но вдумчиво и аккуратно, только "MATERIALIZE TTL IN PARTITION". У меня устаревшая версия 20.10, так что, наверное, это не актуально – на 21.3 надо будет это заново смотреть.

Konstantin Rebrikov
Таблица ReplicatedMergeTree ( end_datetime типа Da...

y вас просто OPTIMIZE FINAL не срабатывает иногда, потому что места на диске нет. запускайте c optimize_throw_if_noop=1 -- увидите ошибку

Konstantin Rebrikov
Таблица ReplicatedMergeTree ( end_datetime типа Da...

>У меня устаревшая версия 20.10, так что, наверное, это не актуально – на 21.3 надо будет это заново смотреть. мои 2 копейки. я не видел глобальных исправлений связанных с ТТЛ выполненных в этом промежутке. можете тут смотреть https://github.com/ClickHouse/ClickHouse/issues/10128 полайкайте мой тикет плз (надо бы его отредактировать чтоб он на колочный ттл тоже был применим) https://github.com/ClickHouse/ClickHouse/issues/20451

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Привет, запускаю werf в dind в k8s, получаю ошибку на этапе build/beforeSetup: /.werf/stapel/embedded/bin/bash: /.werf/scripts/5898bdfe5214357d3706b879cc8d3d78460fb379607cbd...
florius0
7
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
32
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
Карта сайта