Size: a a a

ClickHouse не тормозит

2020 September 16

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Vladimir
Привет! Прописываю listen_host для конкретного юзера и разрешаю ему внешние подключения. Все было нормально до того как мне понадобилось снимать prometheus.
 <prometheus>
       <endpoint>/metrics</endpoint>
       <port>8001</port>
       <metrics>true</metrics>
       <events>true</events>
       <asynchronous_metrics>true</asynchronous_metrics>
   </prometheus>
Порт открывается, но только на 0.0.0.0.
Можно как-то для него отдельно прописать listen_host чтобы не открывать весь CH всем пользователям?
listen_host -- вообще не имеет отношения к пользователям. Какая-то несуразица в вопросе.

listen_host -- это какой ip будет слушать КХ, прописывается в config.xml
источник

MP

Maxim Pronkin in ClickHouse не тормозит
@den_crane всегда было интересно почему для конфигурационных файлов был выбран xml?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Askhat Sarkeev
Привет,
Создал таблицу с движком ReplicatedReplacingMergeTree
Потом дропнул и попробовал написать в нее, но таблица перешла в readonly mode
При повторной попытке дропа выдеат следующее:

DB::Exception: Can't drop readonly replicated table (need to drop data in ZooKeeper as well)
отвалился зукипер?
источник

pk

papa karlo in ClickHouse не тормозит
потому что в метрике конфиги в xml
источник

AS

Askhat Sarkeev in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
отвалился зукипер?
мне уже подсказали, все заработало)
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maxim Pronkin
@den_crane всегда было интересно почему для конфигурационных файлов был выбран xml?
я ХЗ, я вообще не имею отношения к разработке и никогда не работал в яндексе, и начал использовать КХ пару лет назад. Все что я знаю про КХ подчерпнуто из этого чатика.
источник

MP

Maxim Pronkin in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
я ХЗ, я вообще не имею отношения к разработке и никогда не работал в яндексе, и начал использовать КХ пару лет назад. Все что я знаю про КХ подчерпнуто из этого чатика.
Как нибудь на конфе задам вопрос)
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Maxim Pronkin
Как нибудь на конфе задам вопрос)
папа карло вам уже ответил, он точно из яндекса и видимо один из пап
источник

MP

Maxim Pronkin in ClickHouse не тормозит
ок)
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Max Ulan
Подскажите, пожалуйста, что не так с использованием runningAccumulate:
SELECT
   toDateTime(HOUR) AS HOUR,
   REACH,
   runningAccumulate(REACH_STATE) AS REACH_CUM
FROM
(
   SELECT
       toUnixTimestamp(toStartOfHour(toTimeZone(toDateTime(start_dt), 'America/New_York'))) AS HOUR,
       uniqExactState(account_id) AS REACH_STATE,
       uniqExact(account_id) AS REACH
   FROM viewing_events_2v4
   WHERE ((start_date >= '2019-12-01') AND (start_date < '2019-12-02')) AND (viewing_type = 0)
   GROUP BY HOUR
)
ORDER BY HOUR ASC
LIMIT 40000000

┌────────────────HOUR─┬───REACH─┬─REACH_CUM─┐
│ 2019-12-01 11:00:00 │ 1559016 │   1559016 │
│ 2019-12-01 12:00:00 │ 2098924 │   2098924 │
│ 2019-12-01 13:00:00 │ 2932804 │   2932804 │
│ 2019-12-01 14:00:00 │ 3660577 │   3660577 │
│ 2019-12-01 15:00:00 │ 4069815 │   4069815 │
│ 2019-12-01 16:00:00 │ 4242950 │   4242950 │
│ 2019-12-01 17:00:00 │ 4798137 │   4798137 │
│ 2019-12-01 18:00:00 │ 4138177 │   4138177 │
│ 2019-12-01 19:00:00 │ 3976740 │   3976740 │
│ 2019-12-01 20:00:00 │ 3956955 │   3956955 │
│ 2019-12-01 21:00:00 │ 4510383 │   4510383 │
│ 2019-12-01 22:00:00 │ 4804025 │   4804025 │
│ 2019-12-01 23:00:00 │ 5324659 │   5324659 │
│ 2019-12-02 00:00:00 │ 6375153 │   6375153 │
│ 2019-12-02 01:00:00 │ 6841633 │   6841633 │
│ 2019-12-02 02:00:00 │ 6809946 │   6809946 │
│ 2019-12-02 03:00:00 │ 6215249 │   6215249 │
│ 2019-12-02 04:00:00 │ 4960951 │   4960951 │
│ 2019-12-02 05:00:00 │ 3390838 │   6727948 │
│ 2019-12-02 06:00:00 │ 2533804 │   2533804 │
│ 2019-12-02 07:00:00 │ 1868437 │   1868437 │
│ 2019-12-02 08:00:00 │ 1448003 │   1448003 │
│ 2019-12-02 09:00:00 │ 1267589 │   1267589 │
│ 2019-12-02 10:00:00 │ 1280197 │   1280197 │
└─────────────────────┴─────────┴───────────┘

