
Гаврилов
21.02.2018
15:11:38
когда мы начали делать нагрузочное тестирование на тестовой базе
и при каждом запросе открывалось новое подключение
по ssh на сервак еще заходило, но кх не отвечал

Ilyas
21.02.2018
15:22:25
Можно ли как-то выставить distributed_group_by_no_merge в единичку для read-only юзеров?
Есть запрос с группировкой и шардинг гарантирующий размещение этих групп только на конкретных нодах.
Кажется логичным применять эту настройку, но для read-only оно ругается "Cannot execute SET query in readonly mode"

Google

Kirill
21.02.2018
15:24:01
readonly в 2 выставить надо
Тогда можно делать SET и создавать временные таблицы
Или просто в профиле пользователя указать

Vladislav
21.02.2018
15:38:31
Всем привет.
Подскажите, плиз, нам нужно выполнять по запросу порядка 2к запросов типа
insert into table select col1,col2,sum(col4) from table where ... group by col1,col2
Если начинаем подряд слать 2к штук, то взлетает количество кусков, и начинает идти дым.
Как это можно оптимизировать? Понимаю, что в КХ слать батчем, но тут практически нереально объединить эти 2к запросов в один большой.
Если мы их отправим через ; эти чем-то поможет? т.е. будет одна отправка в КХ, а не несколько.


Anton
21.02.2018
15:44:24
Всем привет.
Подскажите, плиз, нам нужно выполнять по запросу порядка 2к запросов типа
insert into table select col1,col2,sum(col4) from table where ... group by col1,col2
Если начинаем подряд слать 2к штук, то взлетает количество кусков, и начинает идти дым.
Как это можно оптимизировать? Понимаю, что в КХ слать батчем, но тут практически нереально объединить эти 2к запросов в один большой.
Если мы их отправим через ; эти чем-то поможет? т.е. будет одна отправка в КХ, а не несколько.
Сгруппировать по таргетам и аплоадом через файл (дескриптор / сокет)

Vladislav
21.02.2018
15:46:19

Nikita
21.02.2018
15:46:30
В чем может быть плюс своего решения против Buffer таблицы?

Anton
21.02.2018
15:46:37
Целевые таблицы с одинаковым форматом вставки

Nikita
21.02.2018
15:50:00

Andrey
21.02.2018
15:51:56
Buffer лежит в оперативке + расход на коннекты от разных инсертов. По этому в некоторых случаях буферизация на аппликухе куда лучше

Anton
21.02.2018
15:52:11
Вот сразу 2 мнения в разные стороны, нужно конкртеный кейс разобрать и понять надо оно или нет

Google

Nikita
21.02.2018
15:54:19

Salim
21.02.2018
15:54:59
Buffer не прокатит с репликой
Buffer не прокатит с collapsingmergetree

Anton
21.02.2018
15:55:35

Salim
21.02.2018
15:55:39
оч много ограничений
Если будет более одного слоя буффера то никакой очередности в записи, полный фраш)

Anton
21.02.2018
15:58:37

Yuran
21.02.2018
15:59:04

Nikita
21.02.2018
15:59:45

Salim
21.02.2018
16:00:07
https://clickhouse.yandex/docs/ru/table_engines/buffer.html
Если таблица назначения является реплицируемой, то при записи в таблицу Buffer будут потеряны некоторые ожидаемые свойства реплицируемых таблиц. Из-за произвольного изменения порядка строк и размеров блоков данных, перестаёт работать дедупликация данных, в результате чего исчезает возможность надёжной exactly once записи в реплицируемые таблицы.
сорян, немного ошибся

Yuran
21.02.2018
16:00:41
Это не называется «не будет работать» :)

Salim
21.02.2018
16:00:42
может и прокатит))
удачи )

Александр
21.02.2018
16:00:58
Я сделал себе файловый буффер. Данные копятся в файлах и когда запись в файл заканчивается (там может быть от 1 до n строк в одном файле), то ему в название дописывается -flushed. Затем я раз в 1 минуту собираю все эти файлы и склеиваю в один файл и отправляю в формате CSV на вставку

Nikita
21.02.2018
16:01:12
«В связи с этими недостатками, таблицы типа Buffer можно рекомендовать к применению лишь в очень редких случаях.»

Yuran
21.02.2018
16:01:16
Мы просто вставляем как раз в ReplicatedMergeTree через Buffer-таблицу, интересно было узнать, что с этой схемой не так, кроме exactly-once и сохранения порядка

Александр
21.02.2018
16:01:19
Если не удалось скинуть в CH, то файл складывается в отдельную директорию из которой можно ручками залить

Salim
21.02.2018
16:01:44
у нас тупо редис лист на пых приложениях

Google

Salim
21.02.2018
16:02:07
то что через реббит можно батч консюмеры использовать

