Описание
Содержит по одной строке на каждую запись, которая в данный момент хранится в кэше десериализованных столбцов. Кэш хранит в памяти ранее прочитанные и десериализованные столбцы частей данныхMergeTree, поэтому при повторном чтении того же диапазона строк не приходится заново тратить ресурсы на декомпрессию и десериализацию.
Каждая запись соответствует непрерывному диапазону гранул [row_begin, row_end) одного столбца одной части данных в пределах фиксированного страйпа части размером около 65536 строк. Чтение из кэша выполняется погранульно, а страйпы одинаковы для всех операций чтения части, поэтому записи не зависят от того, как запрос разбивает часть на диапазоны засечек: если чтение затрагивает лишь некоторые гранулы страйпа, кэшируются только они, а смежные диапазоны, записанные разными операциями чтения, объединяются.
Кэш идентифицирует записи по UUID таблицы, поэтому он работает только для таблиц в базах данных, которые назначают UUID, например Atomic, Replicated и Shared (движок баз данных по умолчанию в ClickHouse Cloud). Таблицы в устаревших базах данных Ordinary не имеют UUID и без каких-либо предупреждений исключаются из кэша. В кэшировании участвуют только части Wide; компактные части также исключаются без предупреждений.
Кэш управляется настройками сервера columns_cache_size (по умолчанию — доля columns_cache_size_to_ram_ratio от памяти, доступной серверу) и columns_cache_size_ratio, а также настройками уровня запроса use_columns_cache, enable_reads_from_columns_cache, enable_writes_to_columns_cache, columns_cache_max_estimated_bytes_to_write_to_cache и columns_cache_max_bytes_to_write_to_cache. Его можно сбросить вручную с помощью SYSTEM DROP COLUMNS CACHE.
Строки фильтруются по правам доступа: запись видна только пользователю, которому разрешено видеть и её таблицу, и её столбец, то есть обладающему правом SHOW TABLES на таблицу и SHOW COLUMNS на столбец. Привилегия SHOW COLUMNS на *.* не перекрывает отзыв прав на отдельную таблицу или столбец, поскольку эта таблица раскрывает не только схему, но и эксплуатационные данные (имена частей, диапазоны строк и размеры кэшированных данных). У записей несуществующей таблицы нет имени, по которому можно выполнить проверку, поэтому они видны только пользователю, обладающему правом SHOW COLUMNS глобально.
Столбцы
database(String) — Имя базы данных, содержащей таблицу, к которой относится часть.table(String) — Имя таблицы.table_uuid(UUID) — UUID таблицы. Не меняется при переименовании.part(String) — Имя части данных.column(String) — Имя столбца.row_begin(UInt64) — Индекс начальной строки кэшированного диапазона (включительно).row_end(UInt64) — Индекс конечной строки кэшированного диапазона (не включительно).rows(UInt64) — Количество строк в кэшированном диапазоне (row_end - row_begin).bytes(UInt64) — Объём памяти в байтах, занимаемой записью: выделенный размер кэшированного столбца плюс небольшие накладные расходы на каждую запись. Именно по этой величине ограничивается размер кэша, поэтому сумма значений этого столбца по всем записям не превышаетcolumns_cache_size. Значение может превышать логический размер строк, поскольку столбец сохраняет ёмкость, выделенную при его создании.
Примеры
Общий объём памяти, занимаемый кэшированными столбцами, в разбивке по таблицам:См. также
- SYSTEM DROP COLUMNS CACHE — оператор, очищающий все записи в кэше столбцов.