184 похожих чатов

Побенчмаркал асинхронные инсерты в ситуации, когда вставляется по одной строке

из сборки в мастере, и либо я что-то не так делаю, либо одно из двух:

Код для inserter.go из теста: https://gist.github.com/YuriyNasretdinov/63dcc5bd129c1fdd4d35628c6a30cd1a

Вот цифры для kittenhouse -p 8124 -reverse -ch-addr=127.0.0.1:8123 -u= -g= на 16-ядерной виртуалке:


$ go run inserter.go -addr=127.0.0.1:8124 -requests=500 -concurrency=5000
2021/10/19 23:17:49 Sending 500 requests to "http://127.0.0.1:8124/?query=INSERT%20INTO%20InsertTest_buffer(id)%20VALUES" with concurrency 5000
2021/10/19 23:18:07 QPS: 133322.9 (for 18.751460918s)
$ clickhouse-client
ClickHouse client version 21.11.1.8486 (official build).
Connected to ClickHouse server version 21.11.1 revision 54450.

┌─count()─┐
│ 2500000 │
└─────────┘


Вот цифры для асинхронной вставки в самом ClickHouse (конкурентность пришлось уменьшить, потому что, кажется, больше 1000 всё равно не поддерживается пока что):


$ go run inserter.go -addr=127.0.0.1:8123 -clickhouse-async -requests=500 -concurrency=500
2021/10/19 23:21:54 Sending 500 requests to "http://127.0.0.1:8123/?wait_for_async_insert=0&async_insert=1&query=INSERT%20INTO%20InsertTest_buffer(id)%20VALUES" with concurrency 500
2021/10/19 23:22:26 QPS: 7832.4 (for 31.918566481s)

$ clickhouse-client

🙂 select count() from InsertTest_buffer;
...
┌─count()─┐
│ 0 │
└─────────┘
1 rows in set. Elapsed: 0.001 sec.


^ по факту, при вставке в ClickHouse с опциями wait_for_async_insert=0&async_insert=1 отдается ошибка Response: Code: 73. DB::Exception: Unknown input format . (UNKNOWN_FORMAT) (version 21.11.1.8486 (official build)), а когда вставляешь без этих аргументов, то всё нормально:

```
go run inserter.go -addr=127.0.0.1:8123 -requests=50000 -concurrency=10
2021/10/19 23:27:21 Sending 50000 requests to "http://127.0.0.1:8123/?query=INSERT%20INTO%20InsertTest_buffer(id)%20VALUES" with concurrency 10
2021/10/19 23:28:22 QPS: 8173.2 (for 1m1.175656278s)
nasretdinov@clickhouse-bench:~/kittenhouse-vs-bulk/inserter$ clickhouse-client
ClickHouse client version 21.11.1.8486 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 21.11.1 revision 54450.
clickhouse-bench.europe-west4-a.c.studious-stack-249419.internal :) select count() from InsertTest_buffer;
...
┌─count()─┐
│ 500000 │
└─────────┘
```

В любом случае, kittenhouse в режиме reverse proxy вставляет порядка 130к строк в секунду, когда бенчмарк запущен на локальной 16-ядерной машине, а clickhouse-benchmark выдавал около 11k QPS на той же машине:


$ clickhouse-benchmark --wait_for_async_insert=0 --async_insert=1 -c64 <<< 'insert into InsertTest format TSV 1'
localhost:9000, queries 36651, QPS: 11601.953, RPS: 0.000, MiB/s: 0.000, result RPS: 0.000, result MiB/s: 0.000.


Структура таблицы:


create table InsertTest (id Int) ENGINE=MergeTree ORDER BY id;
CREATE TABLE default.InsertTest_buffer(id Int32) ENGINE = Buffer('default', 'InsertTest', 2, 15, 15, 10000000, 10000000, 100000000, 100000000)

3 ответов

31 просмотр

Unknown input format я уже тоже нашел и зарепортил

Yuran- Автор вопроса

Сделал небольшое видео с бенчмарком режима асинхронной вставки в ClickHouse и сравнение с kittenhouse в режиме reverse proxy для случая, когда хочется вставлять по одной строке (что в целом обычно плохая идея для OLAP базы, даже такой быстрой, как ClickHouse :)): https://www.youtube.com/watch?v=1tYev6PEJXU Кажется, особого прироста от асинхронного режима нет по сравнению с буферной таблицей (кроме того, что вставка по умолчанию буферизует синхронно, тут за это большой респект, но бенчмаркать вставку по одной строке это мешает, потому что тогда конкурентность вставки должна быть очень высокой, а это ClickHouse как-то не особо любит). Возможно, я что-то не так сравнивал, хотя вроде бы в SHOW PROCESSLIST действительно показывались треды, которые осуществляют асинхронную вставку, так что всё же должно быть правильно. Интересно услышать ваши отзывы!

Yuran
Сделал небольшое видео с бенчмарком режима асинхро...

Да, там есть некоторые ограничение в производительности http сервера кх.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта