
papa
02.06.2017
12:19:44
и сколько у вас разных (ip, streamname,useragent) ?
и какая средняя длина у строк

Ilya
02.06.2017
12:55:27
Коллеги, подскажите, пожалуйста. В локальной сети на выделенную машину поставил CH в дефолтовых настройках. Как подключиться с dev машины к CH через Tabix в реализации "без инсталляции", если такое вообще возможно. Перепробовал все, коннекта нет

prll
02.06.2017
12:57:07
с дефолтными настройками подключиться из сети нельзя.

Google

prll
02.06.2017
12:57:16
надо править listen_host

Ilya
02.06.2017
13:02:07
я комментарии убрал
<http_server_default_response>... понял, сейчас попробую

Maksim
02.06.2017
13:05:42

Alex
02.06.2017
13:07:56
Как-то странно, что отжирает настолько много памяти

Maksim
02.06.2017
13:09:30
ок, разберусь ещё

Alex
02.06.2017
13:15:17
@maxlapshin вот пример по нашей базе.
SELECT *
FROM
(
SELECT
COUNT() AS c,
UserIP
FROM impressions
WHERE EventDate >= '2017-05-20'
GROUP BY UserIP
ORDER BY c DESC
)
LIMIT 5
5 rows in set. Elapsed: 1.612 sec. Processed 145.22 million rows, 1.93 GB (90.09 million rows/s., 1.20 GB/s.)
ОЗУ скушало копейки
Если начинать добавлять в связку GROUP BY - после этого растёт потребление памяти, что в принципе логично, но не настолько критично как у вас. Возможно получается всё же слишком много записей? Стоит попробовать как-то групировать пользователей сразу, к примеру генерировать какой-то fingerprint

Ilya
02.06.2017
13:25:42
поставил <listen_host>::</listen_host> и рестартовал. но сервер через tabix все равно не доступен
может еще что надо сделать?

Andrey
02.06.2017
13:38:53
netstat -natp | grep LISTEN

Maksim
02.06.2017
13:47:46

Google

Vladimir
02.06.2017
13:47:51

Ilya
02.06.2017
13:49:05
хм, сказал Ок
я пытаюсь зайти, используя http://ui.tabix.io/#/login

Andrey
02.06.2017
13:53:26
Вы curl на сервере делали или на своей тачке?

Ilya
02.06.2017
13:55:24
curl на сервере с использованием внешнего IP, на локальной win машине открыл браузером

Andrey
02.06.2017
13:56:22

Ilya
02.06.2017
13:56:26
да

Andrey
02.06.2017
13:56:45
В tabbix указываете с портом или без?
Порт у вас стандартный?

Ilya
02.06.2017
13:56:53
с портом
8123

Andrey
02.06.2017
13:57:33
А что в консоли браузера при подключении через tabbix?

Ilya
02.06.2017
13:58:59
Хост: http://10.0.0.234:8123, login default, pass пустой.... ВЫдает "ошибка доступа"
Direct CH

Andrey
02.06.2017
13:59:42
В консоли, не на странице
В хроме под виндой открывается по F12 вроде

Ilya
02.06.2017
14:01:56
/#/login:1 XMLHttpRequest cannot load http://10.0.0.234:8123/s1/query.
OPTIONS http://10.0.0.234:8123/s1/query 501 (Not Implemented)
/#/login:1 XMLHttpRequest cannot load http://10.0.0.234:8123/s1/query. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://ui.tabix.io' is therefore not allowed access. The response had HTTP status code 501.

Andrey
02.06.2017
14:02:46

Google

Andrey
02.06.2017
14:03:19
Ребзя, а как это в CH настраивается? Cors в смысле

papa
02.06.2017
14:06:06

Maksim
02.06.2017
14:07:37
SELECT
ip, name, type, user_id, country, referer, useragent,
dictGetString('useragents','browser_type',tuple(useragent))
AS ua_browser_type,
sum(deleted_at - created_at) AS view_time,
um(bytes_sent) AS bytes_sent,
min(toUnixTimestamp(created_at)) AS created_at_,
max(toUnixTimestamp(deleted_at)) AS deleted_at_,
min(id) AS id_,
count(distinct id) AS count
FROM sessions
WHERE
account_id=19446
AND created_at_date='2017-06-02'
AND created_at > (toDateTime(1495148194))
GROUP BY
ip, name, type, user_id, country, referer, useragent,
created_at_date
ORDER BY created_at_ asc
LIMIT 200
вот, даже без вложенного селекта
я группирую всё, что похожее и вот оно не влезает в 9 гигабайт

papa
02.06.2017
14:19:17
count(distinct id) =uniq(id)

Dig
02.06.2017
14:19:56
referer и useragent - длинные строки. Используйте hash функции, намного сэкономите памяти при Group By

papa
02.06.2017
14:20:22
т.е. тяжелый агрегат, тяжелые ключи. миллион кардинальность. может, так и должно быть.

Dig
02.06.2017
14:22:07
была где-то ссылка здесь на то, как делать Group By, если не влезает в память. Поищите.
GROUP BY и Memory limit exceeded
https://events.yandex.ru/lib/talks/4556/

