- Типы частей (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
txn_version.txt, delete-on-destroy.txt и invalidated_system_columns.txt — по-прежнему записываются отдельно, поскольку они могут быть созданы или перезаписаны после записи самой части. Это значительно сокращает количество файловых операций, что особенно важно для удалённых хранилищ, таких как S3, где каждый запрос связан с задержкой и дополнительными затратами.
Преимущества хранилилища 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:
В open-source ClickHouse
part_storage_type доступен в system.parts начиная с версии 26.9. В версии 26.8 и более ранних версиях исключите part_storage_type из запроса и выполняйте группировку и сортировку только по part_type.