@clickhouse_ru

Страница 606 из 723
Vladislav
01.08.2018
05:06:57
привет. внезапно прекратились мержи, в логах КХ ошибки типа: 2018.08.01 05:04:46.025443 [ 53 ] <Warning> local.clickstream_new (StorageReplicatedMergeTree, PartCheckThread): Found parts with the same min block and with the same max block as the missing part 201807-0_783_809_5. Hoping that it will eventually appear as a result of a merge. в папке таблицы набралось много папок 201807-0_XXX_XXX_0. вставляем в distributed таблицу, проблемы только у двух таблиц: оригинальной и ее копии с кастомным партиционированием, остальные мержатся нормально. процесс заливки данных не изменяли. куда смотреть?

Kirill
01.08.2018
06:38:51
у прометея есть экспортёр для ch, -scrape_uri=http://clickhouse.service.consul:8123/, в результате жалуется на dial tcp: lookup clickhouse.service.consul on 2.1.9.9:53: no such host" file=clickhouse_exporter.go line=310 time="2018-07-31T09:28:27Z" level=info msg="Error scraping clickhouse: Error scraping clickhouse url http://ch.service.consul:8123/?query=select+%2A+from+system.metrics: Error scraping clickhouse:`
scrape_uri - это адрес КХ (обычно 127.0.0.1), в прометеусе вы можете руками прописать адреса экспортеров, либо использовать консул и регать экспортеры там, если у вас окружение динамическое то лучше использовать консул и там регистрироваться, если нет то просто пропишите в него адреса экспортеров.

Артемий
01.08.2018
06:41:35
Добрый день! Есть столбцы (string, hash): data1, data2, data3, и другие столбцы Нужно делать поиск по data1 ИЛИ data2 ИЛИ data3 Как лучше организовать таблицу или таблицы, чтобы CH максимально хорошо и быстро искал нужные строки?

fikfok
01.08.2018
07:45:12
Добрый день, коллеги! Делаю выборку: select request_id from my_table where request_id = '59f911f179bea204f6890ea5' Результат - одна строка. Затем подставляю в селекте вместо request_id некоторую константу, но с тем же условием: select 'new_request_id' as request_id from my_table where request_id = '59f911f179bea204f6890ea5' Результат - пусто. Что бы это могло быть?

Google
Vladimir
01.08.2018
07:46:12
Так работает? select 'new_request_id' as request_id2 from my_table where request_id = '59f911f179bea204f6890ea5'

fikfok
01.08.2018
07:49:05
Так работает? select 'new_request_id' as request_id2 from my_table where request_id = '59f911f179bea204f6890ea5'
Да, если присваивать другой алиас, то всё работает нормально.

Vladimir
01.08.2018
08:34:43
Кто-нибудь использует кластер в который интенсивно пишут? Раз 50-100 в минуту я имею в виду. Попробуйте стопануть одну реплику, у меня на второй прекражаються мержи и через 2-3-5 минут привет исключение о медленных мержах (притом такое поведение даже если все вьюхи убрать) Может есть какая-то настройка чтобы оставшаяся в живых реплика не прекращала мержить? Таблица причины почему мержи не идут полна такого │ MetricsFree │ Not merging into part c1d05dd4c541bdc14737a222ad2b09b1_1147_1561_155 because part c1d05dd4c541bdc14737a222ad2b09b1_1147_1560_154 is not ready yet (log entry for that part is being processed). │ Poco::Exception. Code: 1000, e.code() = 111, e.displayText() = Connection refused, e.what() = Connection refused и такого │ Metrics │ Not merging into part babccf0c7ab1c3af920fb405ca79c901_36891_36895_1 because part babccf0c7ab1c3af920fb405ca79c901_36892_36892_0 is not ready yet (log entry for that part is being processed). │ Code: 234, e.displayText() = DB::Exception: No active replica has part babccf0c7ab1c3af920fb405ca79c901_36891_36895_1 or covering part, e.what() = DB::Exception │ Потеря реплики это обычный сценарии, верно? А он поломан. Не критично?

