@clickhouse_ru

Страница 665 из 723
molo4ko
19.09.2018
22:46:49
А там точно такие же ошибки, вплоть до имен смерженных кусков

Alexey
19.09.2018
22:52:57
А там точно такие же ошибки, вплоть до имен смерженных кусков
Посмотрите ещё стек трейс для Transaction failed (No node): Op #4. Также проверьте, что существует нода /clickhouse/tables/1/table_replicated/replicas/node2/parts Вы удаляли какие-нибудь данные из ZK вручную?

Alexandr
19.09.2018
22:53:22
мы видим точно такую же проблему с отрицательной памятью SELECT * FROM system.metrics WHERE metric = 'MemoryTracking' ┌─metric─────────┬──────────value─┬─description──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ MemoryTracking │ -3341363201101 │ Total amount of memory (bytes) allocated in currently executing queries. Note that some memory allocations may not be accounted. │ └────────────────┴────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 1 rows in set. Elapsed: 0.002 sec.

Google
Alexandr
19.09.2018
22:58:42
почему?

Timur
19.09.2018
23:02:07
если я правильно понял - скоро должно быть ) https://github.com/yandex/ClickHouse/pull/2770#issuecomment-422466974
Не то… мне нужен аналог sec_to_time в MySQL . запилю в клиенете

примерно вот так

def sec2time(secs): m, s = divmod(secs, 60) h, m = divmod(m, 60) pattern = r'%02d:%02d:%02d' return pattern % (h,m,s)

Alexey
19.09.2018
23:02:56
почему?
Если счётчик общего потребления оперативки показывает некорректные данные, то эти данные используются в качестве ограничения тоже некорректно. И вы получаете ошибку "Memory limit (total) exceeded" просто так.

Alexandr
19.09.2018
23:04:06
понятно, спасибо, печально (

есть ли где-то презентация или описание того, как Яндекс Метрика вставляет данные в ClickHouse? Например, что за клиент использует, что за буфер, размер пачки, и т.д.? Не нашел в https://github.com/yandex/clickhouse-presentations

Alexey
19.09.2018
23:30:29
есть ли где-то презентация или описание того, как Яндекс Метрика вставляет данные в ClickHouse? Например, что за клиент использует, что за буфер, размер пачки, и т.д.? Не нашел в https://github.com/yandex/clickhouse-presentations
В clickhouse-presentations нет. Могу порекомендовать доклад, который возможно будет на HighLoad++ 2018 в Москве. Будет рассказывать разработчик из Метрики. Правда там ещё не начали голосование за доклады, непонятно выберут ли его. http://www.highload.ru/moscow/2018/abstracts

Alexandr
19.09.2018
23:35:07
Вот этот доклад http://www.highload.ru/moscow/2018/abstracts/4160 ? А есть где-то видео или презентация?

Alexey
19.09.2018
23:35:32
Также есть интересный доклад - как VK вставляют данные в ClickHouse. Там нестандартный подход, потому что вставлять надо с десятков тысяч серверов, и требуются промежуточные слои буферизации. Полная версия: https://www.youtube.com/watch?v=oUzBF299iUo Короткая версия доклада: https://www.youtube.com/watch?v=C7JY8xyzpj8

Вот этот доклад http://www.highload.ru/moscow/2018/abstracts/4160 ? А есть где-то видео или презентация?
Ничего нет. Если доклад примут на Highload++, то может быть появится в ноябре.

Alexandr
19.09.2018
23:36:20
да, тот доклад видел, но не думаю что вставлять over http самый эффективный способ Можете в кратце рассказать, что за клиент используется для вставки, что за буфер перед вставкой в clickhouse

Alexey
19.09.2018
23:39:14
да, тот доклад видел, но не думаю что вставлять over http самый эффективный способ Можете в кратце рассказать, что за клиент используется для вставки, что за буфер перед вставкой в clickhouse
Программы подключают код ClickHouse напрямую, как библиотеку (это похоже например на то, как работает clickhouse-client). Поверх неё есть простая обёртка, которая позволяет добавлять данные построчно. Она формирует блоки в оперативке и отправляет их по достижении нужного размера.

Google
Alexandr
19.09.2018
23:46:13
неожиданно, я думал что используется какая-то очередь. у нас появились проблемы с масштабированием, было год назад 6М запросов в секунду, а сейчас 9-10М мы недавно увеличили количество нод в кластере 36 -> 75 и началось много приключений связанных с записью данных в ClickHouse Например, количество ошибок ClickHouse связанных с Zookeeper выросло на порядок "Zookeeper session expired" В Яндекс.Метрике сколько нод Zookeeper используется и SSD ли? Читал какая сама конфигурация Zookeeper https://clickhouse.yandex/docs/en/operations/tips/ но не нашел деталей про setup

Alexey
20.09.2018
00:03:44
неожиданно, я думал что используется какая-то очередь. у нас появились проблемы с масштабированием, было год назад 6М запросов в секунду, а сейчас 9-10М мы недавно увеличили количество нод в кластере 36 -> 75 и началось много приключений связанных с записью данных в ClickHouse Например, количество ошибок ClickHouse связанных с Zookeeper выросло на порядок "Zookeeper session expired" В Яндекс.Метрике сколько нод Zookeeper используется и SSD ли? Читал какая сама конфигурация Zookeeper https://clickhouse.yandex/docs/en/operations/tips/ но не нашел деталей про setup
В Метрике тоже используется очередь - для получения данных, для промежуточных данных. Кластер ZooKeeper состоит из трёх серверов с SSD. В основной кластер ClickHouse идёт вставка с порядка нескольких десятков серверов, при этом каждый сервер вставляет не на все шарды, а на подмножество, и с каждого сервера идёт около десятка-сотни вставок в минуту. А всего на один кластер где-то несколько тысяч вставок в минуту, а на другой - около десятка тысяч вставок в минуту. Один ZooKeeper кластер обслуживает много кластеров ClickHouse.

Alexandr
20.09.2018
00:10:04
Спасибо за инфо по Zookeeper. А какая версия Zookeeper и насколько мощное железо на тех 3 серверах ZK?

Alex
20.09.2018
00:10:06
Да. Больше 1000 км.
а в конфигах СH в пределах одного ДЦ указываются адреса Zoo только машин из того-же ДЦ?

molo4ko
20.09.2018
00:22:52
Посмотрите ещё стек трейс для Transaction failed (No node): Op #4. Также проверьте, что существует нода /clickhouse/tables/1/table_replicated/replicas/node2/parts Вы удаляли какие-нибудь данные из ZK вручную?
Все, я разобрался, была комплексная проблема, эти исключения (нет ноды / неудачная запись) между собой не связаны и вызваны были внутренними проблемами моей инсталляции, все прошло после устранения причин. Видимо, если в один день сразу столько проблем, то причину нужно было сразу искать у себя)

Alexandr
20.09.2018
00:27:23
@milovidov_an какой у вас размер ZK snaptshot, и средняя latency? Видете ли вы часто такие ошибки? fsync-ing the write ahead log in SyncThread:3 took 8773ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide

molo4ko
20.09.2018
00:34:33
Ничего интересного, к сожалению: 1. Может, вы помните, я раньше спрашивал про пассивные реплики - в итоге ее подняли, а я про нее забыл. И вообще все забыли, в итоге на ней кончилось место и отсюда периодические одни и те же ошибки про оффсет (в исключениях не видно, куда происходила запись, поэтому я про нее не сразу вспомнил, а когда вспомнил и отключил, все прошло). Конечно, странно, что процесс кх не упал и даже продолжал принимать. 2. Ошибка с ZNONODE была вызвана тем, что я писал скрипт для создания force_restore_data, чтобы избежать ручной работы и добавил в итоге /…/$SHARD/$TABLE/replicas/$REPLICA/flags для каждого шарда одинаково, то есть для схема 3 шарда / 2 реплики вышло по одному лишнему пути реплики, которой нет

Alexandr а у вас конфиг зк дефолтный или тот, который в документации приводится?

Alexandr
20.09.2018
00:35:56
не дефолтный, но очень похож на тот что в документации

molo4ko
20.09.2018
00:37:10
Я заметил, что у нас такое случается (сообщения про fsync), когда растет очередь репликации, тогда и latency подскакивает

но у нас и числа поменьше, и данных на порядок меньше (снапшот около 2гб)

Alexandr
20.09.2018
00:40:33
@milovidov_an а что хранится в snaptshot? в нашем случае размер огромный 4.0K acceptedEpoch 4.0K currentEpoch 3.5G log.36a246ad69 1.9G log.36a29bdf68 3.7G log.36a2cbb2ab 3.2G log.36a3254c04 3.6G log.36a3732266 2.6G log.36a3c98737 2.8G log.36a4086eb7 2.0G log.36a44e53fb 2.4G log.36a47dc1ae 2.8G snapshot.36a29bdf60 3.0G snapshot.36a2cbb2a2 3.1G snapshot.36a3254acc 3.0G snapshot.36a373225e 2.8G snapshot.36a3c98735 2.9G snapshot.36a4086eb1 3.0G snapshot.36a44e53f9 2.9G snapshot.36a47dc1a4 49G total

Michal
20.09.2018
06:47:00
Да. Больше 1000 км.
А если между разными ДЦ возникают проблемы с сетью и зукипер теряет кворум? У нас бывают моменты когда из-за каких-то проблем с рутингом aws Tokyo пропадает для ДЦ во Франкфурте на минуты / десятки минут, при этом сам сервер в Токио вполне благополучно обсуживает "свой" трафик.

Google
Александр
20.09.2018
07:04:12
А кто может ответить на вопрос: если запрос содержит несколько джоинов, вложенных естественно и в каждом джоине делается фильтрация по результату подзапроса, который везде одинаковый - он один раз выполнится или в каждом позапросе будет разный результат? Например: select ... from (select ... from table all left join (select ... from table2 where column in (select coulmn from users where active=1))) all left join (select ... from table3 where column in (select coulmn from users where active=1)) select coulmn from users where active=1 - это не продакшен :) это что первое в голову пришло для примера

Michal
20.09.2018
07:07:33
Насколько я помню, всё-таки будут выполнены несколько раз.

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

Там вроде бы как можно это как-то выбросить в таблицу с движком SET, и потом её многократно использовать. Но я не пробовал :) https://clickhouse.yandex/docs/en/operations/table_engines/set/

Aleksandr
20.09.2018
07:40:18
Привет, подскажите, хорошая идея хранить сессии в SummingMergeTree для того чтобы считать время сессии? Или может есть какие-то бестпрактис для этого.

Tima
20.09.2018
07:52:02
Привет, подскажите, хорошая идея хранить сессии в SummingMergeTree для того чтобы считать время сессии? Или может есть какие-то бестпрактис для этого.
Бестпрактис для времени сессий - считать на стороне приложения и в логи писать уже готовое. Иначе достаточно дорого считать

Александр
20.09.2018
08:05:20
Там вроде бы как можно это как-то выбросить в таблицу с движком SET, и потом её многократно использовать. Но я не пробовал :) https://clickhouse.yandex/docs/en/operations/table_engines/set/
Спасибо! Сегодня попробуем сделать через set. Просто сложно отслеживать такие таблицы и потом чистить их ( Хотя там вроде create temporary table можно использовать

Eugene
20.09.2018
08:07:27
Добрый день. Вопрос про распределенный ReplacingMergeTree и ключ шардирования. Чтобы все работало верно приходится ключ шардирования указывать равным ключу replacing. Это as designed или баг и в новых версиях может быть даже уже пофикшено?

Владимир
20.09.2018
08:12:59
Есть ли поддержка модификаторов в функциях использующих регулярные выражения - match, например? Пробовал паттерны вида abc(?i), (?i)(abc) abc\i - не работают.

Michal
20.09.2018
08:14:42
Добрый день. Вопрос про распределенный ReplacingMergeTree и ключ шардирования. Чтобы все работало верно приходится ключ шардирования указывать равным ключу replacing. Это as designed или баг и в новых версиях может быть даже уже пофикшено?
Не понимаю проблему. Важно чтобы записи с одинаковым ключом шардирования всегда попадали на тот же самый сервер/группу серверов. Обычно ключ шардирования - это какой-то фрагмент первичного ключа.

Т.е. если у вас например PK: (userid, timestamp), то ключ шардирования может быть просто userid.

Владимир
20.09.2018
08:26:19
Хм. Возможно мне нужно обновить локальную версию ch

Slava
20.09.2018
08:27:43
Может быть это тайм-аут сети/http клиента? Не самого кликхауса?
http-клиента нет как такового, осуществляется вызова из python clickhouse_dirver

Michal
20.09.2018
08:29:28
Хм. Возможно мне нужно обновить локальную версию ch
Вряд ли в этом дело. Проверьте синтаксис. SELECT match('Hello', 'E') AS r ┌─r─┐ │ 0 │ └───┘ SELECT match('Hello', '(?i)E') AS r ┌─r─┐ │ 1 │ └───┘

Александр
20.09.2018
08:30:56
Очень странно ведет себя движок Set. create table lSet (learnerId UInt64) engine = Set select * from numbers(1000000000) where number in lSet - работает А вот select hash, version from versions_local where learnerId in lSet уже не работает... Method read is not supported by storage Set

Кто-то вообще пользуется этим движком?

Google
Michal
20.09.2018
08:32:17
http-клиента нет как такового, осуществляется вызова из python clickhouse_dirver
Смотрите на таймауты клиента: https://github.com/mymarilyn/clickhouse-driver#client-parameters

Nikolay
20.09.2018
08:32:50
Привет, Возможно ли сделать drop/detach partition по name? Т.е. есть, например, такие записи в system.parts, у которых значения в partition и partition_id одинаковые, но я хочу дропнуть только одну из них. Как я понял из доков нужно указывать именно значение из колонки partition, но мб можно как-то дропнуть по name?



Владимир
20.09.2018
08:32:59
Вряд ли в этом дело. Проверьте синтаксис. SELECT match('Hello', 'E') AS r ┌─r─┐ │ 0 │ └───┘ SELECT match('Hello', '(?i)E') AS r ┌─r─┐ │ 1 │ └───┘
Проверял по разному, не работает. Подозреваю, что все же дело в версии - я довольно давно не обновлял локальный сервер

Michal
20.09.2018
08:37:19
Да проблемы особой нет. Просто не учли этого. Сделали ключ шардирования rand() и надеялись, что должно схлопываться.
Ну rand() не дает гарантии что две версии той же строки всегда будут попадать на ту же группу серверов. Поэтому схлопываться не будут.

Александр
20.09.2018
08:46:41
Но это не вариант, т.к. у нас куча вложенных подзапросов которым индекс потребуется (

Думаю, что стоит завести issue

Michal
20.09.2018
08:47:55
Заработало! Спасибо!
угу, стоит ишью завести, чтоб эта оптимизация игнорировала таблицы с движком Set.

Но это не вариант, т.к. у нас куча вложенных подзапросов которым индекс потребуется (
Задумался - интересно если жонглировать настройками SETTINGS для конкретных подзапросов внутри одного запроса - кликхаус поймет что от него хотели? :)

Александр
20.09.2018
08:50:14
Думаю, что поймет )

Slava
20.09.2018
08:54:41
Смотрите на таймауты клиента: https://github.com/mymarilyn/clickhouse-driver#client-parameters
большое спасибо, Михаил. Были выставлены не те таймаунты на клиенте. помогло

Viske
20.09.2018
09:19:32
привет всем не могу вьехать как удалить партицию?

всё понял какое то время должно пройти просто:)