24 rows in set. Elapsed: 5.802 sec. Processed 479.94 million rows, 7.20 GB (82.72 million rows/s., 1.24 GB/s.)
Значения в колонке REACH_CUM должны только возрастать, а вместо этого, в основном, копируют значение REACH
runningAccumulate для sum не для uniqExactState. uniqExactState можно через массивы, + складывать
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
waaaaaaaaat
всем привет.
у нас есть вот такие примерно селекты.

SELECT
   domainName,
   arrayFlatten(groupUniqArray(categories)) AS categoriesArray,
   arrayFlatten(groupUniqArray(categoriesRoots)) AS categoriesRootsArray,
   arrayFlatten(groupUniqArray(filterType)) AS filterTypesArray,
   count() AS count
FROM decisions
PREWHERE
   userID = '123412341234' AND
   time >= toStartOfHour(subtractMonths(now(), 1)) AND
   policyID = '943075093475' AND
   campusID = '321846928346' AND
   dnsType IN (15, 12, 8, 5) AND
   hasAny(categories, ['#1', '#4', '#8', '#3', '#2']) AND
   hasAny(categoriesRoots, ['root #1'])
GROUP BY domainName
ORDER BY count DESC
LIMIT 1000;


в массивах, передаваемых в hasAny может быть и больше элементов.
стоит задача: понять, возможно ли уменьшить время выполнения таких запросов путем апгрейда серверного оборудования.
прочитал документацию (разделы про скорость и производительность), из нее понял, что вроде как на такие большие единоразовые запросы главным образом влияет т.н. disk speed (скорость диска).
однако, до конца не понял - только ли она или нет? какие хардварные элементы можно проапгрейдить, чтобы увеличить скорость?
и еще вопрос: возможно ли увеличить производительность путем разбиения кластера на большее кол-во шардов?
или мб есть еще какие-то методы увеличения производительности?

p.s. прошу прощения, если написал что-нибудь не то, я +- новичок в этой области.
у вас в таблице индекс (domainName, time, decision)

и запрос  userID = '123412341234' AND  policyID = '943075093475' AND campusID = '321846928346' AND
подозреваю что какое-то из этих полей с большой кардинальностью и позволяет отфильтровать

но индекс не подходит

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

SK

Sergey Kotyushkin in ClickHouse не тормозит
Всем привет, подскажите, пожалуйста, по Merge таблице.

Имеются две таблицы T1 и T2. T2 включает все колонки T1 и еще одну колонку Col.
Для этих таблиц сделал Merge таблицу.

Написал запрос:
select {columns from T1}
from merge
where common_clauses and (_table = 'T1' and clauses or _table = 'T2' and Col in (v1, v2))

То есть хотел сделать запрос, который по столбцам, которые есть только в T1, проверит набор условий clauses и так же пропустит все записи из T2, которые подойдут по фильтру Col in (v1, v2).
Запрос не выполняется, говорит, что в T1 нет колонки Col.

При этом следующий запрос выполняется без ошибок:
select {columns from T1}
from merge
where common_clauses and _table = 'T2' and Col in (v1, v2)

