Size: a a a

ClickHouse не тормозит

2020 June 01

AT

Al T in ClickHouse не тормозит
кстати был помню разговор перенести все конфиги в system таблицы, чего-то решили с этим в итоге ?
источник

B

Bear in ClickHouse не тормозит
Andrey
optimize_move_to_prewhere - нужно прописывать в users.xml
нет, не помогла, может еще есть варианты?
источник

A

Andrey in ClickHouse не тормозит
Bear
нет, не помогла, может еще есть варианты?
В профиль прописали? У
юзера точно тот профиль в который прописали?
источник

B

Bear in ClickHouse не тормозит
секунду)
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Kate Glushchenko
Добрый день!
Меняю структуру таблицы данных. Поэтому встала задача перелить данные из старой таблицы в новую.
Вставляю пачками по 6-10 тыс записей.
Запросом SELECT-INSERT к clickhouse-client

Через какое то время падает с Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (total) exceeded: would use 13.96 GiB (attempt to allocate chunk of 4503208 bytes), maximum: 13.96 GiB.

Если уменьшаю размер пачки, то просто падает чутка позже.

Что делать?
а что написано в select ? Как пачки формируются?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dmitry Koreckiy
Подскажите как правильно чанками по 30к перебрать таблицу размером 39kk с наименьшей нагрузкой на проц?

Пробовал разные движки MergeTree, SummingMergeTree, Log
Но везде втыкаюсь в проблемы, например:
1. SummingMergeTree
При limit 7620000, 100
0.93 sec.| 39,318,115 rows.| 4 GB
Но при этом нагрузка на 64 ядра по 30-40% на каждое

если добавить сюда еще и order by из-за того что кх не упорядоченно отдает данные, то тогда
21.26 sec.| 39,318,115 rows.| 4 GB
нагрузка до 50% на ядро
ну а как вы думаете лимит, оффсет работают?  они скроллируют сквозь себя записи, невозможно спустится сразу в 7620000

запоминать макс id (PK), и спользовать его в where ?

решения зависит от того зачем вам это нужно
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Aleksandr Vasilev
Добрый день! Подскажите, пожалуйста, как после нескольких инсертов в одну из реплик убедиться, что данные доехали до остальных реплик? Достаточно ли дожаться, чтобы в system.replication_queue было пусто? Или надежнее проверять через count()?
а зачем? репликация обычно 1,2 сек, т.е. какая разница, из какой реплики выбирать?
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Илья Цуцков
так реплицируется же на реплики, а не на шарды, разве нет?
например если опустить макрос {shard} в zk path , то таблица будет реплицирована на все ноды (будет один шард), ну и можно задать хоть 100 конфигураций, и наделать 10005000 макросов
источник

AV

Aleksandr Vasilev in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
а зачем? репликация обычно 1,2 сек, т.е. какая разница, из какой реплики выбирать?
У меня несколько этапов расчета. На первом считается куча формул в разных разрезах (разные group by) и результаты вставляются в локальные таблицы. Различные разрезы при этом запускаются на различных репликах.  А потом второй этап расчета - также запускается на всех нодах, но оперируют результатми первого этапа. Иногда не хватает несколько секунд, чтобы результат первого этапа зарепцилировался и тогда во второй этап попадают не все данные. При этом у меня есть возможность немного подождать. В это время гарантировано ничего вставляться нового не будет.
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
🌍🚀
Добрый день
С какой версии работают и работают ли вообще quantile функции с Decimal ?
У нас сейчас при любом запросе они возвращают 0.0
avg при этом работает нормально, например
больше года, до этого выдавало DB::Exception: Illegal type Decimal(18, 3) of argument for aggregate function quantile.

select quantile(a) from (select toDecimal128(10,18) a union all select toDecimal128(10,18))
10.000000000000000000
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Aleksandr Vasilev
У меня несколько этапов расчета. На первом считается куча формул в разных разрезах (разные group by) и результаты вставляются в локальные таблицы. Различные разрезы при этом запускаются на различных репликах.  А потом второй этап расчета - также запускается на всех нодах, но оперируют результатми первого этапа. Иногда не хватает несколько секунд, чтобы результат первого этапа зарепцилировался и тогда во второй этап попадают не все данные. При этом у меня есть возможность немного подождать. В это время гарантировано ничего вставляться нового не будет.
есть кворумный инсерт, там можно ждать что n реплик вставило
источник

