
Igor
22.06.2017
11:55:54
Мы проблем со скоростью не наблюдали у нас 6 месяцев в проде драйвер

Maksim
22.06.2017
11:56:26
на каждый запрос новое подключение не закрытое. как это решает проблему. или он наследует свое прошлое подключение?
кто в теме объясните плиз)

Александр
22.06.2017
11:59:58
Кип элайв на уровне курла хендлится

Google

Igor
22.06.2017
12:00:54
В сми2 драйвере keep_alive + FORBID_REUSE - включён по умолчанию

Александр
22.06.2017
12:02:16
Там получается логика такая, что газл прокидывает кипэлайв в курл, курл же уже хэндлит это дело сам и получается, что при повторном запросе на этот же хост уже сам курл использует открытое соединение
Как бы сам php ниче не хендлит в этом плане

Maksim
22.06.2017
12:02:35

Александр
22.06.2017
12:03:26
Не, запросы выполняются как обычно

Maksim
22.06.2017
12:03:33
как проверить этот самый keep-alive

Александр
22.06.2017
12:03:36
Просто это на более низком уровне рулится

Maksim
22.06.2017
12:03:46
сделать запрос несколько раз в цикле и посмотреть время ?
первый должен быть долгий остальные быстрее
верно?

Александр
22.06.2017
12:05:13
Не совсем ) Повторные запросы могут быть и медленней по некоторым причинам ) Например передача данных по сети, время выполнения запроса

Fike
22.06.2017
12:05:24
как все-таки проявляется проблема со временем? просто наблюдается, что запросы дольше идут?

Google

Александр
22.06.2017
12:05:29
Например первый запрос может отработать на сервере за 100мс, второй за 120 несмотря на то, что они одинаковые

Fike
22.06.2017
12:05:33
просто есть вероятность, что не тот вопрос решается

Igor
22.06.2017
12:06:02

Александр
22.06.2017
12:06:51
А кто-то может подсказать по сборке КХ из исходников? Не могу deb пакет собрать. release скрипт ничего не делает )
Тем неменее я собрал обычный бинарник который запускается и вполне себе работает

Maksim
22.06.2017
12:08:48
если она вшита и работает по умолчанию я должен получить на повторно выполняемый запрос разные результаты. первый дольше, остальные быстрее (не учитывая скорости по сети значения должны быть ниже в любом случае)

Александр
22.06.2017
12:19:00
Я же говорю, что не факт что так будет
Даже если запросы одинаковые
Первый запрос сам сервер обработает за 100мс, второй такой же запрос сервер отработает за 120мс

Igor
22.06.2017
12:25:11
даже если это select sleep(1.0) или select 1?

Александр
22.06.2017
12:26:56
Такие само собой одинаково отработают :) И то, нельзя наверняка утверждать

Дмитрий
22.06.2017
12:58:47
Господа, может кто-нибудь помочь разобраться с проблемой сэмплирования? При запросе с сэмплированием вылетает ошибка Not found column sipHash64(player_id) in block. There are only columns: player_id., e.what()
Строчка из запроса на создания таблицы: ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/Crystals',
'{nodename}',
date,
sipHash64(player_id),
player_id,
8192)
Что я делаю не так?
Запрос к примеру элементарно: select count() from Crystals sample 0.2

Alexander
22.06.2017
13:07:39
http://paste.org.ru/?i4q3m1
чот память жрется адищево o_O
КХ жрет все,вместе со свопом и падает лол
не хочется ограничивать себя на селектах, но 15 гигов для инсерта - имхо многовато, особенно когда их столько
это оно регулируется background_pool_size?

Google

Alexander
22.06.2017
13:12:15
в плане сколько запросов одновременно будут активными
ни один клиент вставки не ведет, это какое-то внутренее шебуршание

Дмитрий
22.06.2017
13:23:34
Я, кажется понял в чем проблема. Напишу сразу, не проверяя, чтобы не забыть.
Проблема в том, что ключ сэмлирования не был добавлен в кортеж первичного ключа. Таблицы надо пересоздать с такой строчкой: ENGINE = ReplicatedMergeTree(
'/clickhouse/tables/{shard}/Crystals',
'{nodename}',
date,
sipHash64(player_id),
(player_id, sipHash64(player_id)),
8192)