Kirill
01.08.2018
09:16:58
Кто-нибудь использует кластер в который интенсивно пишут? Раз 50-100 в минуту я имею в виду. Попробуйте стопануть одну реплику, у меня на второй прекражаються мержи и через 2-3-5 минут привет исключение о медленных мержах (притом такое поведение даже если все вьюхи убрать) Может есть какая-то настройка чтобы оставшаяся в живых реплика не прекращала мержить? Таблица причины почему мержи не идут полна такого │ MetricsFree │ Not merging into part c1d05dd4c541bdc14737a222ad2b09b1_1147_1561_155 because part c1d05dd4c541bdc14737a222ad2b09b1_1147_1560_154 is not ready yet (log entry for that part is being processed). │ Poco::Exception. Code: 1000, e.code() = 111, e.displayText() = Connection refused, e.what() = Connection refused и такого │ Metrics │ Not merging into part babccf0c7ab1c3af920fb405ca79c901_36891_36895_1 because part babccf0c7ab1c3af920fb405ca79c901_36892_36892_0 is not ready yet (log entry for that part is being processed). │ Code: 234, e.displayText() = DB::Exception: No active replica has part babccf0c7ab1c3af920fb405ca79c901_36891_36895_1 or covering part, e.what() = DB::Exception │ Потеря реплики это обычный сценарии, верно? А он поломан. Не критично?
Пишите синхронно, чтоб данные были на обеих машинах, сейчас записи о данных в ZK есть, а на оставшейся машине их нет и взять ей неоткуда (смотрите insert_quorum).

Vladimir
01.08.2018
09:17:52
Если insert_quorum поставлю в 2 (2 реплики) то перестанет писать сразу же как я остановлю 1 реплику, верно?

Evgeny
01.08.2018
09:18:09
Подскажите, а имеет смысл вытаскивать в primary key поле eventDate если в WHERE оно фильтруется везде от начала месяца до конца? Будут ли использоваться оптимизации засечек при джоинах?

Станислав
01.08.2018
09:47:40
Господа, а где бы посмотреть принципы/пример заполнения дыр в time-series на уровне запросов? А то от всех моих вариантов начинают кровоточить глаза

Kirill
01.08.2018
09:57:16
Господа, а где бы посмотреть принципы/пример заполнения дыр в time-series на уровне запросов? А то от всех моих вариантов начинают кровоточить глаза
я обычно делаю что-то типа такого SELECT date, ... FROM ( SELECT toDate('2018-07-02') + number AS date FROM system.numbers LIMIT 7 ) ANY LEFT JOIN ( ...тут запрос, в результате которого могут быть "дыры" в датах... ) USING date

Google
Alex
01.08.2018
10:07:31
О! Спасибо! Не знал про system.numbers, извращался с range()
Я тоже :) SELECT arrayJoin(aligned).1 AS ts, arrayJoin(aligned).2 FROM ( WITH groupArray((ts, value)) AS series, toDateTime('2018-01-01 00:00:00') AS zero_time, range(4) AS range, 3600 AS step, arraySort(arrayMap(pos -> (zero_time + (step * pos), arrayFirst(t -> (t.1 = (zero_time + (step * pos))), series).2), range)) AS aligned SELECT aligned FROM timeserie GROUP BY metric )

Kirill
01.08.2018
10:09:10
А не будут проблемы при неудавшихся вставках? Да и много ресурсов на кросс-репликацию.
А с чего там сильно больше ресурсов? Там при вставке живые реплики из ZK проверяются + проверка что куски доехали, просто вставка медленнее.

Alex
01.08.2018
10:09:52
Станислав
01.08.2018
10:13:10
Среднее, это чтобы экстраполировать, а не нулями забивать?
Чтобы отдельные большие значения не так сильно влияли на график

Denis
01.08.2018
10:16:57
А с чего там сильно больше ресурсов? Там при вставке живые реплики из ZK проверяются + проверка что куски доехали, просто вставка медленнее.
А где-нибудь есть статьи о механике всего процесса? А то не везде понятно, на что можно рассчитывать и как правильно делать.

Slava
01.08.2018
10:18:47
добрый день, скажите, возможно ли в будущем использовать удаление для distributed таблиц или иметь возможность на локальных таблицах делать ALTER TABLE DELETE ON CLUSTER test WHERE ...?

Slava
01.08.2018
10:19:55
условия по которому мы будем что-то удалять

Wolf
01.08.2018
10:20:12
так вы таблицу собираетесь удалять или что ?

Slava
01.08.2018
10:20:19
например, у нас есть distributed таблица, которая размазанная на x серверов

не удалять

Wolf
01.08.2018
10:20:23
вообще не очень понимаю какие там условия могут быть

