Out of memory error

538 views
Skip to first unread message

Stepan Semiokhin

unread,
Jul 12, 2016, 9:11:32 AM7/12/16
to ClickHouse
Добрый день!

С целью протестировать Clickhouse для задач (относительно) больших единовременных выгрузок развернул Clickhouse на 3-х машинах с MergeTree-таблицами "ontime". На одной из машин (условно "мастер") создал Distributed-таблицу ontime_dist.

Хочу выгрузить за 1 INSERT данные из тестового набора ontime.csv:
при выгрузке с помощью клиента, все ок, практически сразу после окончания передачи данных, они попадают в базу:

xz -v -c -d < ontime.csv.xz | clickhouse-client --query="INSERT INTO ontime_dist FORMAT CSV"

Однако при выгрузке POST-запросом данные успешно передаются (и быстрее, чем с использованием клиента), однако после окончания передачи пауза... И скромный трэйс ошибки, состоящий  из

Out of memory!

Далее следует еще одна пауза (видимо, ролбэк) и процесс прекращает работу:


xz -v -c -d < ontime.csv.xz | POST 'http://myhost:8123/?database=default&&query=INSERT INTO ontime_dist FORMAT CSV'


Скажите, пожалуйста, почему так, какие ограничения на вставку POST-запросом и стоит ли выполнять много маленьких запросов вместо одного большого?

man...@gmail.com

unread,
Jul 12, 2016, 6:01:53 PM7/12/16
to ClickHouse
Добрый день.

В ClickHouse нет ограничений на вставку данных POST-ом: можно потоково вставлять произвольный объём данных.

Проблема возникает при работе программы POST, которая используется в вашем примере. Это perl скрипт. Именно он помещает все данные в оперативку перед отправкой, и именно он выдаёт сообщение "Out of memory!". При этом, до ClickHouse данные даже не доходят.

На всякий случай замечу, что curl также не умеет отправлять данные POST потоково.

Stepan Semiokhin

unread,
Jul 13, 2016, 4:17:25 AM7/13/16
to ClickHouse
Действительно, я не прав, спасибо большое!

Руслан Корнев

unread,
Jul 18, 2016, 4:36:16 PM7/18/16
to ClickHouse
А у меня вот так всё закончилось. Я новичок в докере
Кто-нибудь может подсказать что я сделал не так?

1. Запустил два докера
2. Зашел на клиент docker exec -it <containerIdOrName> bash
3. Скачал на клиенте архив с бд
4. Выполнил на клиенте xz -v -c -d < ontime.csv.xz | clickhouse-client --query="INSERT INTO ontime FORMAT CSV" -h clickhouse-server



2016.07.17 02:07:18.176 [ 2 ] <Trace> TCPConnectionFactory: TCP Request. Address: [::ffff:172.17.0.3]:38160
2016.07.17 02:07:18.411 [ 2 ] <Debug> TCPHandler: Connected ClickHouse client version 1.1.53981, user: default.
2016.07.17 02:07:18.690 [ 2 ] <Debug> executeQuery: (from ::ffff:172.17.0.3) INSERT INTO ontime FORMAT CSV
2016.07.17 06:25:12.094 [ 2 ] <Trace> default.ontime (Data): Renaming tmp_19871001_19871031_1_1_0.
2016.07.17 06:25:13.800 [ 2 ] <Trace> default.ontime (Data): Renaming tmp_19871101_19871130_3_3_0.
2016.07.17 06:25:14.162 [ 2 ] <Trace> default.ontime (Data): Renaming tmp_19871201_19871231_5_5_0.
2016.07.17 06:25:16.703 [ 2 ] <Error> executeQuery: Code: 33, e.displayText() = DB::Exception: Cannot read all data, e.what() = DB::Exception, Stack trace:

0. /usr/bin/clickhouse-server(StackTrace::StackTrace()+0xe) [0xfcad5e]
1. /usr/bin/clickhouse-server(DB::Exception::Exception(std::string const&, int)+0x1e) [0xf65d4e]
2. /usr/bin/clickhouse-server(DB::ReadBuffer::readStrict(char*, unsigned long)+0x4e) [0xf71cce]
3. /usr/bin/clickhouse-server(DB::CompressedReadBufferBase::readCompressedData(unsigned long&, unsigned long&)+0x147) [0xf735f7]
4. /usr/bin/clickhouse-server(DB::CompressedReadBuffer::readBig(char*, unsigned long)+0x90) [0xf73a90]
5. /usr/bin/clickhouse-server(DB::IDataTypeNumberFixed<int, DB::ColumnVector<int> >::deserializeBinary(DB::IColumn&, DB::ReadBuffer&, unsigned long, double) const+0x1ac) [0x105b30c]
6. /usr/bin/clickhouse-server(DB::NativeBlockInputStream::readData(DB::IDataType const&, DB::IColumn&, DB::ReadBuffer&, unsigned long)+0xb4) [0x11c2384]
7. /usr/bin/clickhouse-server(DB::NativeBlockInputStream::readImpl()+0x3cc) [0x11c2c7c]
8. /usr/bin/clickhouse-server(DB::IProfilingBlockInputStream::read()+0x281) [0x11c0161]
9. /usr/bin/clickhouse-server(DB::TCPHandler::receiveData()+0x5c) [0xf81c3c]
10. /usr/bin/clickhouse-server(DB::TCPHandler::receivePacket()+0x65) [0xf82075]
11. /usr/bin/clickhouse-server(DB::TCPHandler::readData(DB::Settings const&)+0x18a) [0xf8251a]
12. /usr/bin/clickhouse-server(DB::TCPHandler::processInsertQuery(DB::Settings const&)+0x4b) [0xf8262b]
13. /usr/bin/clickhouse-server(DB::TCPHandler::runImpl()+0x697) [0xf83de7]
14. /usr/bin/clickhouse-server(DB::TCPHandler::run()+0x17) [0xf84a47]
15. /usr/bin/clickhouse-server(Poco::Net::TCPServerConnection::start()+0x7) [0x2a66d37]
16. /usr/bin/clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x107) [0x2a71a37]
17. /usr/bin/clickhouse-server(Poco::PooledThread::run()+0x7f) [0x305a80f]
18. /usr/bin/clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x87) [0x3018287]
19. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7f9b19cd4184]
20. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f9b192ef37d]

2016.07.17 06:25:16.834 [ 2 ] <Debug> MemoryTracker: Peak memory usage (for query): 3.64 GiB.
2016.07.17 06:25:16.834 [ 2 ] <Debug> MemoryTracker: Peak memory usage (for user): 3.64 GiB.
2016.07.17 06:25:16.842 [ 2 ] <Debug> MemoryTracker: Peak memory usage (total): 3.64 GiB.
2016.07.17 06:25:16.891 [ 2 ] <Information> TCPHandler: Processed in 15478.349 sec.
2016.07.17 06:25:16.891 [ 2 ] <Information> TCPHandler: Done processing connection.

man...@gmail.com

unread,
Jul 19, 2016, 1:17:49 AM7/19/16
to ClickHouse
Судя по логу, соединение разорвано и переданы не все данные.
Посмотрите, какое сообщение написал clickhouse-client.

Судя по выведенному времени (15478.349 sec), используется какая-то очень слабая машина или неправильные настройки, либо клиент или сервер приостанавливались. На неплохой машине, данные из примера загружаются 20 с чем-то минут.

понедельник, 18 июля 2016 г., 23:36:16 UTC+3 пользователь Руслан Корнев написал:

Руслан Корнев

unread,
Jul 20, 2016, 6:58:01 PM7/20/16
to ClickHouse
х.з. машинка, как машинка. Может есть какой-то другой "более правильный способ" импорта базы?

➜  ~ lscpu 
Архитектура:x86_64
CPU op-mode(s):        32-bit, 64-bit
Порядок байтов:Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Потоков на ядро:2
Ядер на сокет:2
Сокет(ы):        1
NUMA node(s):          1
Vendor ID:             GenuineIntel
Семейство CPU:6
Модель:          37
Model name:            Intel(R) Core(TM) i5 CPU         661  @ 3.33GHz
Stepping:              5
CPU МГц:            3334.000
CPU max MHz:           3334.0000
CPU min MHz:           1200.0000
BogoMIPS:              6666.94
Виртуализация:VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 popcnt aes lahf_lm tpr_shadow vnmi flexpriority ept vpid dtherm ida arat


вторник, 19 июля 2016 г., 8:17:49 UTC+3 пользователь man...@gmail.com написал:

Mike Eremin

unread,
Jul 20, 2016, 7:10:20 PM7/20/16
to ClickHouse
Это же ноутбук, или я ошибся?

четверг, 21 июля 2016 г., 1:58:01 UTC+3 пользователь Руслан Корнев написал:

man...@gmail.com

unread,
Jul 21, 2016, 8:39:57 AM7/21/16
to ClickHouse
Это нормальная машина.

Попробуйте без Docker.
Возможно, в Docker клиенту не хватает оперативки.

Я новичок в докере

Я тоже слабовато в нём разбираюсь. Посмотрите, что вывелось в терминал при работе clickhouse-client.


четверг, 21 июля 2016 г., 1:58:01 UTC+3 пользователь Руслан Корнев написал:
Reply all
Reply to author
Forward
0 new messages