Size: a a a

ClickHouse не тормозит

2021 February 11

S

Slach in ClickHouse не тормозит
Maxim Dzeckelev
Привет. Помогите пожалуйста разобраться в проблеме, насколько я понимаю она как то связанно с сетью.

версия 21.1.2.15,
на 21.2 тоже воспроизводится

Делаю 10 последовательных селектов с увеличением offset по 100000 записаей из destributed таблицы (~ 1 миллион записей), подобных этому
SELECT date, id, volume
FROM v1_keywords.keywords
WHERE date = '2021-02-09'
ORDER BY id LIMIT ?,?

В произвольный момоент времени во время выполения запроса соеденение с сервером рвётся по причине падения сервера к которому подключен клиент.

Судя про трейсу где то недалеко от этого места вызвавется исключение
https://github.com/ClickHouse/ClickHouse/blob/21.1/src/Client/MultiplexedConnections.cpp#L240


Таблицы:
CREATE TABLE IF NOT EXISTS v1_keywords.local_keywords
   ON CLUSTER cluster
(
   date Date,
   id UInt64,
   volume String,
)
   ENGINE = ReplicatedMergeTree(
            '/clickhouse/tables/{shard}/v1_keywords/local_keywords',
            '{replica}')
       PARTITION BY date
       ORDER BY (date, id, volume)
       SETTINGS index_granularity = 8192;

CREATE TABLE IF NOT EXISTS v1_keywords.keywords
   ON CLUSTER cluster
(
   date Date,
   id UInt64,
   volume UInt32
)
   ENGINE Distributed(cluster, v1_keywords, local_keywords,
          id);


clickhouse-server.log
...
2021.02.11 09:27:41.851524 [ 108 ] {20fa50e4-08d9-41a0-84fa-8537f8a56a67} <Trace> StorageDistributed (keywords): (ch-sub-4:9000) Cancelling query because enough data has been read

clickhouse-server.err.log
...
2021.02.11 09:27:41.855597 [ 44 ] {} <Trace> BaseDaemon: Received signal 11
2021.02.11 09:27:41.856436 [ 115 ] {} <Fatal> BaseDaemon: ########################################
2021.02.11 09:27:41.856816 [ 115 ] {} <Fatal> BaseDaemon: (version 21.1.2.15 (official build), build id: E40526A12E9A8F3819A18694F6B798F10C624D5C) (from thread 108) (query_id: 20fa50e4-08d9-41a0-84fa-8537f8a56a67) Received signal Segmentation fault (11)
2021.02.11 09:27:41.859238 [ 115 ] {} <Fatal> BaseDaemon: Address: 0xa0 Access: read. Address not mapped to object.
2021.02.11 09:27:41.859267 [ 115 ] {} <Fatal> BaseDaemon: Stack trace: 0xf7e3e31 0xf7f3053 0xf7f3787 0xe9a0847 0xf91077c 0xf910f49 0xf91081c 0xf910f49 0xf914500 0xf919005 0x86415ed 0x86451a3 0x7fc06de4a609 0x7fc06dd6b293
2021.02.11 09:27:41.861343 [ 115 ] {} <Fatal> BaseDaemon: 2. DB::Connection::receivePacket(std::__1::function<void (Poco::Net::Socket&)>) @ 0xf7e3e31 in /usr/bin/clickhouse
2021.02.11 09:27:41.861739 [ 115 ] {} <Fatal> BaseDaemon: 3. DB::MultiplexedConnections::receivePacketUnlocked(std::__1::function<void (Poco::Net::Socket&)>) @ 0xf7f3053 in /usr/bin/clickhouse
2021.02.11 09:27:41.861756 [ 115 ] {} <Fatal> BaseDaemon: 4. DB::MultiplexedConnections::drain() @ 0xf7f3787 in /usr/bin/clickhouse
2021.02.11 09:27:41.861774 [ 115 ] {} <Fatal> BaseDaemon: 5. DB::RemoteQueryExecutor::finish(std::__1::unique_ptr<DB::RemoteQueryExecutorReadContext, std::__1::default_delete<DB::RemoteQueryExecutorReadContext> >*) @ 0xe9a0847 in /usr/bin/clickhouse
2021.02.11 09:27:41.862187 [ 115 ] {} <Fatal> BaseDaemon: 6. DB::PipelineExecutor::tryAddProcessorToStackIfUpdated(DB::ExecutingGraph::Edge&, std::__1::queue<DB::ExecutingGraph::Node*, std::__1::deque<DB::ExecutingGraph::Node*, std::__1::allocator<DB::ExecutingGraph::Node*> > >&, std::__1::queue<DB::ExecutingGraph::Node*, std::__1::deque<DB::ExecutingGraph::Node*, std::__1::allocator<DB::ExecutingGraph::Node*> > >&, unsigned long) @ 0xf91077c in /usr/bin/clickhouse
2021.02.11 09:27:41.862205 [ 115 ] {} <Fatal> BaseDaemon: 7. DB::PipelineExecutor::prepareProcessor(unsigned long, unsigned long, std::__1::queue<DB::ExecutingGraph::Node*, std::__1::deque<DB::ExecutingGraph::Node*, std::__1::allocator<DB::ExecutingGraph::Node*> > >&, std::__1::queue<DB::ExecutingGraph::Node*, std::__1::deque<DB::ExecutingGraph::Node*, std::__1::allocator<DB::ExecutingGraph::Node*> > >&, std::__1::unique_lock<std::__1::mutex>) @ 0xf910f49 in /usr/bin/clickhouse
2021.02.11 09:27:41.862218 [ 115 ] {} <Fatal> BaseDaemon: 8. DB::PipelineExecutor::tryAddProcessorToStackIfU
OOM Killer пришел наверное
?
источник