Aleksandr
22.06.2017
13:49:42
Какой тэг нужно использовать для dictionary в PostgreSQL (аналогичный <mysql>)?

Александр
22.06.2017
13:52:01
Возможно pgsql

Aleksandr
22.06.2017
13:52:42
буду пробовать pgsql )

Andrey
22.06.2017
13:56:26

Aleksandr
22.06.2017
13:57:32
нет, тэг нужен в конфигурационном файле словаря

Andrey
22.06.2017
13:57:49

vfhby
22.06.2017
14:22:59
/64

Igor
22.06.2017
14:24:38
коллеги, а как эскейпить бинарные данные в tsv? что то вроде \0\13\61 и так далее?
спасибо

Alexander
22.06.2017
14:40:31
я ошибся

Anton
22.06.2017
15:05:26
Привет! А может кто-то подсказать. Как получить индекс элемента массива?
А то есть ParsedParams.Key1 типа
['application.version.build','provider','sender.deviceId','type','application.name','sender.uuid','application.version.revision','application.version.minorVersion','sender.platformId','sequenceNumber','version','timestamp','id','sender.platformId2','notificationStatus','application.version.majorVersion','application.type']
и ParsedParams.Key2 типа:
['37287','MOBILE_SEARCH_APP','6bc88d44e950a5d03c7ae04fc78bf1e6','PUSH_RECEIVED_EVENT','ru.yandex.searchplugin','0bd946d944af561976d873bd99e33ec3','0','2','285325077801136604','28116','1','1498020959490','smoo.weather.28344072.1498014084395934-16988740666232459169','2:-6917536967133571637','ENABLED','6','APPLICATION']
И нужно понуть, откуда брать timestamp, потому что в разных записях он на разных позициях...
Или, может быть, есть гораздо проще способ?


Alexey
22.06.2017
15:16:25
Коллеги, а такой функции нет?
uniqCombinedIfState

prll
22.06.2017
15:27:13


Roman
22.06.2017
15:31:20
Привет! А может кто-то подсказать. Как получить индекс элемента массива?
А то есть ParsedParams.Key1 типа
['application.version.build','provider','sender.deviceId','type','application.name','sender.uuid','application.version.revision','application.version.minorVersion','sender.platformId','sequenceNumber','version','timestamp','id','sender.platformId2','notificationStatus','application.version.majorVersion','application.type']
и ParsedParams.Key2 типа:
['37287','MOBILE_SEARCH_APP','6bc88d44e950a5d03c7ae04fc78bf1e6','PUSH_RECEIVED_EVENT','ru.yandex.searchplugin','0bd946d944af561976d873bd99e33ec3','0','2','285325077801136604','28116','1','1498020959490','smoo.weather.28344072.1498014084395934-16988740666232459169','2:-6917536967133571637','ENABLED','6','APPLICATION']
И нужно понуть, откуда брать timestamp, потому что в разных записях он на разных позициях...
Или, может быть, есть гораздо проще способ?
http://clickhouse-docs.readthedocs.io/ru/latest/functions/array_functions.html#indexof-arr-x


papa
22.06.2017
15:38:10

Anton
22.06.2017
15:44:33

Google

Anton
22.06.2017
15:44:50
А то я уже какие-то там лямбды начал городить по тому, что нашёл в нашей доке


papa
22.06.2017
15:50:13
Привет! А может кто-то подсказать. Как получить индекс элемента массива?
А то есть ParsedParams.Key1 типа
['application.version.build','provider','sender.deviceId','type','application.name','sender.uuid','application.version.revision','application.version.minorVersion','sender.platformId','sequenceNumber','version','timestamp','id','sender.platformId2','notificationStatus','application.version.majorVersion','application.type']
и ParsedParams.Key2 типа:
['37287','MOBILE_SEARCH_APP','6bc88d44e950a5d03c7ae04fc78bf1e6','PUSH_RECEIVED_EVENT','ru.yandex.searchplugin','0bd946d944af561976d873bd99e33ec3','0','2','285325077801136604','28116','1','1498020959490','smoo.weather.28344072.1498014084395934-16988740666232459169','2:-6917536967133571637','ENABLED','6','APPLICATION']
И нужно понуть, откуда брать timestamp, потому что в разных записях он на разных позициях...
Или, может быть, есть гораздо проще способ?
а что из этого timestamp


Anton
22.06.2017
15:51:58
В данном случае 1498020959490, который [11]

papa
22.06.2017
15:55:13
а, я понял, у вас key-value с ключами и значениями в соответствующих индексах. можно например сделать arrayFilter(v,k->k='abc', Keys2, Keys1)
и видимо надо как-то решить что делать если их больше или меньше одного

Anton
22.06.2017
15:56:28
Ага, спасибо! Вроде с indexOf тоже работает ParsedParams.Key2[indexOf(ParsedParams.Key1, \'timestamp\')]
больше одного не должно быть, а если меньше, то выкидывать пока устраивает вроде

Maksim
22.06.2017
16:00:51
Скажите пожалуйста. Если я вставляю запись в таблицу, могу ли я тригером вставить её в другую таблицу с помощью кх ?
чтобы не делать 2 запроса на вставку

Alexey
22.06.2017
16:03:26
> Alexander Morozov, [22.06.17 16:09]
не хочется ограничивать себя на селектах, но 15 гигов для инсерта - имхо многовато, особенно когда их столько
Alexander Morozov, [22.06.17 16:11]
это оно регулируется background_pool_size?
Да, это нехорошо. Настройка background_pool_size не влияет на максимальное количество одновременных INSERT-ов. Она влияет на мержи.
Почему тратится много оперативки на INSERT: на это влияет размер вставляемой пачки данных. Но возможны и другие причины. Может быть связано с таблицами типа Buffer. Более точно по приведённой информации сказать не могу.


Maksim
22.06.2017
16:29:37

Anton
22.06.2017
16:43:18
А почему так не работает, не подскажете?
SELECT
ParsedParams.Key2[indexOf(ParsedParams.Key1, 'timestamp')] as ts,
toUInt32(ts) as ts_int
Code: 32, e.displayText() = DB::Exception: Received from mtmoblog01-22-2.yandex.ru:9000, 2a02:6b8:b010:7205:c660:36aa:25c5:867f. DB::Exception: Attempt to read after eof: Cannot parse UInt32 from String, because value is too short., e.what() = DB::Exception

Олег
22.06.2017
16:44:52

Renat
22.06.2017
16:48:40
Всем привет! Имеем на данный момент X шард с 32 ядрами CPU и 120 гигабайтами RAM
Рассматриваем два пути масштабирования: удвоить количество шардов, либо удвоить CPU до 64 ядер и RAM до 240
Что предпочительнее? Какие плюсы и минусы?

Slach
22.06.2017
16:52:47

papa
22.06.2017
17:02:23

Renat
22.06.2017
17:02:38
> Льёте на ноды напрямую или через distributed
льем на ноды через distributed
> Join ещё большие есть?
join практически не используем
> Сколько активных клиентов на кластер?
Сложно оценить, не имею такой метрики :( Посчитал запросы по system.query_log, среднесуточно - около 12 select запросов в секунду на кластер

Google

Anton
22.06.2017
17:03:55

papa
22.06.2017
17:06:04
предполагаю, что у вас нет элмента с timestamp, от этого у вас приходит какой-то странный indexOf, по этому индексу лежит дефолтное значение нужного типа и оно не конвертируется в число.
т.е. см выше про то, что делать если timestamp больше или меньше одного
возможно вам нужна функция toUInt32OrZero

Anton
22.06.2017
17:16:03
Да, сейчас с ней пробую.
Я думал, что спасёт:
AND indexOf(ParsedParams.Key1, \'timestamp\') >= 1
AND indexOf(ParsedParams.Key1, \'id\') >= 1

Tatiana
22.06.2017
17:18:22

Alexey
22.06.2017
18:42:36

Anton
22.06.2017
19:10:21
А Attempt to read after eof здесь что-то значит?:)

Alexey
22.06.2017
19:14:45
Это говорит о том, что аргумент функции - строка, была рассмотрена как поток байт для чтения. Затем над этим потоком была вызвана функция для чтения числа. Эта функция попыталась прочитать больше данных, чем есть в потоке.

Anton
22.06.2017
22:42:43
/stat@combot

Combot
22.06.2017
22:42:43
combot.org/chat/-1001080295593

[Anonymous]
23.06.2017
04:01:36
@FolderArchive - канал, где сливают платный полезный - образовательный контент и курсы, например можно скачать курсы "Нетологии" или все курсы "Бизнес Молодости".