А такой - выдает ошибку:
select {columns from T1}
from merge
where
 (common_clauses and _table = 'T2' and Col in (v1, v2))
 or
 (common_clauses and _table = 'T2' and Col in (v1, v2))

Возможно ли как то обойти данную проблему?
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sergey Kotyushkin
Всем привет, подскажите, пожалуйста, по Merge таблице.

Имеются две таблицы T1 и T2. T2 включает все колонки T1 и еще одну колонку Col.
Для этих таблиц сделал Merge таблицу.

Написал запрос:
select {columns from T1}
from merge
where common_clauses and (_table = 'T1' and clauses or _table = 'T2' and Col in (v1, v2))

То есть хотел сделать запрос, который по столбцам, которые есть только в T1, проверит набор условий clauses и так же пропустит все записи из T2, которые подойдут по фильтру Col in (v1, v2).
Запрос не выполняется, говорит, что в T1 нет колонки Col.

При этом следующий запрос выполняется без ошибок:
select {columns from T1}
from merge
where common_clauses and _table = 'T2' and Col in (v1, v2)

А такой - выдает ошибку:
select {columns from T1}
from merge
where
 (common_clauses and _table = 'T2' and Col in (v1, v2))
 or
 (common_clauses and _table = 'T2' and Col in (v1, v2))

Возможно ли как то обойти данную проблему?
нет. Engine=Merge тут не подходит

Либо union all
Либо одинаковый набор колонок, но так как условие _table = 'T2' обрабатывается *скажем последним то читаться T2 будет всегда
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
* все колонки читаются в параллель

Если хотелось сделать JOIN двух таблиц, то конечно это работать не может
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Engine=Merge делает union all (подобие)
источник

SK

Sergey Kotyushkin in ClickHouse не тормозит
понятно, рассчитывали на то что, например, написав, if(_table = 'T2', Col(v1, v2), 1) КХ поймет что дальше первого условия в if идти не нужно и с проблемой отсутствия колонки не столкнемся)
похоже, добавим эту колонку в T1
спасибо
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Sergey Kotyushkin
понятно, рассчитывали на то что, например, написав, if(_table = 'T2', Col(v1, v2), 1) КХ поймет что дальше первого условия в if идти не нужно и с проблемой отсутствия колонки не столкнемся)
похоже, добавим эту колонку в T1
спасибо
не понимаю что вы вообще делаете. Зачем вам T2 ? Это вместо in (select ... from T2 ) ?

чем больше смотрю тем больше понимаю что запрос не имеет смысла
источник

SK

Sergey Kotyushkin in ClickHouse не тормозит
хотели объединить сбор строк из двух таблиц. Union all сильно изменял запросы. Решили использовать Merge, так как делает то что нужно практически не меняя запроса.
в последствии появилось условие, по которому из второй таблицы нужно забирать данные отфильтрованные по колонке, которой нет в первой таблице.
источник

V

Vladimir in ClickHouse не тормозит
Denny Crane [not a Yandex bot]
listen_host -- вообще не имеет отношения к пользователям. Какая-то несуразица в вопросе.

listen_host -- это какой ip будет слушать КХ, прописывается в config.xml
Да, перепутал название. Я имел ввиду, что listen_host дефолтный, а разрешаю ходить на 8123 пользователю через его профиль <networks>. Но хочу разрешить ходить prometheus-скрапперу
источник

DC

Denny Crane [not a Y... in ClickHouse не тормозит
Vladimir
Да, перепутал название. Я имел ввиду, что listen_host дефолтный, а разрешаю ходить на 8123 пользователю через его профиль <networks>. Но хочу разрешить ходить prometheus-скрапперу
так дефолтный listen_host = localhost


но предположим что вы запускаете КХ с listen_host = 0.0.0.0
и КХ слушает 0.0.0.0 для всех трех протоколов 8123, 9000, prometheus
и вы ограничиваете пользователю доступ через networks чтобы пользоваль ходит к 8123 только с определнных ip
и что дальше? ломается скреппер потому что он ходит с сдругого ip ?
или что?
источник