Slava
01.08.2018
10:20:29
а удалять часть данных по критерию

Wolf
01.08.2018
10:20:42
в дистрибьютед таблице нет данных же

Slava
01.08.2018
10:20:50
смотрите, например, мы неправильно залили первый месяц

да это вьюха на локальные таблицы

смысл в том, чтобы не ходить на каждый сервер а сделать операцию через on cluster

Alex
01.08.2018
10:21:22
в дистрибьютед таблице нет данных же
Автор подразумевает, что мутационный запрос транслируется на нижележащие таблицы

Wolf
01.08.2018
10:21:40
ну а зачем для этого нужна дистрибьютед , делайте онкластер на локальные

Google
Wolf
01.08.2018
10:21:49
зачем заходить при этом на каждый сервер тоже не понятно

Slava
01.08.2018
10:21:57
сейчас не поддерживается on cluster для удаления

Alex
01.08.2018
10:23:53
ON CLUSTER для ALTER DELETE должен поддерживаться

Wolf
01.08.2018
10:26:09
сейчас не поддерживается on cluster для удаления
Для альтер вроде поддерживается, по крайней мере все Альтеры я делаю он кластер

Wolf
01.08.2018
10:27:11
Ну и делете наверно мне кажется тоже

Slava
01.08.2018
10:27:49
наверное синтаксис у меня неверный, спасибо

Sergey
01.08.2018
10:28:23
Привет всем. За неделю запутался, читая чат. У нас есть кластер из 2-х машин КХ и 3-х машин ZK. Есть ReplicatedMergeTree, на которую навесили MaterializedView с движком MergeTree. Если данные попали в ReplicatedMergeTree, есть ли гарантия, что они окажутся и в MaterializedView, если все машины живы? Я понимаю, что в случае вылета КХ или ZK последствия могут быть рандомными, но если без вылетов?

Sergey
01.08.2018
10:32:47
О. Кажется, именно это мы и продолбали. Спасибо. :)

Sergey
01.08.2018
11:10:15
как-то странно, когда сделали 5 машин вместо 2, но при выходе из строя одной последствия рандомные. получается менее устойчиво, нет?
Это не 5 вместо 2. Это 2 + 3. Даже при самой крутой и стабильной архитектуре вылет любого сервера может привести порою к рандому, если случится в "удачное" схождение звёзд.

Дмитрий
01.08.2018
11:55:29
Привет всем, у меня тут на мой взгляд страшная ситуация, на 1 из шардов на репликах не совпадают данные. Смотрю логи ошибок вроде нет, может подскажите на что обратить внимание?

Yuran
01.08.2018
11:56:40
Насколько я понимаю, поскольку у ClickHouse асинхронная репликация, то при выпадании одной ноды КХ данных потеряется не слишком много (только то, что не успело доехать). А при выпадании ZK ноды вообще ничего страшного не должно происходить, потому что он использует Paxos (или какой-то другой протокол для распределенного консенсуса). На практике, конечно, это всё стоит проверить :))

Дмитрий
01.08.2018
12:01:40
Спасибо, за ответ, ноя ничего не понял)) делать то что? Как понять на какой из реплик верные данные? Как их восстановить?

Stanislav
01.08.2018
12:03:12
На той, где их больше, насколько я понимаю

Denis
01.08.2018
12:03:34
А репликация через replicated.... таблицы или детская?

Дмитрий
01.08.2018
12:03:57
Replicated

Google
Дмитрий
01.08.2018
12:04:58
Да

Denis
01.08.2018
12:06:27
А как проверяли что не совпадает? Т.е. для всяких replacing и agregating резултат select count() может зависеть от того завершился merge или нет.

Дмитрий
01.08.2018
12:07:10
sum по основным столбцам

Denis
01.08.2018
12:08:23
и заливка остановлена? реплика видит данные с задержкой, если запрос sum идет 10 сек., будут разные результаты

Дмитрий
01.08.2018
12:08:39
Ну там значительно отличается

Ничего не стопил пока

Denis
01.08.2018
12:11:32
а что показывает select from system.parts про партции этой таблицы? на обоих репликах

Дмитрий
01.08.2018
12:14:37
Denis
01.08.2018
12:17:18
а replication_queue есть запросы на репликацию? странно это все

Дмитрий
01.08.2018
12:22:20
а replication_queue есть запросы на репликацию? странно это все
Вот тут куча строк и в поле last_exception connection timeout ошибки

