Size: a a a

ClickHouse не тормозит

2021 March 22

RK

Rebrikov Konstantin in ClickHouse не тормозит
процедура OPTIMIZE FINAL для партиции 20210320
Висит в PROCESSLIST на всём кластере.
Вызвала правильные мерджи, которые я отслеживаю в system.merges
источник

RK

Rebrikov Konstantin in ClickHouse не тормозит
Rebrikov Konstantin
И если я не запутался, то мораль сей басни в том, что для инициирования принудительного сбрасывания значений просроченных column TTL столбцов, надо использовать прямо предназначающийся для этого MATERIALIZE TTL (IN PARTITION ...)  а не идти обходными путями через OPTIMIZE FINAL (PARTITION ...)
Это я, конечно, поторопился с такими заявлениями.
Помимо очевидного и весьма вероятного "запутался", возможно и что у меня какой-то экзотический случай, из которого никакие общие выводы не следуют.

Для той же конфигурации и той же схемы даных имеются странные симптомы в работе COLUMN TTL, - про которые я Issue заводил: https://github.com/ClickHouse/ClickHouse/issues/21827
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Rebrikov Konstantin
Это я, конечно, поторопился с такими заявлениями.
Помимо очевидного и весьма вероятного "запутался", возможно и что у меня какой-то экзотический случай, из которого никакие общие выводы не следуют.

Для той же конфигурации и той же схемы даных имеются странные симптомы в работе COLUMN TTL, - про которые я Issue заводил: https://github.com/ClickHouse/ClickHouse/issues/21827
DEFAULT now() -- TTL toDate(end_datetime) + toIntervalDay(1),

now разный на репликах (это кажется баг, должно использоваться время создания таски в ZK)
источник

RK

Rebrikov Konstantin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
DEFAULT now() -- TTL toDate(end_datetime) + toIntervalDay(1),

now разный на репликах (это кажется баг, должно использоваться время создания таски в ZK)
Хмм... запрос (и скриншот с результатом)  относился к локальной ReplicatedMergeTree таблице. Один шард на одном из хостов. И я проверил - время на серверах кластера плюс-минус 1-2 секунды синхронизировано
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Rebrikov Konstantin
Хмм... запрос (и скриншот с результатом)  относился к локальной ReplicatedMergeTree таблице. Один шард на одном из хостов. И я проверил - время на серверах кластера плюс-минус 1-2 секунды синхронизировано
тьфу блин, я имел в виду что причина Checksums of parts don't match  -- now разный на репликах (это кажется баг, должно использоваться время создания таски в ZK)
источник

ML

Maksim Lapshin in ClickHouse не тормозит
Коллеги, не могу найти поиском ответ на следующий вопрос.

Я записываю данные по сессиям проигрывания с полем id  uuid.  UUID я генерирую сам на своем софте.


Мне кажется, что будет хорошая и полезная идея первые 4 байта uuid отвести под UTC, тогда можно будет иметь осмысленную сортировку по такому id и она будет совпадать с партиционированием по датам.

Т.е. прямой поиск по таблице в которой миллиарды строк сразу подскажет в какой партиции искать.

Прямые поиски мне нужны для джойнов, потому сессии склеиваются друг с другом по полям типа  source_id

Насколько это удачная идея или я вообще её плохо описал?

Как можно подсказать кликхаусу, в какой партиции искать запись, глядя на сам ключ (это извлекается из первых 4 байт uuid в таком формате) ?
источник

RK

Rebrikov Konstantin in ClickHouse не тормозит
Rebrikov Konstantin
Хмм... запрос (и скриншот с результатом)  относился к локальной ReplicatedMergeTree таблице. Один шард на одном из хостов. И я проверил - время на серверах кластера плюс-минус 1-2 секунды синхронизировано
Если так, то для меня это отличная новость - потому что я опасался что что-то уже пошло не так на более фундаментальном уровне, и с потенциально значительными последствиями:)

После ошибки с Checksums (в моём случае) в ходе merge (когда они бывают, а это происходит всё же изредка), судя по логам, происходит немедленный откат: неудачный tmp_merge парт убивают. А исходные парты, для которых такая ошибка произошла, в конечном итоге  ( eventually) всё же сливаются вместе.
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maksim Lapshin
Коллеги, не могу найти поиском ответ на следующий вопрос.

