
Andrey
30.06.2017
00:33:11
А в чем вопрос то? Механизм бекапа достаточно однозначный.

Maksim
30.06.2017
00:39:49

Andrey
30.06.2017
00:45:42
Всем привет. В логах появилась странная ошибка

Google


Andrey
30.06.2017
06:31:32
2017.06.29 09:43:36.158877 [ 19 ] <Error> ServerErrorHandler: Code: 101, e.displayText() = DB::NetException: Unexpected packet from client, e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x2969826]
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x1f) [0x108f49f]
2. clickhouse-server(DB::TCPHandler::receiveHello()+0xc8) [0x10a34f8]
3. clickhouse-server(DB::TCPHandler::runImpl()+0x1cc) [0x10a721c]
4. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x10a827b]
5. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x3274d5f]
6. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x13b) [0x327b19b]
7. clickhouse-server(Poco::PooledThread::run()+0xb7) [0x34e6e07]
8. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x34b2e45]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7efc71ac56ba]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7efc710e682d]
повторятеся достаточно часто


Kirill
30.06.2017
06:37:04
дело может быть и не в КХ, а в клиенте; как и через что пишете ?

Andrey
30.06.2017
06:37:46
Напрямую в шарды, http запросами

Kirill
30.06.2017
06:55:47
самому интересно стало, полез исходники почитать почемупри http запросе TCPHandler


Andrey
30.06.2017
07:01:43
Сейчас сниму дамп, посмотрим что там
А, кажется я начинаю понимать
2017.06.29 18:16:04.011259 [ 2 ] <Error> hits_d.Distributed.DirectoryMonitor: Code: 210, e.displayText() = DB::NetException: I/O error: Broken pipe: while reading from socket (10.138.208.224:9000), e.what() = DB::NetException, Stack trace:
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x2969826]
1. clickhouse-server(DB::WriteBufferFromPocoSocket::nextImpl()+0x5ad) [0x297de7d]
2. clickhouse-server(DB::Connection::sendData(DB::Block const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0xe5) [0x2b6f365]
3. clickhouse-server(DB::Connection::sendQuery(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long, DB:
:Settings const*, DB::ClientInfo const*, bool)+0xc35) [0x2b709b5]
4. clickhouse-server(DB::RemoteBlockOutputStream::writePrefix()+0x6a) [0x2c25eda]
5. clickhouse-server(DB::StorageDistributedDirectoryMonitor::processFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x6f9) [0x2aa4cf9]
6. clickhouse-server(DB::StorageDistributedDirectoryMonitor::findFiles()+0x14c) [0x2aa680c]
7. clickhouse-server(DB::StorageDistributedDirectoryMonitor::run()+0xc5) [0x2aa6d05]
8. clickhouse-server() [0x36744ef]
9. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7f3c3ac906ba]
10. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f3c3a2b182d]
на одном из серверов
это ж ведь все тот же broken pipe?


Vladimir
30.06.2017
08:13:42
Всем привет, у нас 100 таблиц, и в каждую таблицу происходит по 50-100 записей в секунду. Как правильно настроить буферизацию на клиентах так, чтобы можно было облегчить мержи нод в кластере? Я как понимаю, одновременная вставка в несколько таблиц является плохой реализацией тоже?

Google

Kirill
30.06.2017
08:21:15

Vladimir
30.06.2017
08:25:37

Kirill
30.06.2017
08:42:08
сделать 1 таблицу с индексом по user_id

Vladimir
30.06.2017
08:45:21
А в этой таблице тогда у нас будут сотни миллиардов данных (клики) - и мы разве сможем по ним делать быструю агрегацию или быструю выборку по диапазону?

Kirill
30.06.2017
08:47:16
индекс по id клиента +- будет отсекать из выборки чужие данные, если уперлись в 1 машину поставте 2-ю и делайте запросы через distributed table
сотни миллиардов кликов ? )

Vladimir
30.06.2017
08:51:34
Да, в общей сложности сотни.
В яндексе меньше разве?)

