@clickhouse_ru

Страница 578 из 723
Kirill
04.07.2018
18:33:26
Подскажите, а как программно понять, что при insert не хватило места на диске, есть какой-нибудь out_of_space exception?
С этим тут проблемы во весь рост: если вы делаете просто insert он отвалиться и все будет ок, т.к. КХ пишет в папку tmp_name_of_block по max_insert_block_size или как вы ему блоки передаете и если все Ок то он просто папку переименует и в ZK статус блока поменяет, но если вы делаете insert select - вы попали, часть данных будет вставлена в таблицу. В ответах exception есть коды, но я не помню есть ли код на out_of_space

Можно по репозитарию поискать

Kirill
04.07.2018
18:44:28
Да, похоже что вот эту https://github.com/yandex/ClickHouse/blob/2be2b8520b99043b790eb081264b8429f3a1c105/dbms/src/Common/ErrorCodes.cpp#L250

Google
Evgeny
04.07.2018
18:56:59
Скажите, а для complex_key_hashed как делать таблицу с движком Dictionary?

Kirill
04.07.2018
18:57:40
Evgeny
04.07.2018
18:58:05
Из документации: create table products (product_id UInt64, title String) Engine = Dictionary(products);

У меня есть словарь, я его теперь хочу отобразить в таблицу

Kirill
04.07.2018
18:59:01
CREATE DATABASE dict Engine=Dictionary;

В ней как таблицы будут все ваши словари

Evgeny
04.07.2018
18:59:56
Ох красота то какая.... Спасибо большое!

Alexey
04.07.2018
19:08:45
а нет ли в планах для внешних словарей убрать ограничение в 500к записей?
Достаточно просто поменять тип словаря с flat на hashed. Преимущество flat в производительности по сравнению с hashed незначительное и заметно только на простых запросах.

Alexey
04.07.2018
19:16:45
Спасибо. Документация ввела в заблуждение :)
А что там вводит в заблуждение? Кстати, прямо на странице документации есть кнопка "карандаш" - можно её самому быстро поправить. (Нужен только аккаунт на Github)

Скажите, а кто-нибудь натравливал на clickhouse-server.log обычный системный logrotate? Хочется логи по сутками все-таки разбивать.
Да, logrotate - рабочий вариант, некоторые коллеги используют. В конфиге clickhouse-server для ротации логов можно указать <size>never</size> - тогда он не будет их ротировать и это остаётся на ваше усмотрение.

Google
antuan
04.07.2018
19:24:38
А что там вводит в заблуждение? Кстати, прямо на странице документации есть кнопка "карандаш" - можно её самому быстро поправить. (Нужен только аккаунт на Github)
слова "Это метод обеспечивает максимальную производительность среди всех доступных способов размещения словаря." :)

Alexey
04.07.2018
19:25:08
час поработал после рестарта, опять память выжрал и тормозит
По нашему опыту проблем с потреблением памяти на версии 54385 не было. Тем не менее, надо изучить причину - попробовать старую версию (для быстрых экспериментов можно просто stop, cp бинарника, start). Потом изучить, что влияет. Могут влиять некоторые виды SELECT-запросов, а могут влиять большие INSERT-ы или наоборот, большое количество мелких INSERT-ов. Для того, чтобы это проверить, отключите часть нагрузки на одном из серверов.

слова "Это метод обеспечивает максимальную производительность среди всех доступных способов размещения словаря." :)
Всё так и есть :) Действительно, производительность flat словаря выше. Это будет заметно, когда запрос выполняется со скоростью хотя бы несколько сотен млн. строк в секунду на одно процессорное ядро - то есть, несколько миллиардов строк в секунду.

Kirill
04.07.2018
19:27:19
В любом случае в этом направлении нужно идти, как пример в КХ нет подготовленных выражений и это сильно местами афектит, взять хотя бы cached словари которые в ряде случаев просто генерят "портянку" SQL который не пролезает по дефолтовым лимитам. Да и вообще с подготовленными запросами может быть сильно больше оптимизаций (а тут уже вышеупомянутый ExpressionAnalyzer:))

