Skip to main content
이 설정은 system.settings에서 확인할 수 있으며, 소스 코드를 기반으로 자동 생성됩니다.

columns_cache_max_bytes_to_write_to_cache

단일 쿼리가 컬럼 캐시에 기록하는 바이트 수에 대한 쿼리별 소프트 임계값입니다. 쿼리 실행 중 기록된 바이트 수를 집계하며, 카운터가 이 값에 도달하면 해당 쿼리가 끝날 때까지 이후의 캐시 기록을 건너뜁니다. 이 값은 엄격한 상한이 아닌 권고성 임계값입니다. 리더는 읽어 들인 그래뉼의 엔트리를 누적했다가 한 배치로 캐시에 기록하며, 임계값을 넘기는 배치는 카운터에 반영되기 전에 전부 저장됩니다. 따라서 실제 기록량은 하나의 리더가 두 번의 기록 사이에 누적하는 엔트리(읽는 컬럼마다 약 65536개 행으로 구성된 stripe당 엔트리 1개)만큼 이 값을 초과할 수 있으며, 여러 리더가 동시에 실행되면 리더마다 그만큼씩 더 초과할 수 있습니다. 이 설정은 캐시 사용량을 정확히 제한하기 위한 것이 아니라, 대규모 스캔 하나가 유용한 데이터를 캐시에서 밀어내지 않도록 하기 위한 것입니다. 값이 0이면 컬럼 캐시의 현재 크기 제한의 절반을 사용합니다. 이 제한은 구성된 columns_cache_size 값이며, 메모리 압력으로 캐시가 축소된 동안에는 이보다 작아집니다(ColumnsCacheSizeLimit 메트릭 참조).

columns_cache_max_estimated_bytes_to_write_to_cache

쿼리가 MergeTree 파트에서 읽을 데이터의 예상 크기가 이 값을 초과하면 해당 쿼리 전체에서 컬럼 캐시(columns cache) 쓰기가 금지됩니다. 예상 크기는 캐시 사용량을 산정하는 단위인 비압축 바이트를 기준으로 하며, 쿼리가 읽는 컬럼(PREWHERE, 뮤테이션 및 패치 파트 컬럼 포함)의 크기를 선택된 마크 범위에 비례하도록 환산하여 구합니다. 이 전체 크기는 쿼리가 데이터를 읽기 전에 미리 해당 쿼리에 할당됩니다. 이를 통해 대규모 스캔 하나가 캐시의 유용한 데이터를 밀어내거나, 캐시에 남아 있을 수 없는 데이터를 캐시로 복사하는 것을 방지합니다. 값이 0이면 컬럼 캐시의 현재 크기 한도의 절반을 사용합니다. 서버 메모리에 여유가 있을 때 이 한도는 구성된 columns_cache_size와 같지만, 메모리 압력 상황에서는 캐시가 줄어들며(ColumnsCacheSizeLimit 메트릭 참조) 기본 허용량도 함께 줄어듭니다. 기본 columns_cache_size_ratio를 사용하면 한도의 절반이 캐시의 수습(probationary) 세그먼트 크기와 같으므로, 게이트를 통과한 쿼리의 데이터는 한 번에 모두 캐시될 수 있습니다. 실행 중에 마크 범위를 제외하는 읽기에는 이 게이트가 적용되지 않습니다. use_indexes_refiner_in_read_pools가 활성화된 경우가 이에 해당합니다. 이러한 읽기가 선택된 마크 중 실제로 얼마나 접근하는지는 각 작업이 분할될 때에야 결정되므로, 위의 예상치는 쿼리가 실제로 읽지 않는 마크까지 포함하는 상한값이 됩니다. 이러한 읽기에서는 대신 columns_cache_max_bytes_to_write_to_cache가 쓰기량을 제한합니다.
마지막 수정일 2026년 10월 14일