
Alex
05.10.2017
15:44:10
через preparestatement + addBatch

Cargeh
05.10.2017
15:47:37
Батч инсерты работают
еще глянул по коду - поидее spring jdbc template должен нормально с этим работать, спасибо.

Алексей
05.10.2017
15:50:02
господа согласно perf top кх замучил ядро. куда бы посмотреть что с ним не так ?

Google

Алексей
05.10.2017
15:50:04
rhel 7.4 c дефолтным ядром. под vmware 6.5

Konstantin
05.10.2017
16:14:27

Алексей
05.10.2017
16:15:55
нет там есть 5 запросов
ага.
total_rows_approx: 553615360
это не очень да ?

Konstantin
05.10.2017
16:18:36


Igor
05.10.2017
16:30:18
Всем привет.
Столкнулись с проблемой подвисших на сервере запросов.
Проявляется когда накидываем кучу запросов на одну машину в кластере - в какой-то момент достигаем лимита на количество одновременно выполняющихся запросов, часть из них начинает отваливаться
И вот часть из отвалившихся запросов остаётся висеть в system.processes.
gdb и код кликхауза помогли найти место, где происходит что-то плохое:
#0 pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1 0x0000000003f6363b in Poco::SemaphoreImpl::waitImpl() ()
#2 0x00000000034896e2 in DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::finalize() ()
#3 0x000000000348a68a in DB::UnionBlockInputStream<(DB::StreamUnionMode)0>::~UnionBlockInputStream() ()
...
Судя по тому, что в коде UnionBlockInputStream перед вечным локом есть намёк на print-debugging
//std::cerr « "popping\n";
output_queue.pop(res);
, проблема известная.
Можете посоветовать как избавиться от подобного?


Vladimir
05.10.2017
17:33:52
Коллеги, помогите разобраться с optimize table partition final в ReplacingMergeTree. Почему после оптимайза остаются дубликаты по первичному ключу?

Vladimir
05.10.2017
17:42:52

Vladimir
05.10.2017
17:44:18
Вроде должны, потому что count() » uniq(primary key), а ver = now()

Konstantin
05.10.2017
17:48:40

Vladimir
05.10.2017
17:49:06
Да, у меня тоже так было, проверял с uniqExect()

Google

Vladimir
05.10.2017
17:49:33
но у меня count() сильно больше uniq() раза в 2, т.е. на несколько десятков миллионов больше

Konstantin
05.10.2017
17:50:48
а с unicExact какой разброс?
у меня разница между count() и uniq(key) 12млн в партиции с 1.3млрд записей
кстати, может кто подскажет, не могу посчитать uniqExact за всю партицию получаю Memory limit (for query) =(
max_memory_usage │ 20000000000
max_bytes_before_external_sort │ 15000000000
max_bytes_before_external_group_by │ 15000000000

Vladimir
05.10.2017
17:59:58
ну так просто не влезает значет, мемори лимиты в байтах, а не строках, так что ещё зависит от типа вашего key

Konstantin
05.10.2017
18:01:04
т.е. на диск запрос никак не выпихнуть?

Vladimir
05.10.2017
18:01:55
Я вам боюсь наврать, по этому не отвечу, но скину ссылку на доклад по этой теме
https://events.yandex.ru/lib/talks/4556/

Maxim
05.10.2017
18:05:04
Привет, а какая таблица подходит для мултипаточной записи

Konstantin
05.10.2017
18:06:09

Maxim
05.10.2017
18:10:23
Ожидается что будет как минимум 20 приложух которые будут писать большими пачками каждую секунду

Атата
05.10.2017
18:23:16

Maxim
05.10.2017
18:32:06

Александр
05.10.2017
18:35:42
Все ок

Vladimir
05.10.2017
18:49:40
А никто не сталкивался с неуникальностью watch_id в hits из яндекс метрики?

papa
05.10.2017
18:50:37
два раза одна и та же строка?

Vladimir
05.10.2017
18:51:28
Да
Одинаковые watch_id

Google

Vladimir
05.10.2017
18:51:52
Остальные поля не проверял
Все поля, которые у меня в выгрузке идентичные

papa
05.10.2017
18:54:57
значит watch_id скорее всего уникальный, но выгрузился два раза.

Vladimir
05.10.2017
18:55:46
Проблема в том, что веб-интерфейс показыват за этот день ровно столько хитов, сколько выгрузилось (больше чем уникальных watch_if)

Атата
05.10.2017
18:59:23

Maxim
05.10.2017
19:01:44

Атата
05.10.2017
19:02:17

Maxim
05.10.2017
19:04:56
Почему?
Нужно максимально ближе к реальном времени отображать обработанные данные

Vsevolod
05.10.2017
19:47:50

Maxim
05.10.2017
20:41:28

Anton
05.10.2017
21:21:24
а если использовать движок Buffer ? Можно и писать, и сразу читать в реальном времени

Maxim
05.10.2017
21:41:16

Anton
05.10.2017
21:47:43

Igor
05.10.2017
22:01:36
Tabix.Beta
Собрал новую тестовую ветку beta
http://beta.tabix.io/
Из основных фич:
-- Устранена большая утечка памяти
-- Добавлено кэширование структуры базы
-- Мелкие ускорения
-- +100500 новых багов))
Changelog:
https://github.com/smi2/tabix.ui/blob/beta/manual/docs/Changelog.md#2017-10-06-beta-1

Cargeh
05.10.2017
22:41:08

Igor
05.10.2017
22:44:23
Только после появления tabix.server - это прокси сервер для запросов
Можно поставить nginx - и прокисорать запросы в CH, в beta появились режимы ROuser+BaseAuth, но нужен слой между

Roman
06.10.2017
07:25:35
@not_logan привет! А тебе удалось попробовать https://github.com/VerizonDigital/vflow/tree/master/consumers/clickhouse для импорта из кафки в деле?

Paul
06.10.2017
07:39:55
Ещё нет, на этой неделе времени не было совсем, постараюсь выкроить на следующей

Google

Bob
06.10.2017
07:48:41
Привет! Не подскажите, можно ли как то отсротировать массив? Или сделать join массива, отсортировать и как то пронумеровать его уже отсортированным?

Андрей
06.10.2017
07:56:12
Коллеги, а кликхаус умеет limit offset?

Bob
06.10.2017
07:57:08
Да, LIMIT n, m позволяет выбрать из результата первые m строк после пропуска первых n строк.

Igor
06.10.2017
08:39:13
господа, а какой драйвер можете порекдомендовать для работы с кликхаузом из питона?

Constantine
06.10.2017
08:44:05
Коллеги, а пользуясь лимит/оффсет можно как-нибудь не задавать лимит? что-то вроде limit 100, 0 (не катит) или limit 100, all

Bob
06.10.2017
08:47:41

Konstantin
06.10.2017
08:57:03

Constantine
06.10.2017
08:57:21

Konstantin
06.10.2017
08:57:30
работает жеж)

Bob
06.10.2017
09:05:24

Vladimir
06.10.2017
09:06:40

Stas
06.10.2017
09:09:38
а подскажите, а как заставить функцию today() выводить дату в формате DateTime (дописывая нули в минуты и часы)

Konstantin
06.10.2017
09:10:04
SELECT toDateTime(today())
┌─toDateTime(today())─┐
│ 2017-10-06 00:00:00 │
└─────────────────────┘

Stas
06.10.2017
09:10:53
спасибо!

Konstantin
06.10.2017
09:16:19
rowNumberInAllBlocks() - запрос продолжает выполнятся пока не пройдет всю таблицу, результаты выдачи отличаются от LIMIT

Constantine
06.10.2017
09:19:43

Konstantin
06.10.2017
09:21:03
угу(
так что limit 100, 999999999999999999 - нормально отрабатывает)))
@untley а вам для консоли надо или скрипт какой нибудь пишете?

Constantine
06.10.2017
09:22:50
скрипт

Google

Constantine
06.10.2017
09:22:55
причем экранированный

Konstantin
06.10.2017
09:23:52
как насчет сначала делать count() запроса и параметр count() подставлять в offset?

Constantine
06.10.2017
09:24:20
каунт тоже по всей таблице пойдет

Konstantin
06.10.2017
09:25:00
25млрд строк посчиталось за 5 секунд

Constantine
06.10.2017
09:25:14
Да и как это запилить? Курсор?
сейчас бы и такое прокатило, однако сложные запросы с джоинами в джоинах в джоинах - нагнут раком

Kostya
06.10.2017
09:34:43

Igor
06.10.2017
09:34:58
спасибо
да, видел кучу разного в т.ч. SQLAlchemy, но хотелось что-нибудь быстрое

Konstantin
06.10.2017
09:39:30
Да и как это запилить? Курсор?
#!/bin/bash
OFFSET=clickhouse-client --query="SELECT count() FROM table_name"
echo "${OFFSET}"
clickhouse-client —query="SELECT * from table_name limit 100, ${OFFSET}"

Kostya
06.10.2017
09:39:33
сейчас занимаюсь оптимизацией первого по скорости вставки, там с ней действительно печально. если проект позволяет, то можете попробовать под pypy, оно работает, но без поддержки компрессии. к сожалению это питон, а не сишечка, поэтому с гошным драйвером и тем более clickhouse-client вряд ли получиться соревноваться

Александр
06.10.2017
11:51:09
Всем привет. Подскажите, можно ли как-то через системные таблицы увидеть, что часть данных, вставленных в ditributed таблицу, еще не отправлена на другой шард?

Andrey
06.10.2017
11:54:35

Bulat
06.10.2017
12:06:03
Коллеги, кто-нибудь знает способ склеить несколько строчек вместе? типа groupConcat из mysql