
Maksim
12.04.2017
14:53:28
я что-то запутался))

Igor
12.04.2017
14:53:39
я выше написал.

Maksim
12.04.2017
14:54:30
cat banner_history_segments_data.native | clickhouse-compressor -d | clickhouse-client —user="default" —password="" —database="statistics" —query="INSERT INTO banner_history_segments FORMAT Native"

Google

Maksim
12.04.2017
14:57:38

Alex
12.04.2017
14:58:28
Сервер может упасть, если не хватает оперативной памяти.

Maksim
12.04.2017
14:59:12

Igor
12.04.2017
14:59:23
а если не хватает оперативки, надо слать кусочками поменьше

Maksim
12.04.2017
14:59:38
может можно как-то потоково без выгрузки сразу в память всего содержимого через cat
просто импорт тогда мне придется переписывать слать запросы limit offset и выбирать чанками по 10 млн. думал может есть способ(
ладно память но процессор сходит с ума

Alex
12.04.2017
15:01:05
Это предположение - подтвердить можно, проверив dmesg.

Maksim
12.04.2017
15:01:32
2 vCPUs, 2.4 GHz, Intel Xeon Family, 8 GiB memory
это мало для импорта данных ?
ну ладно с файлом. разобью на чанки. но сам демон сервера грузит проц не хило. пока он выгрузит все данные сервер уже зависнет )

Alex
12.04.2017
15:06:47
Процессор загружен, потому что ClickHouse использует ресурсы машины на полную :)
Давайте сначала убедимся, что действительно памяти не хватает. Проверьте dmesg.

Google

Maksim
12.04.2017
15:10:07
памяти хватает. но в притык занято 7 гб из 8 при импорте. но load average дошел до 6 и я уже даже select не смог выполнить он просто подвис. я остановил импорт. может можно как-то ограничить во время импорта процессор. я пользовался утилитой cpulimit и она хорошо справлялась. импорт довел до 0.4 average в спокойном режиме выгружать данные и кладет в облако. а вот с экспортом беда
1) я так и не понял какой командой можно кинуть файл на декомпрессию - у меня пишет no data insert
2) при импорте вылазит demon и жрет весь проц пока не завершится процесс что ограничивать не понятно
.. импорт делать планируется ежедневно на тестовый сервер для отладки на свежих данных

Alex
12.04.2017
15:14:43
no data insert - а какое в точности сообщение об ошибке?

Maksim
12.04.2017
15:15:11
Code: 108. DB::Exception: No data to insert

Alex
12.04.2017
15:28:33
Проверил, вот так работает:
$ clickhouse-client --query 'SELECT * FROM test FORMAT Native' | clickhouse-compressor > test.compressed
$ cat test.compressed | clickhouse-compressor -d | clickhouse-client --query 'INSERT INTO test FORMAT Native'
No data to insert может быть, если действительно в файле нет данных - 0 строк

Maksim
12.04.2017
15:32:31
но сервак пыжится )

Igor
12.04.2017
15:33:38
ну вы ж не будете такие объемы ежесекундно грузить?

Maksim
12.04.2017
15:34:06
раз в сутки ночью. дальше еще больше объемы будут

Igor
12.04.2017
15:34:28
ну вот. а ночью часто select запросы нужны бывают?

Maksim
12.04.2017
15:34:42
каждую секунду