Alexey
04.07.2018
19:39:14
Создал реплицируемую таблицу, залил данные через INSERT INTO .. SELECT Вроде всё нормально, но в логе постоянно пишется такое 2018.07.04 12:19:31.594641 [ 2 ] <Debug> load_stat (ReplicatedMergeTreeQueue): Not executing log entry for part 20180317_20180319_285_290_1 because source parts size (30.02 MiB) is greater than the current maximum (4.45 MiB). На что это влияет и что можно подкрутить в настройках чтобы такого не писало?
Данное сообщение означает одно из двух: - прямо сейчас уже выполняется много мержей; следующий мерж будет выполнен позже. - мало свободного места на диске. В первом случае, данные сообщения не требуют никакого внимания и их наличие - полностью нормально. Для того, чтобы более детально посмотреть на ситуацию - сделайте, чтобы метрики ClickHouse выгружались в Graphite или куда-нибудь ещё и смотрите на графики Metrics.Merge, Metrics.BackgroundPoolTask, AsynchronousMetrics.MaxPartCountForPartition.

Alexey
04.07.2018
19:46:52
Вот не ОК, у нас просто сильно старая версия
Старая версия - в которой даже нет таких настроек?

Kirill
04.07.2018
19:49:00
Старая версия - в которой даже нет таких настроек?
Не думаю что настолько сильно, сейчас нет доступа к серверам, 543* скорее всего, но, мы храним много данных в массивах ***Map и если не выставляться по блокам - мы сильно страдаем при переливе insert select, а такое бывает

страдаем так что пару дней назад я реально скрещивал пальци чтоб 128 gb хватило, и он дошол до 120 и OOM его не прибил

Evgeny
04.07.2018
19:50:44
Скажите, а как можно инициировать обновление mongo словаря? Есть SQL какой-то для этого?

Evgeny
04.07.2018
19:52:10
Спасибо!

Kirill
04.07.2018
19:53:43
И при мержах/ переливе данных там сейчас все страшно, мы решим - не сильно страшная вещь )

Alexey
04.07.2018
19:56:08
страдаем так что пару дней назад я реально скрещивал пальци чтоб 128 gb хватило, и он дошол до 120 и OOM его не прибил
Наверное суть в том, что вам нужно уменьшить размер блока при INSERT SELECT, тогда как есть лишь функциональность - склеивать блоки в более крупные, и она используется по-умолчанию.

Kirill
04.07.2018
19:57:34
Наверное суть в том, что вам нужно уменьшить размер блока при INSERT SELECT, тогда как есть лишь функциональность - склеивать блоки в более крупные, и она используется по-умолчанию.
Я примерно понимаю как оно работает и при самом аккуратном обращении у нас вот так, там 30кк уникальных элементов на одного из клиентов стало прилетать вместо 20к

Google
Kirill
04.07.2018
19:58:33
Это для группировки в тот самый массив **Map

Мы просто на такое сильно не закладывались, такие вещи нужно хранить не так

Alexey
04.07.2018
20:04:18
Да, для больших значений - больших массивов, тяжёлых состояний агрегатных функций, требуются некоторые доработки - это адаптивный выбор index_granularity и max_block_size.

Kirill
04.07.2018
20:09:15
Да, для больших значений - больших массивов, тяжёлых состояний агрегатных функций, требуются некоторые доработки - это адаптивный выбор index_granularity и max_block_size.
К сожаленюю я это тоже знаю и нам вот сильно в этом месте нехватает адаптивного index_granularity, сейчас чтоб сильно не афектить всех он сильно маленький, но он нужен не всем. Еще беда в том что в КХ нет транзакций и мы считаем стату в отдельных таблицах, но когда все это копировалось пришел OOM и все убил - как результыт куда-то что-то приехало, а куда-то нет. Может есть смысл расмотреть транзакции, как в том же посгреме (min/max видимости), но не на уровне строк (в КХ это бесполезно), а блоков ?

И, это был последний день месяца и соответственно чтоб порешать нужно было перелить месяц

Kirill
04.07.2018
20:13:13
Такие варианты рассматриваются - можно во время транзакции складывать и мержить part-ы в сторонке от основных данных и затем атомарно добавлять их при коммите. Пока не в ближайших планах.
Я понял, там просто нужно сильно две вещи: во первых делать это в сторонке, а во вторых не мержить до совершения комита - это сильно не нужно и отъедает ресурсы когда так что-то считается

Kirill
04.07.2018
20:14:58
Да, это факт, тут как бы сильно много проблем

@milovidov_an Еще о "боли" у нас "старенький" КХ и freeze partition не работают по префиксу с кастомными партициями. Но у нас больше чем одна таблица и хотелось бы freeze tables a,b,c partition 201805 или freeze a,b,c 2018 - мы сами можем добавить, нужно только синтаксис утвердить и, наверное, складывать не в increment, а от даты + какой-то постфикс

Mike
04.07.2018
20:27:29
граждане, особенно разработчики.. нет ли в 1.1.54385-1.el7 проблемы с жором памяти?
С момента выхода сами собрали и гоняем кластер на этой версии, проблем нет