Я записываю данные по сессиям проигрывания с полем id  uuid.  UUID я генерирую сам на своем софте.


Мне кажется, что будет хорошая и полезная идея первые 4 байта uuid отвести под UTC, тогда можно будет иметь осмысленную сортировку по такому id и она будет совпадать с партиционированием по датам.

Т.е. прямой поиск по таблице в которой миллиарды строк сразу подскажет в какой партиции искать.

Прямые поиски мне нужны для джойнов, потому сессии склеиваются друг с другом по полям типа  source_id

Насколько это удачная идея или я вообще её плохо описал?

Как можно подсказать кликхаусу, в какой партиции искать запись, глядя на сам ключ (это извлекается из первых 4 байт uuid в таком формате) ?
А не проще время рядом положить?

вот (substring(reinterpretAsString(A), 1, 4)), но я не уверен, рекомендую тестировать

create table B (A UUID, C String ) Engine=MergeTree() 
partition by (substring(reinterpretAsString(A), 1, 4))
Order by A

insert into B select generateUUIDv4(), number from numbers(10);

select _part, * from B
where A = '2b2fc98d-7dd6-4c15-824a-a673ebf846c5'


и тестировать что прунинг работает.
В мастере работает:

set send_logs_level='debug' ;
select _part, * from B where A = '2b2fc98d-7dd6-4c15-824a-a673ebf846c5';
Selected 1/10 parts by partition key
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Rebrikov Konstantin
Если так, то для меня это отличная новость - потому что я опасался что что-то уже пошло не так на более фундаментальном уровне, и с потенциально значительными последствиями:)

После ошибки с Checksums (в моём случае) в ходе merge (когда они бывают, а это происходит всё же изредка), судя по логам, происходит немедленный откат: неудачный tmp_merge парт убивают. А исходные парты, для которых такая ошибка произошла, в конечном итоге  ( eventually) всё же сливаются вместе.
и проблема не в синхронизации времени, мержи могут запускаться в разное время, реплика может быть чем-то занята и запустить мерж на 5 сек позже
источник

RK

Rebrikov Konstantin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
и проблема не в синхронизации времени, мержи могут запускаться в разное время, реплика может быть чем-то занята и запустить мерж на 5 сек позже
Я тогда Issue насчёт недоочистки column TTL столбцов создам - там это более подходит по формату. Можно систематично изложить ситуацию в целом, и более offlinе-ово (что для данной ситуации правильно).  В моём случае ничего критического или чрезвычайного.
И с сотней за сутки ошибок про Checksums, и с тем, что частично column TTL при обычных мерджах не срабатывает (но MATERIALIZE TTL это исправляет) - вполне можно жить.

А вам огромное спасибо за помощь!
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Rebrikov Konstantin
Я тогда Issue насчёт недоочистки column TTL столбцов создам - там это более подходит по формату. Можно систематично изложить ситуацию в целом, и более offlinе-ово (что для данной ситуации правильно).  В моём случае ничего критического или чрезвычайного.
И с сотней за сутки ошибок про Checksums, и с тем, что частично column TTL при обычных мерджах не срабатывает (но MATERIALIZE TTL это исправляет) - вполне можно жить.

А вам огромное спасибо за помощь!
создайте пожалуйста тикет с примером. Нет времени сегодня вчитываться в том что вы тут написали.
источник

AM

Alexey Milovidov in ClickHouse не тормозит
FYI тут опубликовали, может понравится: https://habr.com/en/company/rebrainme/blog/548332/
источник

ML

Maksim Lapshin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
А не проще время рядом положить?

вот (substring(reinterpretAsString(A), 1, 4)), но я не уверен, рекомендую тестировать

create table B (A UUID, C String ) Engine=MergeTree() 
partition by (substring(reinterpretAsString(A), 1, 4))
Order by A

insert into B select generateUUIDv4(), number from numbers(10);

select _part, * from B
where A = '2b2fc98d-7dd6-4c15-824a-a673ebf846c5'


и тестировать что прунинг работает.
В мастере работает:

set send_logs_level='debug' ;
select _part, * from B where A = '2b2fc98d-7dd6-4c15-824a-a673ebf846c5';
Selected 1/10 parts by partition key
Идея была в том, чтобы помочь делать быстрые прямые выборки where id=Nnnn
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maksim Lapshin
Идея была в том, чтобы помочь делать быстрые прямые выборки where id=Nnnn
эмммм, в общем ничего непонятно.
Вы хотите подсказать КХ в какой партиции искать и у вас таблица уже партиционирована по дате.
Или вы на этапе проектирования?
Или вы предлагаете фичу запилить в КХ?
источник

DT

Dmitry Titov in ClickHouse не тормозит
Maksim Lapshin
Коллеги, не могу найти поиском ответ на следующий вопрос.

Я записываю данные по сессиям проигрывания с полем id  uuid.  UUID я генерирую сам на своем софте.


Мне кажется, что будет хорошая и полезная идея первые 4 байта uuid отвести под UTC, тогда можно будет иметь осмысленную сортировку по такому id и она будет совпадать с партиционированием по датам.

Т.е. прямой поиск по таблице в которой миллиарды строк сразу подскажет в какой партиции искать.

Прямые поиски мне нужны для джойнов, потому сессии склеиваются друг с другом по полям типа  source_id

Насколько это удачная идея или я вообще её плохо описал?

Как можно подсказать кликхаусу, в какой партиции искать запись, глядя на сам ключ (это извлекается из первых 4 байт uuid в таком формате) ?
хм, если у вас в таблице ORDER BY id кх скорее всего сам сможет это использовать.
Если этого нет, то можно попробовать minmax skip index попробовать
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Andrei Dovgalyuk
Всем привет!
Кто-нибудь работал с тз имеющими переход на зимнее\летнее время?
Сегодня в полночь был переход с 03:30 на 04:30, а кх считает по-прежнему.
DB_01 :) select toTimeZone(now(), 'Asia/Tehran')

┌─toTimeZone(now(), 'Asia/Tehran')─┐
│              2021-03-22 19:27:05 │
└──────────────────────────────────┘

DB_01 :) Bye.
[root@DB_01 preprocessed_configs]# date
Mon Mar 22 20:31:13 +0430 2021
источник

AD

Andrei Dovgalyuk in ClickHouse не тормозит
Спасибо 👍
источник

ML

Maksim Lapshin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
эмммм, в общем ничего непонятно.
Вы хотите подсказать КХ в какой партиции искать и у вас таблица уже партиционирована по дате.
Или вы на этапе проектирования?
Или вы предлагаете фичу запилить в КХ?
Я хочу понять, насколько возможно выбрать у таблицы uuid в качестве primary key, если я смогу подсказать кликхаусу, что первые 4 байта - это время создания и значит по ним можно партиционировать
источник

ML

Maksim Lapshin in ClickHouse не тормозит
Dmitry Titov
хм, если у вас в таблице ORDER BY id кх скорее всего сам сможет это использовать.
Если этого нет, то можно попробовать minmax skip index попробовать
Ну вот если сделать такой uuid, то order by как раз будет иметь смысл
источник

D

Dj in ClickHouse не тормозит
Maksim Lapshin
Коллеги, не могу найти поиском ответ на следующий вопрос.

Я записываю данные по сессиям проигрывания с полем id  uuid.  UUID я генерирую сам на своем софте.


Мне кажется, что будет хорошая и полезная идея первые 4 байта uuid отвести под UTC, тогда можно будет иметь осмысленную сортировку по такому id и она будет совпадать с партиционированием по датам.

Т.е. прямой поиск по таблице в которой миллиарды строк сразу подскажет в какой партиции искать.

Прямые поиски мне нужны для джойнов, потому сессии склеиваются друг с другом по полям типа  source_id

Насколько это удачная идея или я вообще её плохо описал?

Как можно подсказать кликхаусу, в какой партиции искать запись, глядя на сам ключ (это извлекается из первых 4 байт uuid в таком формате) ?
нормальная идея, но лучше поделить на отдельные колонки и партиционировать по первой.
источник