Igor
12.04.2017
15:34:52
лан((

Maksim
12.04.2017
15:34:53
у нас данные запрашиваются и в кеш кладутся
агрегированные
кеш для ui - отдельный сервер. но запросы слаться будут при каждом сборе новых данных для кеша
у меня есть еще одна идея
сейчас подожду пока сервак отдохнет и добавлю ему cpulimit
выставлю на выполнение команды 10% cpu может будет норм если раз в сутки

Alex
12.04.2017
15:38:29
Сейчас действительно тонкое разделение ресурсов между запросами проблематично. Будем исправлять.

Google

Maksim
12.04.2017
15:40:04
или например реализовать выполнение в docker котейнере
получается изолированный контейнер с четко выделенными для него ресурсами
может я ошибаюсь в чем-то. так мысли. но было бы круто)


Alexander
12.04.2017
15:45:59
Сейчас в запросах с несколькими фильтрами ClickHouse автоматически переносит некоторые фильтры в prewhere. Иногда он это делает неправильно, что приводит к увеличению времени выполнения запроса. (мы наблюдали, когда ошибочный перенос в prewhere увеличивал время выполнения с полутора до трех минут).
Вопрос: какие эвристики используются для определения, когда имеет смысл переносить условие в prewhere, а когда нет?
Предложение: было бы полезно добавить хинты, чтобы подсказывать КликХаусу, что можно переносить в prewhere, а что лучше не надо.

Maksim
12.04.2017
15:50:57
сейчас подожду пока сервак отдохнет и добавлю ему cpulimit
сильно не помогло. клиент то особо не грузит проц. удалось не превышать load average больше 2.4 а для двух ядерного cpu эти 0.4 это уже очередь операций то есть подвисания. Тут больше cllickhouse —daemon кушает проц. его не знаю как ограничить только для операции импорта

Roman
12.04.2017
15:51:19

Maksim
12.04.2017
15:51:45

Roman
12.04.2017
16:13:37
партиции можно легко аттачить и детачить

Maksim
12.04.2017
16:38:09
партиции можно легко аттачить и детачить
не сказал бы что легко))
ALTER TABLE statistics.audience_statistic_segments FREEZE PARTITION '2'
ALTER TABLE statistics.audience_statistic_segments ATTACH PARTITION - тут name месяца указывается? а нельзя все кусочки влить в базу ?

Igor
12.04.2017
16:54:39
ATTACH PARTITION '2'...

Maksim
12.04.2017
16:55:39
ALTER TABLE statistics.audience_statistic_segments
ATTACH PARTITION '2'
Received exception from server:
Code: 248. DB::Exception: Received from localhost:9000, 127.0.0.1. DB::Exception: Invalid partition format: 2. Partition should consist of 6 digits: YYYYMM.

Igor
12.04.2017
16:57:43
значит нельзя(

Maksim
12.04.2017
17:26:22
что-то с первого раза вышло. а сейчас даже не остановить этот процесс

Alexey
12.04.2017
17:27:46
Максим, если не секрет, над каким проектом вы работаете? Какая компания, для чего будете использовать ClickHouse?

Google

Maksim
12.04.2017
17:29:22

Alexey
12.04.2017
17:29:46
Просто интересно.

Maksim
12.04.2017
17:30:03
у нас довольно большие объёмы данных статистики. кратко реклама
показы клики и т.д.


Alexey
12.04.2017
17:38:49
сильно не помогло. клиент то особо не грузит проц. удалось не превышать load average больше 2.4 а для двух ядерного cpu эти 0.4 это уже очередь операций то есть подвисания. Тут больше cllickhouse —daemon кушает проц. его не знаю как ограничить только для операции импорта
После вставки данных, в фоне выполняются слияния. Слияния могут использовать достаточно большое количество потоков, каждый из которых, как правило, упирается в CPU или в диск. Максимальное количество потоков для слияния определяется настройкой background_pool_size, которую можно изменить в users.xml в профиле default. По-умолчанию - 16. Впрочем, столь большое количество потоков используется редко.
Сильно уменьшать этот параметр нельзя, так как тогда не смогут работать одновременно мелкие и крупные слияния, и вставка будет замедляться. Разумный минимум, в который можно выставить эту настройку - 4.
Планировщик ОС устроен так, что если даже количество потоков, ожидающих CPU, в несколько раз превышает количество ядер, система не будет "залипать" на существенное время (секунды) при операциях типа работы по ssh. Залипания на существенное время могут возникать из-за ожидания диска.
Виртуалка с двумя ядрами не является достаточно серьёзной для продакшена. Также стоит заметить, что часто у виртуалок очень слабая дисковая подсистема, и к тому же, диски могут быть перегружены соседями (мы наблюдали такое часто для виртуалок в OpenStack). Можно надеяться, что вы будете использовать более серьёзные машины для продакшен нагрузки.
Чтобы проверить, почему тормозит ваша виртуалка, выведите куда-нибудь графики утилизации CPU, диска, сети...


Maksim
12.04.2017
17:48:32
После вставки данных, в фоне выполняются слияния. Слияния могут использовать достаточно большое количество потоков, каждый из которых, как правило, упирается в CPU или в диск. Максимальное количество потоков для слияния определяется настройкой background_pool_size, которую можно изменить в users.xml в профиле default. По-умолчанию - 16. Впрочем, столь большое количество потоков используется редко.
Сильно уменьшать этот параметр нельзя, так как тогда не смогут работать одновременно мелкие и крупные слияния, и вставка будет замедляться. Разумный минимум, в который можно выставить эту настройку - 4.
Планировщик ОС устроен так, что если даже количество потоков, ожидающих CPU, в несколько раз превышает количество ядер, система не будет "залипать" на существенное время (секунды) при операциях типа работы по ssh. Залипания на существенное время могут возникать из-за ожидания диска.
Виртуалка с двумя ядрами не является достаточно серьёзной для продакшена. Также стоит заметить, что часто у виртуалок очень слабая дисковая подсистема, и к тому же, диски могут быть перегружены соседями (мы наблюдали такое часто для виртуалок в OpenStack). Можно надеяться, что вы будете использовать более серьёзные машины для продакшен нагрузки.
Чтобы проверить, почему тормозит ваша виртуалка, выведите куда-нибудь графики утилизации CPU, диска, сети...
Алексей спасибо за развернутый ответ. реальную нагрузку на продакшене пока не проверяли. я делаю последние штрихи по бэкапированию данных в облако amazon s3 и выгрузку самого актуального дампа на staging машину для тестов. Потом займусь переписыванием кеша который собирает из базы агрегированные данные для отображения статистических данных на графиках и другие данные финансовые


Alexey
12.04.2017
17:59:21
В таком случае вы можете искусственно уменьшить скорость вставки. Вставили блок данных, подождали, вставили ещё, таким образом, размазав нагрузку по времени.

Maksim
12.04.2017
17:59:44
кстати с экспортом все решилось просто. я выставил cpulimit на clickhouse-client и на операции архивирования. нагрузка 0.5 average
экспорт не мешает никак. с импортом были мысли делать sleep между чанками
наверное это единственные вариант на данный момент
проблема при экспорте в том что clickhouse-server ограничить через cpulimit не возможно, т.к. не понятно какой именно процесс подхватил данные а их там несколько выплывает - несколько потоков. и получается клиент ограничен в cpu а сервер жрет на полную )) ну я вас понял пока ограничимся чанками. потом когда переедем полностью докупим чуть более мощную машину. хотябы 4 cpu

