> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Содержит по одной строке для каждой записи, находящейся в данный момент в кэше десериализованных столбцов. Кэш хранит в памяти ранее прочитанные и десериализованные столбцы частей данных `MergeTree`, поэтому при повторном чтении того же диапазона строк не нужно снова тратить ресурсы на декомпрессию и десериализацию.

# system.columns_cache

<h2 id="description">
  Описание
</h2>

Содержит по одной строке на каждую запись, которая в данный момент хранится в кэше десериализованных столбцов. Кэш хранит в памяти ранее прочитанные и десериализованные столбцы частей данных `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`](/docs/ru/reference/statements/system).

Строки фильтруются по правам доступа: запись видна только пользователю, которому разрешено видеть и её таблицу, и её столбец, то есть обладающему правом `SHOW TABLES` на таблицу и `SHOW COLUMNS` на столбец. Привилегия `SHOW COLUMNS` на `*.*` не перекрывает отзыв прав на отдельную таблицу или столбец, поскольку эта таблица раскрывает не только схему, но и эксплуатационные данные (имена частей, диапазоны строк и размеры кэшированных данных). У записей несуществующей таблицы нет имени, по которому можно выполнить проверку, поэтому они видны только пользователю, обладающему правом `SHOW COLUMNS` глобально.

<h2 id="columns">
  Столбцы
</h2>

* `database` ([String](/docs/ru/reference/data-types/string)) — Имя базы данных, содержащей таблицу, к которой относится часть.
* `table` ([String](/docs/ru/reference/data-types/string)) — Имя таблицы.
* `table_uuid` ([UUID](/docs/ru/reference/data-types/uuid)) — UUID таблицы. Не меняется при переименовании.
* `part` ([String](/docs/ru/reference/data-types/string)) — Имя части данных.
* `column` ([String](/docs/ru/reference/data-types/string)) — Имя столбца.
* `row_begin` ([UInt64](/docs/ru/reference/data-types/int-uint)) — Индекс начальной строки кэшированного диапазона (включительно).
* `row_end` ([UInt64](/docs/ru/reference/data-types/int-uint)) — Индекс конечной строки кэшированного диапазона (не включительно).
* `rows` ([UInt64](/docs/ru/reference/data-types/int-uint)) — Количество строк в кэшированном диапазоне (`row_end - row_begin`).
* `bytes` ([UInt64](/docs/ru/reference/data-types/int-uint)) — Объём памяти в байтах, занимаемой записью: выделенный размер кэшированного столбца плюс небольшие накладные расходы на каждую запись. Именно по этой величине ограничивается размер кэша, поэтому сумма значений этого столбца по всем записям не превышает `columns_cache_size`. Значение может превышать логический размер строк, поскольку столбец сохраняет ёмкость, выделенную при его создании.

<h2 id="examples">
  Примеры
</h2>

Общий объём памяти, занимаемый кэшированными столбцами, в разбивке по таблицам:

```sql theme={null}
SELECT
    database,
    table,
    formatReadableSize(sum(bytes)) AS size,
    sum(rows) AS rows,
    count() AS entries
FROM system.columns_cache
GROUP BY database, table
ORDER BY sum(bytes) DESC
```

Самые крупные отдельные записи в кэше:

```sql theme={null}
SELECT database, table, part, column, row_begin, row_end, rows, formatReadableSize(bytes) AS size
FROM system.columns_cache
ORDER BY bytes DESC
LIMIT 10
```

<h2 id="see-also">
  См. также
</h2>

* [SYSTEM DROP COLUMNS CACHE](/docs/ru/reference/statements/system) — оператор, очищающий все записи в кэше столбцов.
