
Tima
02.08.2017
12:41:02

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

Vladimir
02.08.2017
12:44:25

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

Aleksander
02.08.2017
12:46:16

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

Vladimir
02.08.2017
12:46:59
ты сказал что за ~10 минут набежало 7000 кусков

Tima
02.08.2017
12:47:14

Vladimir
02.08.2017
12:47:17
7000/600
даст количество вставок в секунду
батчер должен быть перед КХ по сути
а не у клиента
альтернативно - попробуйте буферные таблицы взять и поставить их перед Replicated
то есть Distributed -> Buffer -> Replicated
может быть поможет
или как минимум учлушит ситуацию

Tima
02.08.2017
12:48:08

Вася
02.08.2017
12:48:26

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

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

Aleksander
02.08.2017
12:49:59

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

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

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