Последний урок раздела соберёт всё пройденное в один чек-лист. Почти все проблемы с ClickHouse, о которых пишут в чатах и на форумах, это не баги базы, а одни и те же десять ошибок. Каждую мы уже разбирали по отдельности. Здесь они вместе, с симптомом и лечением, чтобы ты узнавал их с первого взгляда.
Ошибки загрузки
1. Вставка по одной строке. Симптом: растёт число частей, вставки замедляются, потом TOO_MANY_PARTS. Лечение: пачки от тысячи строк, лучше десятки тысяч, не чаще раза в секунду; для множества мелких клиентов асинхронная вставка. Урок 11.
2. Мелкие партиции. Симптом тот же: тысячи частей, которые не сливаются, ошибка о слишком многих партициях на вставку. Обычно это PARTITION BY по дню при малом потоке, по часу или, хуже того, по пользователю. Лечение: месяц по умолчанию, день только для десятков гигабайт в сутки. Урок 9.
3. Частые UPDATE и DELETE. Симптом: очередь мутаций в system.mutations растёт, диск занят переписыванием частей. Лечение: менять модель данных, а не строки. Последнее состояние хранить в ReplacingMergeTree, отмены в CollapsingMergeTree, старые данные удалять через TTL и DROP PARTITION. Урок 10.
Ошибки схемы
4. ORDER BY не под запросы. Симптом: запрос с фильтром читает всю таблицу. Частые варианты: ключ ORDER BY id, когда фильтруют по времени и зоне; время первым в ключе, когда почти всегда фильтруют по зоне; ORDER BY tuple(), то есть никакой сортировки. Лечение: ключ из колонок частых фильтров, от малого числа значений к большому, время в конце. Урок 8.
5. Nullable везде. Перенесли схему из PostgreSQL как есть, и каждая колонка стала Nullable. Симптом: лишняя маска на каждую колонку, запросы медленнее, а NULL нигде по смыслу не нужен. Лечение: Nullable только там, где пустота что-то значит.
6. String для всего. Даты строками, числа строками, статусы строками. Симптом: сравнение дат работает как сравнение текста, сжатие хуже, индекс по времени не помогает. Лечение: DateTime для времени, целые нужного размера, LowCardinality или Enum для статусов. Урок 6.
7. Ожидание уникальности от первичного ключа. Симптом: дубли в отчётах после повторной загрузки. Первичный ключ ClickHouse ничего не запрещает. Лечение: ReplacingMergeTree и FINAL или argMax в запросах, а лучше загрузка без повторов.
урок из курса
Урок из курса «ClickHouse и аналитические базы». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.