AV

Aleksandr Vasilev in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
есть кворумный инсерт, там можно ждать что n реплик вставило
спасибо, покопаю
источник

KG

Kate Glushchenko in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
а что написано в select ? Как пачки формируются?
А вообще забавная ситуация. Пытаюсь в цикле вставить одну и ту же пачку несколько раз, размер ее знаю.  Свободной оперативы все меньше и меньше и она в итоге заканчивается. Запрос на вставку вызываю в цикле на питоне - скармливаю его через subprocess   clickhouse-client -mn -q.  Подозреваю, что клик просто не успевает освободить память
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Dmitry Koreckiy
CREATE TABLE tmp1 (
 `key` String,
 `val` Int32
) ENGINE = MergeTree()
ORDER BY key

CREATE TABLE tmp2 (
 `key` String,
 `val` Int32
) ENGINE = MergeTree()
ORDER BY key

CREATE MATERIALIZED VIEW mv_tmp1_to_tmp2 TO tmp2 (
 `key` String,
 `val` Int32
) AS
SELECT
   key,
   sum(val) as val
FROM tmp1 where key in (
   SELECT distinct key FROM tmp1
)
group by key

insert into tmp1 values ('1', 1)
insert into tmp1 values ('1', 1)

select * from tmp1

| key | val |
| 1 | 1 |
| 1 | 1 |

select * from tmp2

| key | val |
| 1 | 1 |
| 1 | 1 |
sum(val) as val
FROM tmp1


tmp1 --  это буфер инсерта (а там одна строка) настоящая таблица tmp1 вообще никогда не читается в MV
источник

DC

Denny Crane (I don't... in ClickHouse не тормозит
Kate Glushchenko
А вообще забавная ситуация. Пытаюсь в цикле вставить одну и ту же пачку несколько раз, размер ее знаю.  Свободной оперативы все меньше и меньше и она в итоге заканчивается. Запрос на вставку вызываю в цикле на питоне - скармливаю его через subprocess   clickhouse-client -mn -q.  Подозреваю, что клик просто не успевает освободить память
ничего такого тут нет, например у КХ кеш марков по умолчанию 5ГБ , поэтому надо смотреть что там у вас происходит

мониторить select  * from system.asynchronous_metrics where metric like '%MarkCacheBytes%'
плюс мержи могут начаться и скушать пару гигабайт, и т.д.

рекомендую добавить max_threads=1 для начала

а что написано в select ? Как пачки формируются?
источник

SY

Sergey Yakovlev in ClickHouse не тормозит
Приветствую! Восстанавливали таблицу после смерти zookeeper'a (переводил в не реплицированную, потом обратно), через неделю clickhouse упал со словами <Error> Application: Caught exception while loading metadata: Code: 49, e.displayText() = DB::Exception: Table contains parts with adaptive and non adaptive marks, but setting enable_mixed_granularity_parts is disabled: Cannot attach table
источник

SY

Sergey Yakovlev in ClickHouse не тормозит
гранулярность, та же что и была до этого, подскажите, пожалуйста, куда посмотреть?
источник

DT

Dmitry Titov in ClickHouse не тормозит
можно включить в настройках сервера?
источник

DT

Dmitry Titov in ClickHouse не тормозит
уже было несколько таких человек емнип
источник

KG

Kate Glushchenko in ClickHouse не тормозит
Denny Crane (I don't work at Yandex (never did))
ничего такого тут нет, например у КХ кеш марков по умолчанию 5ГБ , поэтому надо смотреть что там у вас происходит

мониторить select  * from system.asynchronous_metrics where metric like '%MarkCacheBytes%'
плюс мержи могут начаться и скушать пару гигабайт, и т.д.

рекомендую добавить max_threads=1 для начала

а что написано в select ? Как пачки формируются?
INSERT INTO table2 (  
     time,
     ...    
   )
   SELECT
     time,
     ...    
   FROM table1
where time=XXX.  Тут я знаю кол-во строк в этой пачке и пробую вставить ее в цикле.
источник