papa
02.06.2017
14:25:05
вообще, если память у вас есть, и никому кроме себя вы не мешаете, то ставьте сколько нужно. иногда можно оценить какой у вас рост данных в этом запросе будет в ближайшие пару лет, т.е. когда этот вопрос встанет опять.

Maksim
02.06.2017
14:28:26
да, у меня очень много строк после group by остается
окей, следующий вопрос: если я задеру max_query_memory до, скажем, 24 гигабайт при том, что на сервере сейчас 32 гига памяти, кликхаус может упасть с OOM из-за этого?

Ilya
02.06.2017
14:40:20
Еще вопрос есть. Как с помощью https://github.com/yandex/clickhouse-odbc подключиться к базе из R (Win)? поставил релиз 64 бит, R 64 бит. Пишу
library(DBI)
con <- dbConnect(odbc::odbc(),
driver = "ClickHouse ANSI",
# database = "default",
uid = "default",
#pwd = "password",
host = "10.0.0.234",
port=8123L
)
Выдает ошибку: Error: nanodbc/nanodbc.cpp:950: HY000: Cannot parse port number.

Maksim
02.06.2017
14:47:08
Ооо, group_by_overflow='any' !!

Dig
02.06.2017
14:49:39
Вот пример, как hash позволяет уменьшить время запроса и потребление памяти:
Запрос 1 - используем hash:
select fromDomainHash, any(fromDomain), count() from test
group by fromDomainHash
order by count() desc
format JSON
"rows": 375,
"statistics": {
"elapsed": 0.026554691,
"rows_read": 1636501,
"bytes_read": 39930314
}
Второй запрос - без использования hash:
select fromDomain, count() from test
group by fromDomain
order by count() desc
format JSON
"rows": 375,
"statistics": {
"elapsed": 0.024187994,
"rows_read": 1636501,
"bytes_read": 53022322
}
В первом случае памяти потребовалось в 1,35 раза меньше!

Maksim
02.06.2017
14:51:41
а domainHash при этом надо сохранить при записи? Т.е. мне надо хранить hash(useragent) для этого?

Sergei
02.06.2017
14:54:25
Привет!
никто не подскажет
match(haystack, pattern)
можно сделать icase

Google

Sergei
02.06.2017
14:54:26
?

papa
02.06.2017
14:57:52
хотя нет, это для like/position

Maksim
02.06.2017
15:02:17
хранить при записи в смысле?

papa
02.06.2017
15:04:00
да, сохранять при записи. например добавить колонку с default hash(domain)

Dig
02.06.2017
15:11:23
Мы используем fieldHash Uint64 materialezed cityHash64(field)

Maksim
02.06.2017
15:12:32
ну в любом случае надо сделать новую таблицу и туда все данные перелить, верно?

Dig
02.06.2017
15:13:29
Не помню, почему не подошел default, а materialized сработал

Maksim
02.06.2017
15:14:00
> Такой столбец не может быть указан при INSERT, то есть, он всегда вычисляется.
а он вычисляется один раз при вставке или всегда потом при каждом обращении?

Dig
02.06.2017
15:19:26
Судя по информации bytesRead, при вставке

Maksim
02.06.2017
15:41:36
помогло!
Итак, что у меня было.
Запрос с group by, оставляющий очень много строк, не влезал в память.
Я сделал alter table sessions add column ref_hash UInt64 materialized cityHash64(referer);
и поменял с group by referer на group by ref_hash
Теперь всё стало сильно лучше и влезает в 10 гигабайт.

papa
02.06.2017
15:48:37
а исходные рефереры ответе не нужны?

Maksim
02.06.2017
15:50:28
неа
мне надо по ним сгруппировать

Alexander
02.06.2017
15:51:03

Maksim
02.06.2017
15:51:34
и ещё я поменял вложенный селект с count distinct на uniqCombined((field1,field2,field3))

f1yegor
02.06.2017
16:17:46

Ilya
02.06.2017
16:18:41
подскажите пожалуйста какой сейчас Go коннектор к кликхаусу считается самым тру?

Google

f1yegor
02.06.2017
16:20:06

Maksim
02.06.2017
16:20:14
нисколько
у меня одна таблица

f1yegor
02.06.2017
16:28:33

Maksim
02.06.2017
16:28:41
даа, здесь выше выложили
я его прослушал уже

Vladimir
02.06.2017
16:47:20
А что?

Ilya
02.06.2017
16:50:25

f1yegor
02.06.2017
16:51:08
Да думал может попрактиковаться

Pavel
02.06.2017
16:51:32
практикуемся на С++ :)))
на го три либы, а на плюсах одна, даешь конкуренцию :)

Igor
02.06.2017
16:52:03
уже три? :О

Ilya
02.06.2017
16:52:37
я нашел две более-менее активных

Pavel
02.06.2017
16:53:57
ок, две, могу ошибаться:)
вот плюсовому драйверу очень не хватает батчера, красивого
в проекте я нечто на коленке написал, что задачку решает, но блокирует поток приема данных, некрасиво