Andrey
01.08.2018
12:27:21
Трабла со вчерашнего вопроса про dns, спасибо! Надо обновиться

Дмитрий
01.08.2018
12:27:25
Denis
01.08.2018
12:27:48
ну значит реплика не может подключится к брату по http (9000) ?

Denis
01.08.2018
12:30:50
можно мониторить типа : 'rep_future_parts') sql="select sum(value) from (select sum(future_parts) as value from system.replicas union all select toUInt64(0) as value)" ;; 'rep_parts_to_check') sql="select sum(value) from (select sum(parts_to_check) as value from system.replicas union all select toUInt64(0) as value)" ;; 'rep_stalled') sql="select sum(value) from (select count(*) as value from system.replication_queue where num_tries > 100 union all select toUInt64(0) as value)" ;;

Дмитрий
01.08.2018
12:32:05
Ок, спасибо)

Constantine
01.08.2018
13:52:13
Здравствуйте. Подскажите пожалуйста, Если гаснет нода zk follower - то clickhouse (если он подключен именно к этой ноде) теряет один пакет и переподключается. Если гаснет нода zk leader то таблицы переходят в readonly до сообщения в логе ZooKeeper session has expired. Switching to a new session. (60 секунд до этого момента проходит). Что яч делаю не правильно. Подскажите пожалуйста.

Constantine
01.08.2018
13:58:33
Не хочется 60 секундного ридонли

Google
Wolf
01.08.2018
14:00:58
ну бывает раз в сто лет так что терпимо

Constantine
01.08.2018
14:06:44
А имеет смысл уменьшать zookeeper_session_expiration_check_period ? И чем это грозит?

Kirill
01.08.2018
15:06:16
А имеет смысл уменьшать zookeeper_session_expiration_check_period ? И чем это грозит?
Нет, Зукиперы не сильно часто падают, а минута в RO тоже не так уж и много, легко дозалить данные которые накопились.

Vladimir
01.08.2018
15:56:22
Попробовал "insert_quorum" как тут советовали. В логах каждого сервера некоторое кол-во таких сообщении валится 2018.08.01 15:46:30.776377 [ 420 ] <Error> MetricsDistributed.Distributed.DirectoryMonitor: Code: 286, e.displayText() = DB::Exception: Received from 10.1.2.57:9000. DB::Exception: Quorum for previous write has not been satisfied yet. Status: version: 1 2018.08.01 15:47:21.476415 [ 421 ] <Error> MetricsDistributed.Distributed.DirectoryMonitor: Code: 286, e.displayText() = DB::Exception: Received from 10.1.1.183:9000. DB::Exception: Quorum for previous write has not been satisfied yet. Status: version: 1 2018.08.01 15:47:41.518425 [ 5462 ] <Error> executeQuery: Code: 286, e.displayText() = DB::Exception: Another quorum insert has been already started, e.what() = DB::Exception (from 10.1.1.249:52124) (in query: INSERT INTO MetricsDistributed FORMAT TabSeparated), Stack trace: 2018.08.01 15:47:41.578393 [ 5462 ] <Error> HTTPHandler: Code: 286, e.displayText() = DB::Exception: Another quorum insert has been already started, e.what() = DB::Exception, Stack trace: И самое непоиятно что появились опять дуюликаты хотя вьюх нету В коде нашел что транзакция откатывается но откуда тогда дубликаты? else if (multi_code == ZooKeeperImpl::ZooKeeper::ZNODEEXISTS && failed_op_path == quorum_info.status_path) { transaction.rollback(); throw Exception("Another quorum insert has been already started", ErrorCodes::UNSATISFIED_QUORUM_FOR_PREVIOUS_WRITE); }

Сообщения фиг с ними, задержки сети или еще что-нибудь в растпеделенной системе пусть будут Но эти дубликаты в различной вариации меня немного измотали

Denis
01.08.2018
16:01:10
>Но эти дубликаты в различной вариации меня немного измотали я вот читаю который день про ваши дубликаты, и вот чего не могу понять, вы же сами пишете по нескольку раз, при ошибке, поэтому дубликаты, правильно?

Vladimir
01.08.2018
16:02:35
Да, а как иначе если батч не прошел? Replaced движок это борьба с последствиями

Одна причина это вьюхи, от них со скрипом отказались и выкручиваемся без них

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