АИ

Антон Ильганаев... in ClickHouse не тормозит
Dmitriy Novikov
может парсить xml до загрузки в бд?
Возможно. Пока лучше не нашел ничего
источник

MD

Maxim Dzeckelev in ClickHouse не тормозит
Slach
OOM Killer пришел наверное
?
Увы, памяти ему достаточно.
Сервер падает вместе с контейнером если он в докере локально.
На  витруалках в GCP с 8 гб каждая памяти аналогичная беда. Запрос кушает немного.
Вот аналогичный запрос который прошел и не упал
2021.02.11 09:27:41.694732 [ 46 ] {042c5fac-3490-40c2-9dff-8b59a0ff9c24} <Debug> MemoryTracker: Peak memory usage (for query): 50.52 MiB.
источник

AK

Anton Khokhrin in ClickHouse не тормозит
Антон Ильганаев
Коллеги, у меня есть исходные данные в xml
чеки продаж.
Мне необходимо написать выгрузку в clickhouse что-бы потом можно было отдать эти данные аналитикам и они уже в powerbi строили свою отчетность.
SQL обычный не справляется с такой нагрузкой 50 тыс чеков в день

Если кто может помочь напишите в личку
Что вы такое делаете, что БД не справляется с 50к в день??
источник

MD

Maxim Dzeckelev in ClickHouse не тормозит
Slach
OOM Killer пришел наверное
?
Может поможет, трейс с сервака который не отдал данные

2021.02.11 11:20:43.692816 [ 89 ] {} <Error> void Coordination::ZooKeeper::receiveThread(): Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 0. Bytes expected: 4., Stack trace (when copying this message, always include the lines below):

0. DB::ReadBuffer::readStrict(char*, unsigned long) @ 0x863c5b5 in /usr/bin/clickhouse
1. Coordination::ZooKeeper::receiveEvent() @ 0xfb9f62a in /usr/bin/clickhouse
2. Coordination::ZooKeeper::receiveThread() @ 0xfb9ef81 in /usr/bin/clickhouse
3. ? @ 0xfba4c61 in /usr/bin/clickhouse
4. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x86415ed in /usr/bin/clickhouse
5. ? @ 0x86451a3 in /usr/bin/clickhouse
6. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.1.2.15 (official build))
2021.02.11 11:20:43.696040 [ 89 ] {} <Error> void Coordination::ZooKeeper::finalize(bool, bool): Poco::Exception. Code: 1000, e.code() = 107, e.displayText() = Net Exception: Socket is not connected, Stack trace (when copying this message, always include the lines below):

