
Igor
20.06.2017
15:56:07
внешние словари вроде целиком данные все подсасывают
каждые N секунд, в зависимости от лайфтайма и того, запрашивали их или нет
а потом просто в оперативке хранятся в течение своего TTL
(так происходит в случае с flat, hashed)
а для cache описывается, как доп.запросы будут происходить
https://clickhouse.yandex/docs/ru/single/index.html#cache

Alexey
20.06.2017
16:29:34
INSERT INTO table2 SELECT * FROM table1
DB::Exception: Memory limit (for query) exceeded: would use 9.31 GiB (attempt to allocate chunk of 524288 bytes), maximum: 9.31 GiB.
и что делать с большими таблицами?
через внешний файл только?

Google

Igor
20.06.2017
16:30:25
ну можно кусками инсертить же
INSERT INTO table2 SELECT * FROM table WHERE date BETWEEN '2017-05-01' AND '2017-05-31';

Alexey
20.06.2017
16:31:18
ну... закат солнца вручную конечно
но для CH походу это норма и фича
ща попробуем так

papa
20.06.2017
16:35:12

Alexey
20.06.2017
16:36:05
ну и ограничение делать вот по редложению Игоря?

papa
20.06.2017
16:37:24
я бы покрутил что-то вроде max_block_size

Alexey
20.06.2017
16:44:26
нда... суточные данные не всегда проходят
либо еще дробить либо как-то системно
значит max_block_size, говорите
а этот параметр можно на уровне сесси установить?
но как-то из описания не очень вериться, что это поможет

Google

Alexey
20.06.2017
16:53:26
перечитал еще раз
да похоже оно
спасибо за наводку

Alexey
20.06.2017
16:57:53
спасибо за наводку
Ещё поставьте max_threads = 1.
Для INSERT SELECT без фильтрации большее количество не имеет смысла.

Igor
20.06.2017
16:58:16
извините что фигню посоветовал (

Alexey
20.06.2017
16:58:23
ды не почему
норм
просто у меня данные вылезают
в другом случае может и прокатило бы
но это более системный вариант походу
ща нащупаю размеры оптимальные и запущу

Alexander
20.06.2017
17:15:01
А decompress=1 какие компрессии поддерживает? Через gzip прогнать ок?

Alexey
20.06.2017
17:19:46
а вот при таком массовом insert-е как merge работает? Я правильно ожидаю, что после копирования новая таблица будет иметь больше part-ов чем исходная (в которой достаточно старые данные)?
и как следствие больше размер и менее эффективная

Alexey
20.06.2017
17:23:15

Alexey
20.06.2017
17:25:45
у меня изменился немного PK
это преобразование?

Alexey
20.06.2017
17:26:37
Да. Если сортированность данных по PK меняется, то будет несколько менее оптимально по CPU.

Alexey
20.06.2017
17:27:08
спасибо за пояснения!

Google

Alexey
20.06.2017
17:30:16
ну так писал миловидов их начальник по clickhouse
Да, отчёты Метрики строятся налету из неагрегированных данных, хранящихся в ClickHouse. Это работает одинаково, как для свежих, так и для старых данных. Отдельных примочек для свежих данных нет, кэшей нет, предагрегации тоже нет.

Александр
20.06.2017
17:31:35

Maksim
20.06.2017
17:31:45

Александр
20.06.2017
17:32:32

Maksim
20.06.2017
17:32:56
эм.. тогда я точно не понимаю в чем дело
а какой сервер? может какие-то настройки сервера отличные от тех что по умолчанию?

Александр
20.06.2017
17:33:27
Я нормальное распределение считаю по 500 млн буквально за 50мс )

Maksim
20.06.2017
17:33:44
у меня много группировок по строковым типам

Александр
20.06.2017
17:33:59
У нас три шарда по 32 ядра, 96 гигов оперативы и по 300 гигов ссд. Это виртуалки.
Может есть смысл сделать внешний словарь и перевести строки в числа? Что-то типа предварительной подготовки данных

Maksim
20.06.2017
17:35:55
ну это только некоторые из полей можно так сделать. но не все к сожалению

Александр
20.06.2017
17:36:18
Мы периодически перекладываем данные из монги в КХ, но из монги берем только нужные данные. Предварительно я вычисляю идентификатор пользователя и идентификатор "сайта"

