
molo4ko
09.10.2018
15:13:52
единственное, что вижу здесь из значительных отличий - явное указание бд в Distributed (vs ’’ в моем случае).
непонятно, почему так

Denis
09.10.2018
15:20:32
Distributed таблице нужна бд, я почему-то думал что currentDatabase() раскроется в момент create и в моем случае будет dw, но я не уверен как работает currentDatabase, и не использовал.
похоже раскрывается в базу в которой создана distributed
USE test
CREATE TABLE dw.tableX on cluster replicated as test.tableX_ ENGINE = Distributed (segmented_mirrored,currentDatabase(),'tableX_',rand ());
select * from dw.tableX;
DB::Exception: Table dw.tableX_ doesn't exist..

Google

Denis
09.10.2018
15:29:15
интересно с ''
use test
CREATE TABLE dw.tableX on cluster replicated as test.tableX_ ENGINE = Distributed (segmented_mirrored,'','tableX_',rand ());
select * from dw.tableX;
...
1 rows in set. Elapsed: 0.002 sec.
use dw
select * from dw.tableX;
Received exception from server (version 18.12.17):
Code: 60. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Table dw.tableX_ doesn't exist..

Kirill
09.10.2018
15:37:20
Боюсь что все это связано больше стем, что никто не думал (нет понимания того) как это должно работать в данной ситуации, если описать поведение то его можно поправить.
Можно на HL++ собраться и обговорить подобные штуки, ну и все что накопилось, и обсудить что хочется/чего не хватает и кто что может сделать.
@milovidov_an ^ я думаю можно организовать маленький "круглый стол" ? :)

Denis
09.10.2018
15:55:31
мне кажется что проблема molo4ko абсолютно в другом: https://github.com/yandex/ClickHouse/issues/3253

Алексей
09.10.2018
16:37:28
Может быть оффтопик, но я сделал статью целиком благодаря ClickHouse: https://medium.com/@aleksey_80472/crypto-kitties-from-the-raise-to-inbreeding-4bed53600c26 и я сомневаюсь сделал ли я что то подобное без него

molo4ko
09.10.2018
17:04:55

Denis
09.10.2018
17:07:19
да, это именно моя проблема, и дебаг получше, чем я провел. правда, проявление непмного другое: я все еще считаю, что если нода делает попытку проверить схему / наличие таблиц на удаленных шардах, то это нормально, и резолвить имя базы при наличии конфига кластера имеет смысл
это немного другое проявление проявляется у всех ? , просто никто не замечает что у них запрос работает 10 секунд вместо 5, потому что не знают, что он должен 5 сек. работать ? .

molo4ko
09.10.2018
17:09:42
Да, я скорее о том, что это проявляется при прохождении этапа оптимизации, на котором мой случай ломается
в смысле после него
мое вот здесь:
https://github.com/yandex/ClickHouse/blob/master/dbms/src/Interpreters/ExpressionAnalyzer.cpp#L226
то есть прямо в конструкторе, а #3235 - дальше

Alexey
09.10.2018
17:11:59

Google

Алексей
09.10.2018
17:19:46

Vladislav
09.10.2018
17:31:30

Alexey
09.10.2018
17:33:34
Спасибо.
А про mdadm вместо LVM актуально?
Уже давно используем на серверах mdadm без LVM. Один раз были подозрения на старом сервере, что mdadm поверх LVM разделов может приводить к деградации производительности. Но мы это не подтвердили и не опровергнули. То есть получается, что совет не серьёзный (на уровне народной приметы).
Единственное - не нужно делать RAID лишь средствами LVM, так как он хуже, чем mdadm (там есть какая-то ограниченная возможность делать RAID-ы).

Vladislav
09.10.2018
17:38:47
А почему не физические контроллеры для рейдов?

Alexey
09.10.2018
17:39:00
У нас их нет.