0. ? @ 0x11dcf5be in /usr/bin/clickhouse
1. Poco::Net::SocketImpl::shutdown() @ 0x11dd051c in /usr/bin/clickhouse
2. Coordination::ZooKeeper::finalize(bool, bool) @ 0xfb9b0ef in /usr/bin/clickhouse
3. Coordination::ZooKeeper::receiveThread() @ 0xfb9f5ac in /usr/bin/clickhouse
4. ? @ 0xfba4c61 in /usr/bin/clickhouse
5. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x86415ed in /usr/bin/clickhouse
6. ? @ 0x86451a3 in /usr/bin/clickhouse
7. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
8. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.1.2.15 (official build))
2021.02.11 11:20:43.692990 [ 78 ] {} <Error> void Coordination::ZooKeeper::receiveThread(): Code: 33, e.displayText() = DB::Exception: Cannot read all data. Bytes read: 0. Bytes expected: 4., Stack trace (when copying this message, always include the lines below):

0. DB::ReadBuffer::readStrict(char*, unsigned long) @ 0x863c5b5 in /usr/bin/clickhouse
1. Coordination::ZooKeeper::receiveEvent() @ 0xfb9f62a in /usr/bin/clickhouse
2. Coordination::ZooKeeper::receiveThread() @ 0xfb9ef81 in /usr/bin/clickhouse
3. ? @ 0xfba4c61 in /usr/bin/clickhouse
4. ThreadPoolImpl<std::__1::thread>::worker(std::__1::__list_iterator<std::__1::thread, void*>) @ 0x86415ed in /usr/bin/clickhouse
5. ? @ 0x86451a3 in /usr/bin/clickhouse
6. start_thread @ 0x9609 in /usr/lib/x86_64-linux-gnu/libpthread-2.31.so
7. clone @ 0x122293 in /usr/lib/x86_64-linux-gnu/libc-2.31.so
(version 21.1.2.15 (official build))
источник

АШ

Алексей Шило... in ClickHouse не тормозит
Добрый день есть ли информация по восстановлению distibuted таблиц . На офф сайте вообще мало информации. Кто восстанавливал данные когда зукипер умер раздел. Не можем восстановит даннве в readonly mode. Flag force restore не помогает. Конфиг такой 2 шарда в каждом по 2 реплики. 2й шард работает. На первом не дает вставку. На обоих при попытке подсчетаизаписей выдает session expire
источник

D

Dj in ClickHouse не тормозит
Anton Khokhrin
Что вы такое делаете, что БД не справляется с 50к в день??
кладут сырой ХМЛ в реляционную базу и парсят его каждый раз...
источник

AK

Anton Khokhrin in ClickHouse не тормозит
Dj
кладут сырой ХМЛ в реляционную базу и парсят его каждый раз...
Ну если каждый, то да:)
источник

АИ

Антон Ильганаев... in ClickHouse не тормозит
Anton Khokhrin
Что вы такое делаете, что БД не справляется с 50к в день??
Мне надо не погружать, а например потом делать анализ например за пол года по товару из каждого чека. Стандартный анализ
источник

AS

Alexey Sokolov in ClickHouse не тормозит
Никогда не работал с массивами в КХ, пните в нужном направлении, пожалуйста.

CREATE TABLE TestTable
(
 id Int32
 , params Nested(
   name LowCardinality(String)
   , value String
 )
)
ENGINE = Memory()
;

INSERT INTO TestTable(id, params.name, params.value)
VALUES (1, ['param1', 'param2'], ['val1', 'val2']), (2, ['param1', 'param2'], ['val1', 'val3']), (3, ['param1', 'param2', 'param3'], ['val1', 'val2', 'val4']), (4, ['param1', 'param2'], ['val1', 'val3'])
;


Как с учётом такой структуры выбрать, например, айдишники записей, у которых param1=val1 и param2=val2 (в данном примере 1 и 3)?
Или выбрать айдишники, набор параметров и значений которых не уникален (в данном примере 2 и 4)?
источник

S

Slach in ClickHouse не тормозит
Alexey Sokolov
Никогда не работал с массивами в КХ, пните в нужном направлении, пожалуйста.

CREATE TABLE TestTable
(
 id Int32
 , params Nested(
   name LowCardinality(String)
   , value String
 )
)
ENGINE = Memory()
;

INSERT INTO TestTable(id, params.name, params.value)
VALUES (1, ['param1', 'param2'], ['val1', 'val2']), (2, ['param1', 'param2'], ['val1', 'val3']), (3, ['param1', 'param2', 'param3'], ['val1', 'val2', 'val4']), (4, ['param1', 'param2'], ['val1', 'val3'])
;


Как с учётом такой структуры выбрать, например, айдишники записей, у которых param1=val1 и param2=val2 (в данном примере 1 и 3)?
Или выбрать айдишники, набор параметров и значений которых не уникален (в данном примере 2 и 4)?
WHERE params.name='param1' AND params.value='val1' ?
источник

EP

Evgen Pr in ClickHouse не тормозит
коллеги, подскажите плз, как посмотреть, что именно может крепко нагружать базу, какой запрос
источник

AB

Andrey Burov in ClickHouse не тормозит
show processlist;
источник

AS

Alexey Sokolov in ClickHouse не тормозит
Slach
WHERE params.name='param1' AND params.value='val1' ?
Это для одного параметра, а для нескольких?

В лоб у меня получился вот такой монстр:
select
 id
from
 TestTable
   array join params
where
 (params.name, params.value) in (('param1', 'val1'), ('params2', 'val2'))
group by
 id
having
 count()  > 1


Второй пример я сделал так:
select
 (params.name, params.value) as p
 , groupArray(id)
from
 TestTable
group by
 p
having
 uniq(id) > 0


Но мне оба решения не нравятся, наверняка это можно сделать проще и быстрее.
источник

S

Slach in ClickHouse не тормозит
Alexey Sokolov
Никогда не работал с массивами в КХ, пните в нужном направлении, пожалуйста.

CREATE TABLE TestTable
(
 id Int32
 , params Nested(
   name LowCardinality(String)
   , value String
 )
)
ENGINE = Memory()
;

INSERT INTO TestTable(id, params.name, params.value)
VALUES (1, ['param1', 'param2'], ['val1', 'val2']), (2, ['param1', 'param2'], ['val1', 'val3']), (3, ['param1', 'param2', 'param3'], ['val1', 'val2', 'val4']), (4, ['param1', 'param2'], ['val1', 'val3'])
;


Как с учётом такой структуры выбрать, например, айдишники записей, у которых param1=val1 и param2=val2 (в данном примере 1 и 3)?
Или выбрать айдишники, набор параметров и значений которых не уникален (в данном примере 2 и 4)?
SELECT groupArray(arraySort((x) -> x.1, arrayZip(params.name,params.value))) AS uniq_params, count() AS ids_count
FROM TestTable
GROUP BY uniq_params
HAVING ids_count > 1


попробуйте почитать
источник

S

Slach in ClickHouse не тормозит
Evgen Pr
коллеги, подскажите плз, как посмотреть, что именно может крепко нагружать базу, какой запрос
SELECT * FROM system.processes;
SELECT * FROM system.merges;
SELECT * FROM system.parts_log;
SELECT * FROM system.mutations;
источник

EP

Evgen Pr in ClickHouse не тормозит
дякую
источник

S

Slach in ClickHouse не тормозит
Evgen Pr
коллеги, подскажите плз, как посмотреть, что именно может крепко нагружать базу, какой запрос
SELECT * FROM system.query_log;
источник

РМ

Рязанский Михаил... in ClickHouse не тормозит
Всем привет!
Подскажите плз, как и можно ли вообще сделать аналог SUM(col) Over()
без разворота массивов ( в выборке много столбцов и для нескольких из них придётся разворачивать )
И без джойнов (таблицы жирные)
источник

AS

Alexey Sokolov in ClickHouse не тормозит
Slach
SELECT groupArray(arraySort((x) -> x.1, arrayZip(params.name,params.value))) AS uniq_params, count() AS ids_count
FROM TestTable
GROUP BY uniq_params
HAVING ids_count > 1


попробуйте почитать
groupArray - это очепятка и там должен быть arrayDistinct?
источник