Kirill
30.06.2017
08:55:29
как я понимаю это сырая статистика (хотя и несколько оптимистичная цифра по кликам) отсюда есть рекомендация не отдавать по ней отчеты пользователям, а как минимум обработать ее и выкинуть дубликаты и попутно сагрегировав ее до приемлимых значений (минуты/часы/дни)

Vladimir
30.06.2017
08:56:44
Агрегировать на стороне базы можно сразу с помощью материализирвоанных вьюх?

Kirill
30.06.2017
08:58:22
есть https://clickhouse.yandex/docs/en/single/index.html#document-table_engines/summingmergetree но клики и показы так агрегировать нельзя

Bulat
30.06.2017
09:00:13
а почему клики и показы так аггрегирвоать нельзя?

Kirill
30.06.2017
09:00:35
дубликаты и скликивание

Vladimir
30.06.2017
09:00:51
> но клики и показы так агрегировать нельзя
А как можно? Только на уровне архитектуры самого приложения, агрерировать все в отдельные таблицы кодом?

Kirill
30.06.2017
09:01:25

Vladimir
30.06.2017
09:03:53
А с помощью http://clickhouse-docs.readthedocs.io/ru/latest/table_engines/aggregatingmergetree.html - мы можем группировать большие данные? Или тоже вариант плох?
Например такой вариант:
CREATE MATERIALIZED VIEW test.slice_id
ENGINE = AggregatingMergeTree(StartDate, (UserID, StartDate, SliceID), 8192)
AS SELECT
UserID,
StartDate,
SliceID,
countState() Clicks,
sumState(Host) Hosts,
FROM test.clicks
GROUP BY UserID, StartDate, SliceID;
и батчить потом по 10к в test.clicks ? Будет вставка и мерж быстрыми?

Roman
30.06.2017
09:07:56
при сотнях миллиардов лучше батчить по 100-200к

Andrey
30.06.2017
09:17:08
Столкнулся с проблемой при подключении внешних словарей для CH (postgresql).

Google

Andrey
30.06.2017
09:17:39
При загрузке словаря создаётся лог в tmp. И CH на него держит дескриптор
При чём лог постоянно увеличивается. при каждом обновлении
Естественно что удаление файла с файловой системы не поможет отчистить место
Только ребут CH

Bulat
30.06.2017
09:18:56

Kirill
30.06.2017
09:23:20
можно и так, но в данном случае КХ используется как хранилище сырой статистики и строить с нее отчеты и раздавать деньги за рекламу без пост обработки чуть более чем черевато


Alex
30.06.2017
09:24:31
Изменения с версии 1.1.54236 до 1.1.54244
Новые возможности:
* Распределённые DDL (например, CREATE TABLE ON CLUSTER)
* Реплицируемый запрос ALTER TABLE CLEAR COLUMN IN PARTITION
* Движок таблиц Dictionary (доступ к данным словаря в виде таблицы)
* Движок баз данных Dictionary (в такой базе автоматически доступны Dictionary-таблицы для всех подключённых внешних словарей)
* Возможность проверки необходимости обновления словаря путём отправки запроса в источник
* Qualified имена столбцов
* Квотирование идентификаторов двойными кавычками
* Сессии в HTTP интерфейсе
* Запрос OPTIMIZE Replicated таблицы теперь можно выполнять не только на лидере
Обратно несовместимые изменения:
* Убрана команда SET GLOBAL
Мелочи:
* Теперь после получения сигнала в лог печатается полный стектрейс
* Ослаблена проверка на количество повреждённых/лишних кусков при старте (было слишком много ложных срабатываний)
Исправления:
* Исправлено залипание плохого соединения при вставке в Distributed таблицу
* GLOBAL IN теперь работает при запросе из таблицы Merge, смотрящей в Distributed
* Теперь правильно определяется количество ядер на виртуалках Google Compute Engine
* Исправления в работе executable источника кэшируемых внешних словарей
* Исправлены сравнения строк, содержащих нулевые символы
* Исправлено сравнение полей первичного ключа типа Float32 с константами
* Раньше неправильная оценка размера поля могла приводить к слишком большим аллокациям
* Исправлено падение при запросе Nullable столбца, добавленного в таблицу ALTER-ом
* Исправлено падение при сортировке по Nullable столбцу, если количество строк меньше LIMIT
* Исправлен ORDER BY подзапроса, состоящего только из константных значений
* Раньше Replicated таблица могла остаться в невалидном состоянии после неудавшегося DROP TABLE
* Алиасы для скалярных подзапросов с пустым результатом теперь не теряются
* Теперь запрос, в котором использовалась компиляция, не завершается ошибкой, если .so файл повреждается