Vladislav
09.10.2018
17:39:31
С финансовой точки зрения не имеет смысла? Или исторически?

Alexey
09.10.2018
17:41:58
Просто мало смысла (или вообще нет смысла). Впрочем я не могу на 100% сказать про мотивацию.

Vladislav
09.10.2018
17:47:55
Спасибо

Kirill
09.10.2018
17:50:40
'Code: 164, e.displayText() = DB::Exception: Cannot execute query in readonly mode, e.what() = DB::Exception\n’
Ловится при отправке запроса на Insert через HTTP-интерфейс
Sqlalchemy дает ConnectionError со временем
Кто-нибудь может поделиться секретом вставок на питоне?)

Denis
09.10.2018
17:51:53

Kirill
09.10.2018
17:52:54
ConnectionError: ('Connection aborted.', BrokenPipeError(32, 'Broken pipe’))
И снова

Wolf
09.10.2018
18:55:18
Софтовыми рейдами

Google

Petr
09.10.2018
18:59:46
Привет, я правильно понял, что для репликации данных, нужно на серверах указать в конфиге хост с ZooKeeper, и создать таблицы из семейства Replicated с одинаковым путем в ZooKeeper и все ?

Wolf
09.10.2018
19:00:49
С разными путями а так всё верно
Ну и если нужна отказоустойчивость то зукиперов в кластере надо держать хотя бы три

Petr
09.10.2018
19:02:23

Vladislav
09.10.2018
19:02:31
Кстати, еще вопрос про ZooKeeper.
Сейчас у нас 2 ноды КХ и на них же 2 ZooKeeper + еще на одном левом сервер zookeeper и работает все достаточно плохо.
Сейчас переделываем архитектуру, будет 3 ноды КХ на них же 3 зукипера. + 2 зукипера на соседних серверах.
Стоит ли так делать? или лучше взять 3 мега слабых сервера под зукипер, зато без соседей?
как мы поняли, SSD ему обязатален.

Petr
09.10.2018
19:03:15
вообще не стоит ставить ZooKeeper на серваки с КХ

Wolf
09.10.2018
19:03:17

Алексей
09.10.2018
19:03:41

Petr
09.10.2018
19:03:44
В ReplicatedMergeTree 2 параметр

Wolf
09.10.2018
19:04:15
Ставить зк на сервера кх это стрелять себе в ногу, прилетит запрос или нагрузка которая положит сервера кх и сдохнут с ними зк

Vladislav
09.10.2018
19:04:43
но их будет 3 + 2 резевных на мощных серверах(но там беки проектов)

Wolf
09.10.2018
19:04:48
Разделите по виртуалкам

Petr
09.10.2018
19:05:18
Не следует запускать ZooKeeper на тех же серверах, что и ClickHouse. Потому что ZooKeeper чувствителен к latency, тогда как ClickHouse легко может нагрузить все ресурсы сервера.

Vladislav
09.10.2018
19:09:21
Разделите по виртуалкам
SSD очень критично на них?
Мы сейчас видим, что ЗК на HDD сильно отстают от тех, что на SSD… или если все будут на HDD - не будет разницы?

Wolf
09.10.2018
19:10:39

Алексей
09.10.2018
19:11:40
Раз уж настал вечер вопросов, я тоже задам - кто сравнивал производительность кликхауса в кластере на SSD и HDD - какие выводы можно сделать?

Wolf
09.10.2018
19:12:30
На нашей нагрузке и данных хдд хватает с головой

Google

Wolf
09.10.2018
19:13:22
В целом при пике кх утилизирует 150-200мб в секунду что в целом потолок для хдд
Просто если данных много там разница в цене чуть ли не на порядок

Vladislav
09.10.2018
19:16:02
КХ справляется с записью на HDD с большим запасом

Wolf
09.10.2018
19:17:06

Denis
09.10.2018
19:21:02

Alex
09.10.2018
19:21:57

Denis
09.10.2018
19:22:01

Wolf
09.10.2018
19:24:09

Alex
09.10.2018
19:24:33

Alex
09.10.2018
19:27:08
ЗК подтверждает транзакцию только если был fsync лога на диск.

Vladislav
09.10.2018
19:27:45
короче SSD на 3х серверах не связанных с КХ=(

Denis
09.10.2018
19:28:48
что никто не видел ZK fsync warning ?
fsync.warningthresholdms
A warning message will be output to the log whenever an fsync in the Transactional Log (WAL) takes longer than this value. The values is specified in milliseconds and defaults to 1000. This value can only be set as a system property.

Alex
09.10.2018
19:33:54
Да, я видел :) Чуть подробнее - ЗК хранит свои данные на диске в виде WAL + снапшотов. Чтобы подтвердить транзакцию, она сначала должна оказаться на диске записанной в WAL. А снапшоты делаются периодически, чтобы можно было удалять старый WAL. И их конечно лучше делать не слишком часто, чтобы ЗК сам себе не мешал.
Но и не слишком редко, а то проигрывание WAL-а при рестарте будет долго занимать :)

Daniel
09.10.2018
19:51:35

Alex
09.10.2018
20:05:47

Daniel
09.10.2018
20:57:32

Evgeny
09.10.2018
21:59:02
Правильные mat-views решают все (в моей задаче)

Google

Pika
09.10.2018
22:04:40
Подскажите пожалуйста, почему ClickHouse считает, что следующий запрос не верен?
:) SELECT toDateTime('2018-01-01T00:00:00') < toDate('2019-01-01');