Kirill
04.07.2018
20:33:43
Мы ещё сами не решили, какой лучше синтаксис для FREEZE хотя бы просто многих партиций.
Вот у нас сильно время пришло, мне просто не очень охота сидеть на кастомной версии КХ.

Bogdans
05.07.2018
07:28:46
Там сильно все сложно, я про ProxySQL, нужно делать поддержку какого-то wire протокола MySQL/PostgreSQL в самом КХ, но там сильно много нюансов.
Оно сейчас достаточно не плохо работает, основная сложность что не все через rewrite rules можно сделать адекватно :)

Alexander
05.07.2018
07:32:49
Оно сейчас достаточно не плохо работает, основная сложность что не все через rewrite rules можно сделать адекватно :)
Если будут какие-то вопросы по ProxySQL — пишите в Altinity или напрямую Рене, поддержка clickhouse протокола там была сделана по нашей просьбе, но далека от идеальной.

dm
05.07.2018
09:05:41
привет. как вы бэкапите кликхаус? по одной табличке, делаете alter ... freeze, или есть менее замороченные методы?

Mikhail
05.07.2018
09:05:58
Подскажите, чем можно посмотрить логи запросов в clickhouse? Интересует какие запросы приходили от клиентов.

Google
Jury
05.07.2018
10:40:20
Всем доброго дня! хочу использовать в одном SELECT одну и ту же колонку дважды, конечно под разными алиасами, например так: select a as a1, function(a) as a2 from .... но не получается, и в a1 и в a2 оказываются результаты выполнения function(a), а как правильно?

Jury
05.07.2018
10:44:54
ну у меня там строки лога, и во второй колонке будут результаты обработки этой строки... и хотелось видеть и raw-строку, и обработанную

papa
05.07.2018
10:54:04
делать можно, но работать будет не так как обычно.

Jury
05.07.2018
10:56:47
ну да, что и получилось

Denis
05.07.2018
11:02:06
кто-нибудь с таким сталкивался? [63/868] Building CXX object dbms/CMakeFiles/dbms.dir/src/Dictionaries/CacheDictionary.cpp.o FAILED: dbms/CMakeFiles/dbms.dir/src/Dictionaries/CacheDictionary.cpp.o /usr/bin/g++-7 <params> -c ../dbms/src/Dictionaries/CacheDictionary.cpp {standard input}: Assembler messages: {standard input}:212615: Warning: end of file not at end of a line; newline inserted {standard input}: Error: open CFI at the end of file; missing .cfi_endproc directive g++-7: internal compiler error: Killed (program cc1plus)

это при билде из исходников после запуска ninja

Evgeny
05.07.2018
11:39:24
Подскажите плз - max_bytes_before_external_group_by и max_bytes_before_external_sort работают? Я делаю запрос с жирным groupby, который валится по отсутствию памяти, но выставление max_bytes_before_external_group_by не помогает (и в system.settings я его не вижу)

Evgeny
05.07.2018
12:02:51
А как тогда правильно из применить к таблице?

Google
Denis
05.07.2018
12:03:19
Английский чат по КХ есть?
ну да, вмето ru напиши en

Diomid
05.07.2018
12:04:04
Denis
05.07.2018
12:04:24
А как тогда правильно из применить к таблице?
я на вторую часть ответил. запросить можно через SELECT * FROM settings WHERE name = ''

Evgeny
05.07.2018
12:12:46
Дмитрий
05.07.2018
12:18:02
господа вопрос а как можно узнать сколько RAM съела engine=Memory()

Stanislav
05.07.2018
12:47:22
Господа, есть табличка соответствий число-строка. Общее количество порядка 30 штук. Сия табличка будет использоваться в десятке-другом запросов. Как правильнее сделать применение сего соответствия в паре десятков запросов? Таки словарь? Если да, то печально - хотел дать возможность поредактировать табличку человеку с r/o правами.

Denis
05.07.2018
12:50:28
как же он будет редактировать с р/о правами? если словарь будет внешний, например монго, а у оператора будут права на соответсвующую запись в монго, то он может править там. а потом настроить возможность релоада в кх по запросу.

Stanislav
05.07.2018
12:50:49
r/o - в кликхаусе и других БД.

Меняться будет в любом случае не чаще раза в месяц, так что проще попросить перечитать с бОльшими правами.

Denis
05.07.2018
12:52:06
вот в варианте со внешним словарём, в кх у него р/о, а в словаре будут права. или напрямую таблицу в кх завести. я что-то не вижу проблемы таблицу из 30 записей заджойнить. кх её должен в памяти держать.

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