Fike
30.06.2017
09:30:13

Maksim
30.06.2017
09:30:35
согласен
а что если кто-то сделал миграцию кривую и она поломала данные

Fike
30.06.2017
09:32:13
от этого никто не застрахован. нужна система бэкапов и восстановления )
ну и стейджинг-окружение желательно

Maksim
30.06.2017
09:33:16
оно имеется

KIrill
30.06.2017
09:43:47
Всем привет. Братцы, проблему с DIstributed не пофиксили еще? 14-го июня Alex писал: "Фикс бага со вставкой в Distributed таблицу в мастере. Постараемся на этой неделе сделать релиз". У меня ровно такая проблемка существует ...
И шибко не хочется выносить distributed логику на уровень приложения ...

Kirill
30.06.2017
09:45:44
А может кто нибудь подсказать красивый способ как взять из массива строк только подмассив из заданных индексов?
т.е. сделать следующий запрос оптимальней, без такого жуткого оверхеда:
SELECT
[2, 3] AS given_indices,
['str1', 'str2', 'str3'] AS original_array,
arrayFilter((x, i) -> has(given_indices, i), original_array, arrayEnumerate(original_array))
┌─given_indices─┬─original_array─────────┬─result──────────┐
│ [2,3] │ ['str1','str2','str3'] │ ['str2','str3'] │
└────────┴────────────────┴──────────────┘

Kirill
30.06.2017
09:45:53
чуть выше
Изменения с версии 1.1.54236 до 1.1.54244
* Исправлено залипание плохого соединения при вставке в Distributed таблицу

Georg
30.06.2017
09:46:28
вот я и пытаюсь узнать про эту систему
Максим, попробуйте ReplicatedMergeTree + Zookeeper хотя бы на двух серверах, и, для безопасности, отдельные аккаунты на чтение/запись и ограничение default аккаунта по ip внутри кластера. Ну и тестировать все миграции на небольших таблицах с такими же названиями в другой базе.

Google

Alexander
30.06.2017
09:51:01

Pika
30.06.2017
09:55:33
Почему словари поддерживают индексацию только по Int64?

Alex
30.06.2017
10:08:49
В testing-ветку планируем выкладывать релизы, которые прошли автотесты, но ещё не выложены у нас на продакшене.

Nikolai
30.06.2017
10:13:30

Tima
30.06.2017
10:20:16

Alex
30.06.2017
10:29:00
Можете проследить по появлениям тега -stable на гитхабе.

Mike
30.06.2017
11:16:06
Коллеги, привет :) У кого-то получилось без танцев с бубном прикрутить геобазу Maxmind?
Какой вообще прямой путь?
В поиске по чатику не просто танцы, а целые балеты в трёх частях :(

Anton
30.06.2017
11:23:26
Maxmind актуально очень, пока вижу только содаздавать regions_hierarchy.txt из MaxMind

Pika
30.06.2017
11:55:28

Nikolai
30.06.2017
11:59:43

Pika
30.06.2017
12:01:46

Nikolai
30.06.2017
12:02:47
Под UUID оптимизации нет

Pika
30.06.2017
12:06:53
@kochetovnicolai в документации к dictGetT написано, что id должен быть обязательно Int64. Как тогда использовать словари? %)

papa
30.06.2017
12:08:55
либо UInt64, либо тупл чего угодно, в том числе из одного эелмента.

Nikolai
30.06.2017
12:09:15
Int64 или tuple
пример из документации: dictGetString('dict_name', 'attr_name', tuple('field1', 123))

KIrill
30.06.2017
12:10:50
Привет. @ztlpn, спасибо. Поставил и попробовал создать Distributed таблицу на отдельном сервера (раньше она была на одном из шардов), И встретил такую проблему
CREATE TABLE IF NOT EXISTS logevents AS event ENGINE = Distributed(event_cluster, default, event, rand())
Received exception from server:
Code: 60. DB::Exception: Received from localhost:9000, ::1. DB::Exception: Table default.event doesn't exist..
event_cluster содержит 4 другие хоста где раполагаются два шарда и две реплики. Сервер с Distributed имеет в конфиге их адреса и включен в ZooKeeper. Таблица syste,clusters показывает эти 4 сервера.
Но при попытке создать Distributed таблицу на 5-м сервере получаю сообщение (см выше).
Уже теряюсь куда смотреть ... :(

Pika
30.06.2017
12:11:42
@kochetovnicolai @orantius Спасибо.

Google

KIrill
30.06.2017
12:16:24
Боюсь просто все 4 сервера на testing сразу перевести. Хотел на отдельном попробовать новую сборку ...


Alex
30.06.2017
12:23:43
ребзя, беспричинно упал клик, в логах есть вот такое:
2017.06.30 01:00:15.383230 [ 246 ] <Warning> stat.impression_07_03 (StorageReplicatedMergeTree): Oops, a watch has leaked
2017.06.30 01:00:15.865557 [ 250 ] <Error> BaseDaemon: (from thread 249) Terminate called without an active exception
2017.06.30 01:00:15.865581 [ 250 ] <Error> BaseDaemon: ########################################
2017.06.30 01:00:15.865600 [ 250 ] <Error> BaseDaemon: (from thread 249) Received signal Aborted (6).
2017.06.30 01:00:15.894726 [ 250 ] <Error> BaseDaemon: 1. /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x38) [0x7ff9d7eb2428]
2017.06.30 01:00:15.894762 [ 250 ] <Error> BaseDaemon: 2. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0xa5) [0x34b2e45]
2017.06.30 01:00:15.894774 [ 250 ] <Error> BaseDaemon: 3. /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7ff9d89636ba]
2017.06.30 01:00:15.894785 [ 250 ] <Error> BaseDaemon: 4. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7ff9d7f843dd]
кто знает с чем может быть связанно?


KIrill
30.06.2017
13:33:54

Alexander
30.06.2017
14:01:34


Fike
30.06.2017
14:03:31

Alexander
30.06.2017
14:04:23
Ещё вопрос: тут выше писали, что типа не пишите в несколько таблиц одновременно - это как-то напрягло. Какие с этими могут быть особенные проблемы?

Alex
30.06.2017
14:05:25
Верно, для примеров использования можете посмотреть тест: https://github.com/yandex/ClickHouse/blob/master/dbms/tests/queries/0_stateless/00463_sessions_in_http_interface.sh

Tima
30.06.2017
14:12:47
Сейчас переделываю так, чтобы писать в один поток, кусками побольше

Alexander
30.06.2017
14:17:19

Alex
30.06.2017
14:20:30
привет, есть запрос
SELECT
toDateTime(intDiv(toUInt32(ts), 60 * 60 * 6) * 60 * 60 * 6) AS time,
sum(_count) AS _count
FROM event
GROUP BY time
ORDER BY time
возвращает результат
┌────────────────time─┬──_count─┐
│ 2017-06-18 03:00:00 │ 10252 │
│ 2017-06-18 09:00:00 │ 286220 │
│ 2017-06-18 15:00:00 │ 476354 │
│ 2017-06-18 21:00:00 │ 426987 │
│ 2017-06-19 03:00:00 │ 1270717 │
почему время начинаеться с 3 часов а не с 0??