Maksim
20.06.2017
17:36:20
сервер 4 ядра и 8 гигов ram. это конечно в 10к раз хуже вашего

Александр
20.06.2017
17:36:50
Ну я первый раз гонял КХ на сервере с один ядром и 4 гигами оперативы :) Навалил туда 2.5 ярда )
Это на одной машине, без шардов. Скорость выполнения запросов даже параллельных была достаточно большая.

Maksim
20.06.2017
17:37:30
магия

Александр
20.06.2017
17:39:35
Действительно странно

Maksim
20.06.2017
17:45:34
вот элементарный пример
SELECT count(*) FROM xxx

Google

Maksim
20.06.2017
17:46:25
7 сек чтобы посчитать количество ... это норм?

Александр
20.06.2017
17:47:30
http://img.facedsid.ru/6ea9j.jpg

papa
20.06.2017
17:48:38
не тормозит

Maksim
20.06.2017
17:50:38
это в 4 раза медленее. но это запрос на сервере. а если отправлять запрос на порт 8123 то 7 сек
и у вас 18 rows/s у меня почему-то 3 rows/s
диски ssd

Александр
20.06.2017
17:53:11
У нас сложная бизнес-логика и нам приходится какие то данные агрегировать и "кешировать", но данные мы выбираем асинхронно, порядка 10-11 одновременных запросов в КХ. Таких инстансов, делающих асинхронные запросы на данный момент 50 штук.
Все летает

Maksim
20.06.2017
17:54:18
но на примере обычного теста я отстаю в 4 раза. это как объяснить?)

Александр
20.06.2017
17:54:40
Возможно все таки кол-во потоков играет определенную роль :)
Попробуйте поднять мониторинг на том же графите с карбоном и посмотрите куда у вас что течет

Maksim
20.06.2017
17:56:27
есть мониторинг
только что смотреть. памяти хватает. проц съедают потоки clickhouse-server. место есть
iops не упирается в диск
вот еще раз выполнил запрос
уже почти 0.5
в среднем от 0.2 до 0.5

Vladimir
20.06.2017
18:00:02
А ещё к слову, мне тут что то подумалось, что индекс же должен влиять в том числе на скорость group by, даже если нет фильтрации. Разве нет?

Google

Александр
20.06.2017
18:00:44
Я, к сожалению не спец по кишкам КХ, но я думаю должен
Я долго с PK игрался, пока оптимальный вариант не подобрал
В том числе и группировки стали шустрее работать

Vladimir
20.06.2017
18:01:40
Ну логика говорит что должен влиять в общем :)

papa
20.06.2017
18:04:01
группировки по ключу?

Александр
20.06.2017
18:04:50
У меня да, используются в группировках колонки, которые в ключе есть, но иногда и без них данные группирую
Просто по этим же колонкам приходится еще фильтр делать
В ключе у меня 4 колонки всего
Дата, идентификатор сайта, идентификатор пользователя и действие которое пользователь совершил
Когда перекладываем данные, то они частично сортированы и пишутся пачками по 100 000 строк в 200 потоков :) Потолок в 10млн строк в минуту не пробил, т.к. монга быстрее не отдает

papa
20.06.2017
18:08:59
а сколько у вас дисков, от 100->200 потоков было какое-то увеличение в скорости?

Александр
20.06.2017
18:09:36
У нас по одному диску на каждом шарде. Скорость увеличивалась по мере увеличения потоков на запись
Причем чуть ли не линейно )

papa
20.06.2017
18:10:36
а, вы не в одну машину пишете

Александр
20.06.2017
18:18:01
В три
Точнее в одну распределенную таблицу
А данные уже по шардам расползаются сами
Сейчас из-за бага с broken pipe пишу по серверам напрямую, но там не больше 10к строк раз в 10 минут )
Большими порциями мы архивные данные гоняем в КХ, такое практикуем раз в месяц где то

Alexey
20.06.2017
18:43:35
Сейчас есть release candidate. В stable ещё не попало, так как много заморочек с выкладкой на наши серверы. Из последнего тега testing уже можете собирать.

Александр
20.06.2017
18:44:23
А инструкции по сборке deb пакетов есть у вас?