Slava
20.09.2018
09:26:18
А summing merge tree чем плох?
тем, что не дает 100% гарантий схлопывания

Egor
20.09.2018
09:31:08
Кто подскажет такую вещь: у материальной вьюшки есть свой кэш? т.е. он сразу сбрасывает в таблицу или копит определенное количество?

Google
Mike
20.09.2018
10:07:10
Коллеги, а есть что-то по сравнению кх и Elasticsearch? Удалось найти только https://github.com/yandex/ClickHouse/issues/14.

Michal
20.09.2018
10:08:20
А summing merge tree чем плох?
Если у вас есть какой-то sessionid то на самом деле можно. Можно Summing, можно Aggregating или даже Collapsing (для Collapsing нужно предыдущее состояние знать). Если вы хотите по пользователю и временному окну "нарезать" данные - то внутри КХ это довольно сложно.

Egor
20.09.2018
10:09:01
Сразу. Воспронимайте эти матвью как before insert trigger.
Не сразу. А копит у себя до каких-то попугаев макс блок сайз.

И я не ожидал что это значение в юзерс надо пихать а не в конфиг -_-

Nikolay
20.09.2018
10:46:46
А я правильно понимаю, что если мне надо добавить колонку и заполнить её из данными из select запроса, то default expression при alter - add column в этом не поможет? И в таком случае решение только в: If the ALTER query is not sufficient for making the table changes you need, you can create a new table, copy the data to it using the INSERT SELECT query, then switch the tables using the RENAME query and delete the old table. ?

Vasilij
20.09.2018
10:47:13
Привет! А mySQL движок пока что не умеет WHERE ... IN () на стороне mySQL? А то встала задача сделать WHERE по очень большому списку, и трансформировать всё в список равенств - тяжко.

Alex
20.09.2018
10:53:49
давай в этой чати поговорим еще за dBaseIV и FoxPro ? :)
Кмк, вопрос нормальный, и часто возникает в чате. Вероятно, для этой задачи должна быть табличная функция: SELECT * FROM odbc_query("DSN=XXXXX", "SELECT avg(age), country_id FROM users.user where country_id in (1,2,3,4,5) GROUP BY country_id")

Sergey
20.09.2018
10:58:06
Привет. Подскажите, пожалуйста, под широту и долготу закладывать Float64 или можно обойтись Float32 ?

Vasilij
20.09.2018
10:58:25
давай в этой чати поговорим еще за dBaseIV и FoxPro ? :)
Несколько дней назад один человек уже на эти грабли наступал (и не он один), так что актуально.

Yuri
20.09.2018
10:59:04
Несколько дней назад один человек уже на эти грабли наступал (и не он один), так что актуально.
я только рад, что тут могут помочь. Мне казалось, что про mysql все уже забыли и он остался на свалке истории. Прости, бро

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