Alexander
21.02.2018
16:03:58
добрый вечер. Подскажите пожалуйста, как POSTом сделать INSERT из csv файла?

Andrey
21.02.2018
16:06:21

Vsevolod
21.02.2018
16:07:06
в доке, надо заметить, без поллитры не разберешься. хотя про мои доки говорят то же самое :)

Alexander
21.02.2018
16:07:15
я вижу. Я так понял - в теле запроса нужно передавать содержимое файла. А нельзя ли не вычитывая его передать?

Артемий
21.02.2018
16:09:39
это да. Дока CH по своему прекрасна
Если обязательно через POST, то можно через CURL передать на нужный сервер, написав INSERT запрос в query (1 строка), а данные потоком перенаправить в POST
>cat filename.csv | curl 'http://serverhost:8123/?query=INSERT INTO' -d @-
Или
>cat filename.csv | POST 'http://serverhost:8123/?query=INSERT INTO'

Alexander
21.02.2018
16:17:15
спасибо. Буду пробовать

∀
21.02.2018
16:32:13
привет
я возможно нашла баг
напишите, мне, плиз, кто-нибудь в личку, кому его можно порепортить

Гаврилов
21.02.2018
16:47:38
а optimize эти маленькие файлы в 1 перепишет?
допустим я пишу по 10 строк в секунду
и раз в сутки ночью optimize делаю
то он же приберется?
или это ложные надежды?

Артемий
21.02.2018
16:48:45

Гаврилов
21.02.2018
16:48:58
можно же вручную вызвать optimize

Google

Гаврилов
21.02.2018
16:49:02
чтобы наверняка
optimize final
я могу позволить себе на пару минут остановить работу ночью
а еще если у меня будет репликация, то optimize надо будет на каждой реплике запускать?
или запустив на одной он приберется на всех?

Артемий
21.02.2018
16:55:47
или запустив на одной он приберется на всех?
Мы же про кусочки партиций говорим? Optimize попробует что-то птимизировать, но clickhouse сам перестроит файлы, как сочтет нужным.
Конкретно на моем проекте, вчерашние данные успешно компануются, хотя и не сразу. Вызов Optimize Final процесс не ускоряет (хотя может и ускоряет, но все равно это проихсдит не мгновенно).

Гаврилов
21.02.2018
16:56:26
судя по доке Optimize Final перезаписывает таблицу в другое место
как будто таблица была целиком вставлена 1 пачкой
тоесть все партиции будут забиты под завязку
всеравно через какоето время replicatedmergetree наделает дырок, или не так?

Артемий
21.02.2018
16:57:23

Vadim
21.02.2018
16:58:20
Отключил прореживние на тестовом сервере, создал таблицу с грануляцией в 32768 строк, скопировал данные из таблицы с грануляцией в 8192 строк, БД усохла на диске с 91Г до 48Г, но часть данных потерялась:
SELECT count(*)
FROM graphite32
┌─────count()─┐
│ 13901899118 │
└─────────────┘
1 rows in set. Elapsed: 2.896 sec. Processed 13.90 billion rows, 27.80 GB (4.80 billion rows/s., 9.60 GB/s.)
:) select count(*) from graphite;
SELECT count(*)
FROM graphite
┌─────count()─┐
│ 13903321793 │
└─────────────┘
1 rows in set. Elapsed: 2.100 sec. Processed 13.90 billion rows, 27.81 GB (6.62 billion rows/s., 13.24 GB/s.)
:)
как сравнить, что бы понять, что попадает?

Артемий
21.02.2018
16:58:54

Гаврилов
21.02.2018
16:59:16
тоесть он каждый раз перестраивает партицию
чтото я не вижу в доке записи именно о полной перезаписи
значит я чтото попутал

Артемий
21.02.2018
16:59:52
На реплике такая же ситуация и работает независимо от 1 сервера.

Google

Гаврилов
21.02.2018
17:01:33
у нас сейчас 50к записей, но в течении 1-2 месяцев будет 10 млн
и дальше будет расти в неизвестных объемах
копейки)

Артемий
21.02.2018
17:03:45
Все зависит еще от дат или иного ключа партиционирования

Гаврилов
21.02.2018
17:04:14
а ну тогда нормально
а еще есть примерное время в которое replacedmergetree будет убирать дубли?
ну там минута или еще сколько-то
чтобы можно было заказчику цифру сказать

Артемий
21.02.2018
17:06:24

Гаврилов
21.02.2018
17:06:44
всеравно должна быть какаето пессимистичная цифра

Артемий
21.02.2018
17:09:32
Да, я расчитываю на достаточно долгое слияние. Если дублей больше миллиона.
Вчерашний тест показал, что при строках более 100 млн, 4 млн строк удалялись более 2 часов. На самом деле тестировать до конца не стал, так как этого достаточно, чтобы искать алгоритмическое решение.