Roman
12.04.2017
18:47:10
и тогда вам не нужно будет архивировать и розархивировать данные

Maksim
12.04.2017
18:49:27

Roman
12.04.2017
18:53:34
когда вы делаете freeze partition '2' у вас получается дамп всей таблицы. Вы можете спокойно перемещать/копировать/архивировать эти данные из папки shadow. Когда же нужно восстановить бекап: создаете папку с именем таблицы в папке data, копируете туда бекап, выполняете ATTACH TABLE %table_name% (...)

Maksim
12.04.2017
18:56:29

Roman
12.04.2017
18:57:00
неудобством может быть только необходимость хранить схему таблицы. Мы автоматизировали эти процессы с помощью небольшой утилиты на го. Она позволяет просматривать существующие ревизии, сравнивать их обьемы, детачить и аттачить таблицы

Google

Roman
12.04.2017
18:57:27

Maksim
12.04.2017
18:59:19
go это хорошо) но можно ли пример запроса полный? ну или выдуманный. я сейчас выгружаю схему через SHOW CREATE TABLE %table_name% и это кидаю в файлик потом делаю DROP TABLE и заново CREATE TABLE из файлика и выгрузка данных

Roman
12.04.2017
18:59:20
обратите внимание на https://clickhouse.yandex/reference_ru.html#ATTACH
схемы таблиц так же лежат в data папке КХ, их можно копировать оттуда

Maksim
12.04.2017
19:03:44

Roman
12.04.2017
19:05:52
может и можно) вы можете реализовать это на каком-нибудь из ваших любимых языков или написать скрипт на bash

Maksim
12.04.2017
19:05:58
получится
выгружаю partials в shadows архивирую папочку кидаю в обалко. на другом сервере архив забираю распаковываю в папку data (предварительно очистив старую). выполняю ATTACH TABLE %table_name% .. не понял момент на счет схемы она должна быть заново создана ?
я пишу на bash решил что это будет самый быстрый вариант

Roman
12.04.2017
19:07:10
freeze сам поместит данные в shadow. Попробуйте восстановить таблицу из этих файлов

Maksim
12.04.2017
19:08:12

Константин
12.04.2017
20:20:40
Добрый вечер!
Пришлось создать Buffer таблицу, чтобы в реалтайме туда писать данные
задали настройки движка, как в мануале
только поменяли max_rows -> 100 000
вместо 1 млн
данные не сливаются
в основную таблицу
а их там уже 197494
я понял...
это изза materialized полей...
создал другую буффер таблицу, без материалайзед полей