Mike
13.10.2017
09:46:42
Konstantin
13.10.2017
09:47:46
Mike
13.10.2017
10:04:07
Sergei
13.10.2017
10:11:04
А вот этот запрос уже не будет выполняться потоково. Функции высшего порядка размножают значения по количеству элементов массива, и в результате в оперативке получаются блоки большого размера.
Попробуйте две вещи:
1. Уменьшить max_block_size. По-умолчанию значение 65536, соответсвенно, постепенно пробуйте значения 8192, 1024 и т. п.
2. Если же оперативки не хватает при GROUP BY, то можете включить агрегацию во внешней памяти.
Вот чтобы запрос легче читался продублирую:
SELECT
z.2 AS strike,
count(*) AS count
FROM
(
SELECT arrayPopFront(arrayMap((a, b) -> (a.1, a.2 - t[(b - 1)].2), arrayPushFront(arrayFilter(t -> (t.2 != 0), arrayMap((a, b) -> if(a != x[(b + 1)], (a, b), (0, 0)), x, arrayEnumerate(x))), (0, toUInt32(0))) AS t, arrayEnumerate(t))) AS z
FROM
(
SELECT arrayMap(a -> (intHash32(a) % 2), range(150000)) AS x
)
)
ARRAY JOIN z
GROUP BY z.2
Группировка выполняется после выполнения набора всех функций. Т.е. на выходе из подзапроса имеем массив, причем небольшой, по которому выполняется Array Join и группировка. Поясните пожалуйста в каком мести происходит копирование блоков данных, почему они не шарятся?
Google
Nikolai
13.10.2017
10:11:42
Алексей
13.10.2017
10:14:27
ну, да, верно, только не совсем понятно, что такое "некоторая фиксированная дата" и "некоторый фиксированный момент" :О)
> Значение 1970-01-02 умышленно захардкожено
а почему 2 января, а не 1 — есть какие-то мысли?
Nikolai
13.10.2017
10:18:18
я думаю, для того, чтобы toTime('что-то 00:00:00') не приводилась к 1970-01-01 00:00:00, что есть нулевое время, которое отображается как 0000-00-00 00:00:00, а также к которому проводится время, которое не распарсилось
SELECT toDateTime('1970-01-01 00:00:00')
┌─toDateTime(\'1970-01-01 00:00:00\')─┐
│ 0000-00-00 00:00:00 │
└─────────────────────────────────────┘
Алексей
13.10.2017
10:20:50
резонно
спасибо!
подскажите, пожалуйста, если индекс (a, b, c), то есть ли отличие по скорости, если группировать (a,b) или (b, a)?
интуитивно кажется, что разницы быть не должно, но вдруг...
Nikolai
13.10.2017
10:45:22
мне тоже кажется, что не должно. можно протестировать :)
Алексей
13.10.2017
10:47:39
да, по статистике запросов кажется весьма близким
Sergei
13.10.2017
10:53:04
Вот чтобы запрос легче читался продублирую:
SELECT
z.2 AS strike,
count(*) AS count
FROM
(
SELECT arrayPopFront(arrayMap((a, b) -> (a.1, a.2 - t[(b - 1)].2), arrayPushFront(arrayFilter(t -> (t.2 != 0), arrayMap((a, b) -> if(a != x[(b + 1)], (a, b), (0, 0)), x, arrayEnumerate(x))), (0, toUInt32(0))) AS t, arrayEnumerate(t))) AS z
FROM
(
SELECT arrayMap(a -> (intHash32(a) % 2), range(150000)) AS x
)
)
ARRAY JOIN z
GROUP BY z.2
Группировка выполняется после выполнения набора всех функций. Т.е. на выходе из подзапроса имеем массив, причем небольшой, по которому выполняется Array Join и группировка. Поясните пожалуйста в каком мести происходит копирование блоков данных, почему они не шарятся?
Еще один момент. Синтетические тест создать не получилось, но когда работаешь с реальной таблицей КХ умирает. В логе следующее...
2017.10.13 06:47:58.169694 [ 34 ] <Error> BaseDaemon: ########################################
2017.10.13 06:47:58.169743 [ 34 ] <Error> BaseDaemon: (from thread 33) Received signal Segmentation fault (11).
2017.10.13 06:47:58.169759 [ 34 ] <Error> BaseDaemon: Address: NULL pointer.
2017.10.13 06:47:58.210957 [ 34 ] <Error> BaseDaemon: 0. clickhouse-server(DB::ColumnWithTypeAndName::cloneEmpty() const+0x6d) [0x361c68d]
2017.10.13 06:47:58.210979 [ 34 ] <Error> BaseDaemon: 1. clickhouse-server(DB::Block::cloneEmpty() const+0xac) [0x2ca886c]
2017.10.13 06:47:58.210997 [ 34 ] <Error> BaseDaemon: 2. clickhouse-server(DB::ColumnTuple::cloneEmpty() const+0x32) [0x33d3ac2]
2017.10.13 06:47:58.211013 [ 34 ] <Error> BaseDaemon: 3. clickhouse-server(DB::ColumnWithTypeAndName::cloneEmpty() const+0x2d6) [0x361c8f6]
2017.10.13 06:47:58.211032 [ 34 ] <Error> BaseDaemon: 4. clickhouse-server(DB::Aggregator::initialize(DB::Block const&)+0x2e7) [0x3859ed7]
2017.10.13 06:47:58.211077 [ 34 ] <Error> BaseDaemon: 5. clickhouse-server(DB::Aggregator::executeOnBlock(DB::Block&, DB::AggregatedDataVariants&, std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >&, std::vector<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >, std::allocator<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> > > >&, std::vector<unsigned long, std::allocator<unsigned long> >&, std::vector<StringRef, std::allocator<StringRef> >&, bool&)+0x67) [0x3864267]
2017.10.13 06:47:58.211099 [ 34 ] <Error> BaseDaemon: 6. clickhouse-server(DB::Aggregator::execute(std::shared_ptr<DB::IBlockInputStream> const&, DB::AggregatedDataVariants&)+0x258) [0x3865e48]
2017.10.13 06:47:58.211115 [ 34 ] <Error> BaseDaemon: 7. clickhouse-server(DB::AggregatingBlockInputStream::readImpl()+0x651) [0x37eefe1]
2017.10.13 06:47:58.211131 [ 34 ] <Error> BaseDaemon: 8. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2cb9c91]
2017.10.13 06:47:58.211148 [ 34 ] <Error> BaseDaemon: 9. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x36903bd]
2017.10.13 06:47:58.211163 [ 34 ] <Error> BaseDaemon: 10. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2cb9c91]
2017.10.13 06:47:58.211179 [ 34 ] <Error> BaseDaemon: 11. clickhouse-server(DB::ExpressionBlockInputStream::readImpl()+0x2d) [0x36903bd]
2017.10.13 06:47:58.211195 [ 34 ] <Error> BaseDaemon: 12. clickhouse-server(DB::IProfilingBlockInputStream::read()+0x221) [0x2cb9c91]
2017.10.13 06:47:58.211214 [ 34 ] <Error> BaseDaemon: 13. clickhouse-server(DB::AsynchronousBlockInputStream::calculate(MemoryTracker*)+0x81) [0x14ccd01]
2017.10.13 06:47:58.211231 [ 34 ] <Error> BaseDaemon: 14. clickhouse-server(ThreadPool::worker()+0x141) [0x38dd251]
2017.10.13 06:47:58.211245 [ 34 ] <Error> BaseDaemon: 15. clickhouse-server() [0x414e0df]
2017.10.13 06:47:58.211272 [ 34 ] <Error> BaseDaemon: 16. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f0eac9306ba]
версия 1.1.54292
Mike
13.10.2017
10:54:20
Подскажите плиз по такому кейсу: есть старый кластер (2 шарада х2 реплики) - добавили железа и сформировали новыйх (3х2). Имеем 2 кластера. Так как решардинг не работает, создали дистрибутед таблицу на новом кластере и простым insert to x select from old_x данные переливаем (из дистрибутет в дитрибутед). но как-то уж очень медленно дело идет. больше 150-200 мегабайт в сек не поднимается скорость. при простом iинсерте из csv скорость раза в 3-4 выше. Куда посмотреть в таком случае?
Nikolai
13.10.2017
11:01:10
Mike
13.10.2017
11:02:11
Google
Nikolai
13.10.2017
11:03:30
также, могу предположить, что дело пойдет быстрее, если запустить вставки из каждой локальной таблицы (одной на шард). В таком случае, по крайней мере, не будет двойной передачи по сети
Mike
13.10.2017
11:10:52
хм, а хорошая идея. т.е. селект из старой локальной таблицы -> инсерт в новую дистрибудет?
Nikolai
13.10.2017
11:16:30
да. главное, не вставить дважды из разных реплик :)
Mike
13.10.2017
11:27:38
попробовал, получается такая же скорость как с дистрибьютед, но за счет того, что локальных две - х2 скорость. спасибо :)
Vladislav
13.10.2017
13:25:58
Никто не сталкивался у JDBC драйвера с Magic is not correct 105. Это неверная чексумма, но вроде как с подключением всё нормально
Cargeh
13.10.2017
13:28:44
хотя там код 112 был... тогда скорей всего 105 - что-то другое, сори
Vladislav
13.10.2017
13:29:17
Да, с паролем вроде 112
Alex
13.10.2017
14:26:26
Коллеги, можно ли ограничить количество ядер в конкретном запросе до 50% нагрузки 1ого ядра.
?
как ограничить до 1 ядра я знаю. Есть просто очень маленький по приоритету запрос, надо чтобы работал долго и малоресурсно.
Shamil
13.10.2017
14:29:03
включите гипертрединг)
Дед Пегас
13.10.2017
14:54:03
Если он есть ваще.
Alexey
13.10.2017
16:47:14
Shamil
13.10.2017
17:07:05
Alexey
13.10.2017
17:18:58
Может быть, но найти его будет неудобно.
Oleg
13.10.2017
17:32:21
добрый день вложенный IN оч долго работает
select Path from data where Date=today() and Path in ('test') group by Path;
0 rows in set. Elapsed: 0.368 sec. Processed 61.24 thousand rows, 3.57 MB (166.60 thousand rows/s., 9.72 MB/s.)
а вот так
select Path from data where Date=today() and Path in (select 'test') group by Path;
0 rows in set. Elapsed: 155.085 sec. Processed 44.17 billion rows, 473.71 GB (284.80 million rows/s., 3.05 GB/s.)
почему так?
можно как-то заставить использовать индекс?
papa
13.10.2017
17:34:55
Это известное неудобство, давно хотим исправить.
Связано оно с составлением конвейера запроса.
Павел Максимов
14.10.2017
11:38:44
Google
kamish
14.10.2017
12:36:20
привет, то есть если добавить таб перед переводом строки, то всё парсится?
Павел Максимов
14.10.2017
12:43:08
Vladimir
14.10.2017
13:17:37
Ребята привет! а как в jdbc драйвере можно задать параметры запроса?
sha-bang
14.10.2017
17:04:08
/stat
Combot
14.10.2017
17:04:09
combot.org/chat/-1001080295593
sha-bang
14.10.2017
17:33:23
Всем привет!
Не поможете с внешними словарями? Есть вот такой запрос и он хорошо работает
select dictGetString('api_keys','descr', number) from system.numbers where number in (1365,1,933,1437,669,1114) limit 5;
Но помимо “descr” я хотел еще вывести и номер ключа. Как вывести две колонки через внешний словарь? В словаре я прописал
<attribute>
<name>key</name>
<type>String</type>
<null_value />
</attribute>
<attribute>
<name>descr</name>
<type>String</type>
<null_value />
</attribute>
и по отдельности либо “descr” либо “key” выводятся, а вот как их вместе вывести - ума не приложу
papa
14.10.2017
17:51:54
а что такое "вывести вместе"?
select dictGetString('api_keys','descr', number), dictGetString('api_keys','key', number)
не работает?
Nikita
14.10.2017
17:55:34
/stat
Combot
14.10.2017
17:55:35
combot.org/chat/-1001080295593
sha-bang
14.10.2017
18:02:05
а что такое "вывести вместе"?
это чтобы было вот так
3 OneKey
89 LastKey
21 SimpleExKEY
и так далее
Сейчас он может либо одно вывести
3
89
21
либо другое
OneKey
LastKey
SimpleExKEY
papa
14.10.2017
18:03:14
хорошо. а тот вариант, который я предложил, что выводит?
sha-bang
14.10.2017
18:04:28
kamish
14.10.2017
18:40:26
тут, конечно, есть нюанс, потому что делается два запроса к внешнему словарю, но это мелочь
sha-bang
14.10.2017
18:48:21
а не подскажите почему получаю ошибку:
Column alias mismatch in UNION ALL chain
Когда два селекта объединяю. Причем по отдельности каждый селект выполняется без проблем
Александр
14.10.2017
18:58:26
Колонки в обоих запросах должны быть одного типа и названия
sha-bang
14.10.2017
18:59:56
Александр
14.10.2017
19:00:11
Google
Alexander
14.10.2017
21:04:24
Всем доброй ночи)
Такой вопрос:
Есть 4 сервера: 2 шарды по 2 реплики, поднят зукипер.
на каждой ноде создаем таблицу:
… () ENGINE = ReplicatedMergeTree('/clickhouse/tables/ch-1-1/pulse/adv_sharded', 'ch-1-1', localEventDate,
(… fields …), 8192)
;
на каждой ноде меняем ch-1-1 на ch-1-2, ch-2-1, ch-2-2
в конфиге стоит параметр internal_replication=true
и distributed-таблицу:
CREATE TABLE adv AS adv_sharded ENGINE = Distributed(pulse, default, adv_sharded, rand());
после заливки данных count по adv возвращает 4 разных числа.
подскажите, пожалуйста, куда имеет смысл копать или какую информацию еще подсказать сюда?
Ilya
14.10.2017
21:08:30
Всем доброй ночи)
Такой вопрос:
Есть 4 сервера: 2 шарды по 2 реплики, поднят зукипер.
на каждой ноде создаем таблицу:
… () ENGINE = ReplicatedMergeTree('/clickhouse/tables/ch-1-1/pulse/adv_sharded', 'ch-1-1', localEventDate,
(… fields …), 8192)
;
на каждой ноде меняем ch-1-1 на ch-1-2, ch-2-1, ch-2-2
в конфиге стоит параметр internal_replication=true
и distributed-таблицу:
CREATE TABLE adv AS adv_sharded ENGINE = Distributed(pulse, default, adv_sharded, rand());
после заливки данных count по adv возвращает 4 разных числа.
Полагаю, что вы запутались с именами шардов и реплик. Первый путь указывает на адрес в зукипере для шарда. У реплик он должен быть один и тот же. Второй параметр указывает имя реплики.
Alexander
14.10.2017
21:10:18
Спасибо, это помогло. Также нашли ещё несколько проблем с конфигом - но теперь всё ок.
Дмитрий
16.10.2017
06:47:45
Slach
16.10.2017
07:06:47
Народ, я только что проверил
последний clickhouse и последний zetcd вполне нормально работают
https://github.com/Slach/clickhouse-zetcd
issue 777 https://github.com/yandex/ClickHouse/issues/777
закрыл =)
клево, рад что получилось сделать юзабельный стенд
бля
поторопился
первые вставки в таблицу проходят а потом облом
Alex
16.10.2017
08:11:55
Доброе утро, коллеги. Скажите, нормальной практикой считается масштабирование базы данных шардированием без репликаций? есть ограниченный бюджет на выделенные сервера.
kamish
16.10.2017
08:22:04
если дампы будете снимать, то, мне кажется, нет чего-то особенно страшного
Alex
16.10.2017
08:22:37
дампы снимать безусловно.
будем)
У нас сервер где 2 SSD для raid 1 есть. Заказываем еще 2 NVMe Диска (тоже raid 1) и хотим, чтобы система стояла на маленьких дисках, а кх на nvme . Такое возможно вообще?
или кх не умеет менять место расположения баз
Slach
16.10.2017
08:49:10
кликхаусу ... nmve диски в общем как мертвому припарка
он random seek не много делает =)
Alex
16.10.2017
08:49:20
почему?
Slach
16.10.2017
08:50:20
потому что clickhouse читает большими порциями с диска... обычно последовательно
и фигачит аггрегационные функции и фильтрацию в ThreadPool модели... но делать старается это максимально эффективно
Google
Slach
16.10.2017
08:50:49
и пишет на диск тоже с большими буферами... последовательно
Alex
16.10.2017
08:50:51
но я так понимаю прирост скорости чтение и обработки селектов должна вырасти
Slach
16.10.2017
08:51:37
ну только если NMVe диски в целом дают большую пропускную способность за счет драйверов и шины...
Alex
16.10.2017
08:51:53
я имею ввиду по сравнению с hdd
и я не сравниваю ssd и nvme, я просто говорю, что 250 гигов что идет в сервер по умолчанию нам не хватит, есть возможно доставить два nvme диска по терабайту
поэтому я спрашиваю можно ли систему поставить на эти 250 гигов, а кх чтобы читал с nvm e дисков
Slach
16.10.2017
08:53:31
IMHO select ускорятся только если ядер будет больше в CPU и cache miss для CPU меньше, то есть будет большой L3 и RAM для JOIN будет хватать
kamish
16.10.2017
08:53:43
можно всё, что может делать линукс
монтируешь NVMe в /var/lib/clickhouse и всё...
Alex
16.10.2017
08:54:15
до установки. так?
@kamish просто и гениально)))
kamish
16.10.2017
08:54:39
ага
Alex
16.10.2017
08:54:50
чета я не задуплил) перешалось в голове)