@clickhouse_ru

Страница 220 из 723
Tima
02.08.2017
12:41:02
5-6 в секунду не выглядит критическим
Тут люди писали что вливают по 7 милионов строк в секунду - работает

Vladimir
02.08.2017
12:41:20
вот и я о том же

где-то затык и надо понять где

Aleksander
02.08.2017
12:41:47
Всё равно нужно через некий батчер группировать данные и делать одни запрос
Скажите, а какие параметры должны быть по времени и по размеру батча? Я просто сейчас тестирую своё приложение и в кх пропадают записи, этого не может быть из-за частой многопоточной вставки ?

Google
Vladimir
02.08.2017
12:42:50
и нифига не понятно почему absolute_delay: 2284 растет когда всавки нет

Tima
02.08.2017
12:42:57
где-то затык и надо понять где
Затык в том, что при каждой вставке делается достаточно много действий с данными. Чтобы CH не помирал от большого кол-ва данных - делайте свой батчер или берите готовый и делайте однопоточную вставку

Vladimir
02.08.2017
12:43:45
и почему КХ не мержит ничего хотя есть что и вставка приосановлена

SELECT count(*) FROM system.parts AS active ┌─count()─┐ │ 7816 │ └─────────┘ 1 rows in set. Elapsed: 0.028 sec. Processed 7.82 thousand rows, 1.54 MB (276.94 thousand rows/s., 54.46 MB/s.) :) select count(*) from system.merges; SELECT count(*) FROM system.merges ┌─count()─┐ │ 0 │ └─────────┘ 1 rows in set. Elapsed: 0.001 sec.

Tima
02.08.2017
12:44:01
Скажите, а какие параметры должны быть по времени и по размеру батча? Я просто сейчас тестирую своё приложение и в кх пропадают записи, этого не может быть из-за частой многопоточной вставки ?
Нужно больше данных, что значит пропадают? Измените вставку так, чтобы вставлять не чаще раза в секунду в один поток. Размер батча - не меньше 1 000 строк

Vladimir
02.08.2017
12:44:25
не 10 мин, больше
ну вот должно быть 100 минут

Vladimir
02.08.2017
12:44:30
"делайте свой батчер" Я не очень понимаю Я ж показываю что батчами встявляется по 500к

Vladimir
02.08.2017
12:44:46
Vladimir вроде бы (я могу ошибаться) что в таком случаи советуют брать buffer таблицы и через них качать данные

если нет возможности свой батчер сделать

а вы говорите что одна

значит ваш батчер не батчер

Vladimir
02.08.2017
12:45:22
как это?

Google
Vladimir
02.08.2017
12:45:28
код показать?

Tima
02.08.2017
12:45:47
и нифига не понятно почему absolute_delay: 2284 растет когда всавки нет
Этот делай - это какая разница между неким последним инсером и текущем временем (сюдя по коду)

Aleksander
02.08.2017
12:46:16
Нужно больше данных, что значит пропадают? Измените вставку так, чтобы вставлять не чаще раза в секунду в один поток. Размер батча - не меньше 1 000 строк
Пропадает, значит, что вставляю n, а оказывается в базе n - m. Вставляю Батчами по 2000 штук, в 8 потоков, вставка происходит раз 10 минут, но из-за 8 потоков, вставки могут прилететь одновременно

Vladimir
02.08.2017
12:46:19
тогда ок c delay понятно

Vladimir
02.08.2017
12:46:59
как это?
ну вот так это

ты сказал что за ~10 минут набежало 7000 кусков

Vladimir
02.08.2017
12:47:17
7000/600

даст количество вставок в секунду

батчер должен быть перед КХ по сути

а не у клиента

альтернативно - попробуйте буферные таблицы взять и поставить их перед Replicated

то есть Distributed -> Buffer -> Replicated

может быть поможет

или как минимум учлушит ситуацию

Tima
02.08.2017
12:48:08
Vladimir
02.08.2017
12:48:44
но там есть особенности

Vladimir
02.08.2017
12:49:53
каждая строка это где-то 5-6 int32 и один float 32

Google
Vladimir
02.08.2017
12:52:45
Ну я не знаю. Отсюда вроде понятно что батчи не меньше чем bulkSize val insertCount = insert(dataRow.row) count += insertCount i += insertCount if (count >= bulkSize) { flushTo(st) LOG.info("$name: Inserted $count docs into store") count = 0 i = 0 st = repo.prepareNewBatchStatement() }

Совсем не понимаю почему в много потоков писать нехорошо? Ну как рекомендация спасибо, но это ненормально как-то

Вася
02.08.2017
12:54:38
каждая строка это где-то 5-6 int32 и один float 32
То есть примерно 14Мб на пачку. Не очень верится что они ужимаются кликхаусом до полутора килобайт.

Vladimir
02.08.2017
12:54:56
ну я не знаю как вам доказать

я готов предоставить все что вас убедит

может это поможет решить вопрос

Vladimir
02.08.2017
12:58:08
Vladimir ты графитные метрики с него собираешь? Если да, покажи что в ClickHouse.ProfileEvents.InsertQuery

Tima
02.08.2017
12:58:10
ну я не знаю как вам доказать
Я вывел такие правила работы со вставкой в CH: - однопоточная вставка через некий батчер. Несколько источников логов (приложения, клиенты, логи), один вставщик в CH - размер вставки от 10к, меньше часто не имеет смысла

Vladimir
02.08.2017
12:58:16
и они же где-то в табличках в system есть

Vladimir
02.08.2017
12:58:42
метрики не собираю

Vladimir
02.08.2017
12:58:45
system.events

Vladimir
02.08.2017
12:58:51
сейчас в табличке посмотрю

Vladimir
02.08.2017
13:00:17
eсть такое

│ InsertedRows │ 435003976 │ │ InsertedBytes │ 28657505480 │

│ DelayedInserts │ 288 │ │ RejectedInserts │ 43 │

│ SelectQuery │ 560 │ │ InsertQuery │ 1300 │

Vladimir
02.08.2017
13:01:40
Vladimir curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'"; sleep 60; curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'";

сделай так

разница между ними будет количество инсертов за минуту

Vladimir
02.08.2017
13:02:32
сейчас вставку включу

Google
Vladimir
02.08.2017
13:03:22
пока оно стартует

не мержит почему пока есть возможность? :)

Tima
02.08.2017
13:04:14
не мержит почему пока есть возможность? :)
Мерджит не сразу, стартует примено раз в 8-10 минут. На то они и фоновые мерджи

Vladimir
02.08.2017
13:04:23
INSERTS=$(curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'" 2>/dev/null); while :; do NEW_INSERTS=$(curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'" 2>/dev/null); DELTA=$((NEW_INSERTS-INSERTS)); echo "${DELTA} inserts/min"; sleep 60; INSERTS=${NEW_INSERTS}; done

Vladimir вот такое вот запусти

будет показывать тебе инсерты в минуту )

с некоторой точностью, но все ж

Vladimir
02.08.2017
13:05:15
ubuntu@pprod-spm-ch-3:~$ curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'"; sleep 60; curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'"; 1365 1430

Vladimir
02.08.2017
13:05:27
Vladimir ну вот у тебя что-то не так с батчером

он не батчит их нифига

Admin
ERROR: S client not available

Vladimir
02.08.2017
13:05:47
откуда такой вывод

65 в минуту

много?

Vladimir
02.08.2017
13:05:58
откуда такой вывод
а, ты не дельту показал

65 в минуту
не, 65 в минуту в целом нормально должно быть

Vladimir
02.08.2017
13:06:39
так оно и работало на одной машине

как 3 поставил так и поломалось

Vladimir
02.08.2017
13:07:02
Vladimir а без репликации работает?

если просто 3 машины и distributed

Google
Vladimir
02.08.2017
13:07:25
не пробовал. я ж не могу все варианты перебрать

ubuntu@pprod-spm-ch-3:~$ INSERTS=$(curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'" 2>/dev/null); while :; do NEW_INSERTS=$(curl "localhost:8123?query=select+value+from+system.events+where+event='InsertQuery'" 2>/dev/null); DELTA=$((INSERTS-NEW_INSERTS)); echo "${DELTA} inserts/min"; sleep 60; INSERTS=${NEW_INSERTS}; done 0 inserts/min -60 inserts/min -67 inserts/min

Vladimir
02.08.2017
13:07:45
не пробовал. я ж не могу все варианты перебрать
просто может проблемы с сетью какие-то жестокие?

Vladimir
02.08.2017
13:07:51
не может быть

все в одной стойке на AWS

пинги минимальные

Vladimir
02.08.2017
13:08:26
почему не может - виртуалки могут оверселится довольно жестко

Vladimir
02.08.2017
13:08:35
PING 10.1.1.86 (10.1.1.86) 56(84) bytes of data. 64 bytes from 10.1.1.86: icmp_seq=1 ttl=64 time=0.220 ms 64 bytes from 10.1.1.86: icmp_seq=2 ttl=64 time=0.221 ms 64 bytes from 10.1.1.86: icmp_seq=3 ttl=64 time=0.218 ms

Vladimir
02.08.2017
13:08:36
что говорит iperf между хостами?

а что говорит iperf?

берешь iperf на двух хостах

на одном iperf -s (или iperf3 -s)

на втором клиента в bidirectional mode

и смотришь какая полоса

Vladimir
02.08.2017
13:09:33
так

sudo apt install iperf поставил

дальше помедленнее плиз

я не совсем с этим всем на ты

Vladimir
02.08.2017
13:12:08
iperf -s

на одном хосте

на другом iperf -c IP_хоста_где_уже_запущен_iperf

Vladimir
02.08.2017
13:13:29
^Cubuntu@pprod-spm-ch-3:~$ iperf -c 10.1.1.86 —---------------------------------------------------------- Client connecting to 10.1.1.86, TCP port 5001 TCP window size: 325 KByte (default) —---------------------------------------------------------- [ 3] local 10.1.1.251 port 44254 connected with 10.1.1.86 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-10.0 sec 5.81 GBytes 4.99 Gbits/sec

Страница 220 из 723