Evgeny
09.10.2018
22:09:58
А логи и ошибки какие?

Denis
09.10.2018
22:09:58
вообще-то работает, и в 18.14.0 и в 1.1.54394
но исторически у КХ строгая типизация

Pika
09.10.2018
22:10:50
Не верен в смысле возвращает поль, сорян.

Denis
09.10.2018
22:14:30
баг может,
SELECT toDateTime('2018-01-01 00:00:00') < toDateTime(toDate('2019-01-01'))
┌─less(toDateTime('2018-01-01 00:00:00'), toDateTime(toDate('2019-01-01')))─┐
│ 1 │

Pika
09.10.2018
22:16:02
Ага. Собственно в этом вопрос.

papa
09.10.2018
22:22:49
что происходит понятно
SELECT toDateTime('1970-01-01 03:00:08') = toDate('1970-01-09') AS z
┌─z─┐
│ 1 │
└───┘
видимо, даты и время лучше не сравнивать между собой без явного приведения

Alexey
09.10.2018
22:55:58

Arkady
10.10.2018
07:37:48
Доброе утро!
Вопрос про DELETE/UPDATE и MaterializedView типа MergeTree:
Если я выполняю delete/update на исходной таблице, то меняются ли данные во вьюхе?
Например, если имеется вьюха с движком AggregatingMerge и там есть колонка uniqState(id) as uniqIds, я выполняю Delete над исходной таблицей, удаляя половину уникальных id, то значение в колонке uniqIds уменьшится в два раза?

Ivan
10.10.2018
07:41:37

Arkady
10.10.2018
07:41:53
Ок. Спасибо

Vladimir
10.10.2018
07:46:28
Всем привет! Делаю запрос SELECT 1 format JSON; получаю ошибку
Code: 62, e.displayText() = DB::Exception: Syntax error: failed at position 17: JSON FORMAT TabSeparatedWithNamesAndTypes;. Expected identifier, e.what() = DB::Exception
Подскажите, плз, что я делаю не так

Alex
10.10.2018
07:48:48

Vladimir
10.10.2018
07:48:56
jdbc

Alex
10.10.2018
07:49:16
Jdbc сам добавляет формат

Vladimir
10.10.2018
07:49:32
т.е. его конфигурить как-то надо?
или не получится json вытащить?