설명
역직렬화된 컬럼 캐시에 현재 저장된 엔트리마다 하나의 행을 포함합니다. 이 캐시는MergeTree 데이터 파트에서 이전에 읽고 역직렬화한 컬럼을 메모리에 보관하므로, 같은 행 범위를 다시 읽을 때 압축 해제와 역직렬화 비용이 또다시 발생하지 않습니다.
각 엔트리는 단일 데이터 파트의 단일 컬럼에서 연속된 그래뉼 범위 [row_begin, row_end)에 해당하며, 이 범위는 약 65536개 행으로 구성된 파트의 고정 스트라이프(stripe) 안에 속합니다. 읽기는 캐시에서 그래뉼 단위로 처리되고 스트라이프는 파트를 읽을 때마다 동일하므로, 엔트리는 쿼리가 파트를 마크 범위로 나누는 방식과 무관합니다. 스트라이프의 일부 그래뉼만 읽으면 해당 그래뉼만 캐시되며, 서로 다른 읽기 작업에서 기록된 인접 범위는 머지됩니다.
캐시는 테이블 UUID로 엔트리를 식별하므로, Atomic, Replicated, Shared(ClickHouse Cloud의 기본 데이터베이스 엔진)처럼 UUID를 할당하는 데이터베이스의 테이블에서만 동작합니다. 레거시 Ordinary 데이터베이스의 테이블은 UUID가 없으므로 별도 알림 없이 캐시에서 제외됩니다. 또한 와이드 파트(wide part)만 캐시 대상이며, 컴팩트 파트(compact part)는 별도 알림 없이 제외됩니다.
캐시는 서버 설정 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 권한을 부여하더라도 개별 테이블이나 컬럼에 대한 권한 회수(revoke)는 우회되지 않습니다. 더 이상 존재하지 않는 테이블의 엔트리는 확인할 이름이 없으므로, 전역 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 — 컬럼 캐시의 모든 엔트리를 삭제하는 SQL 문입니다.