- Типы частей (Wide и Compact): как хранятся данные в столбцах внутри части
- Форматы хранения (Full и Packed): как файлы части хранятся на диске
Типы частей: Wide vs Compact
Когда используется каждый тип
min_bytes_for_wide_part: Минимальный размер части в байтах для использования формата Widemin_rows_for_wide_part: Минимальное количество строк в части для использования формата Wide
Compact; в противном случае используется формат Wide.
Особенности производительности
- Более высокая производительность ингестии
- Оптимальны, когда запросам нужны все столбцы
- Более эффективны для небольших частей
- Более эффективны для запросов, выбирающих только часть столбцов
- Лучше подходят для больших наборов данных с выборочным доступом к столбцам
min_bytes_for_wide_part=0.
Это может быть полезно в следующих сценариях:
- Если у вас есть таблицы с большим количеством столбцов (например, более 600) и вы выполняете крупные вставки, установка этого значения в 0 может повысить производительность
- Для оптимизации использования памяти системными таблицами, такими как
system.metric_logиsystem.text_log, которые потребляют слишком много памяти во время слияний - При работе с таблицами с большим объёмом вставок, когда нужно оптимизировать хранилище и поведение слияния
- Если вам нужно предсказуемое поведение формата частей и вы хотите избежать дополнительных издержек из-за переходов между форматами в зависимости от порогов размера
Ограничения
system.parts_columns для компактных частей выводится 0 в полях column_data_compressed_bytes и column_data_uncompressed_bytes. Подробнее см. в разделе «Найти количество и размеры широких или компактных частей».
Форматы хранения: Full и Packed
Полное хранилилилище
Хранилище Packed
- Меньше вызовов API S3/Объектного хранилища
- Меньшая нагрузка на метаданные в службе координации
- Более низкие затраты на хранилилилище (полное хранилилилище может быть значительно дороже)
- Более высокая производительность для небольших частей в удалённом хранилилище
Когда используется хранилилище Packed
- Объём несжатых данных <
min_bytes_for_full_part_storage - Число строк <
min_rows_for_full_part_storage - Уровень слияния <
min_level_for_full_part_storage
0, поэтому части используют полное хранилилилище, если вы не увеличите одну из них.
Совместимость с понижением версииКак только часть записана в хранилилище Packed, версии ClickHouse, не поддерживающие хранилилище Packed, больше не смогут её читать. Поэтому включение хранилилилища Packed не позволяет понизить версию до такой версии, и включать его следует только тогда, когда вы уверены, что откат не потребуется.
min_level_for_full_part_storage можно использовать для оптимизации производительности и затрат на объектном хранилище, особенно для таблиц с непрерывной ингестией данных.
Эта настройка доступна начиная с ClickHouse версии 25.10 и работает совместно с min_level_for_wide_part, обеспечивая полный контроль над стратегиями хранения частей.
Изменение её значения по умолчанию (0) может быть оправдано в следующих случаях:
- Если в таблицы регулярно поступают данные, исходные части быстро сливаются, поэтому хранить их изначально в полном формате неэффективно
- Этот параметр позволяет избежать дорогостоящих S3 PUT-запросов при вставках. Например, один анализ показал, что вставки, создающие полные части, в среднем требовали 31,3 PUT-запроса на одну вставку, тогда как вставки, создающие только части Packed, — всего 2,22 PUT-запроса на одну вставку
- Операции вставки выполняются быстрее, особенно для таблиц с большим количеством столбцов, поскольку хранилилище Packed записывает все данные в один файл, а не создаёт отдельные файлы для каждого столбца.
min_level_for_full_part_storage = 2 для развертываний с объектным хранилищем.
Это гарантирует, что:
- Части уровня 0 (исходные вставки) используют хранилилище Packed
- Части уровня 1 также продолжают использовать хранилилище Packed
- Только части уровня 2 и выше используют полный формат хранения
Комбинирование типов частей и форматов хранения
Запрос информации о частях
system.parts: