시스템 테이블 개요
- 서버 상태, 프로세스 및 환경
- 서버의 내부 프로세스
- ClickHouse 바이너리를 빌드할 때 사용된 옵션
system데이터베이스에 있습니다.- 데이터를 읽기만 할 수 있습니다.
- 삭제하거나 변경할 수는 없지만 분리할 수 있습니다.
/etc/clickhouse-server/config.d/ 아래에 테이블과 같은 이름의 구성 파일을 만들거나 /etc/clickhouse-server/config.xml에서 해당 요소를 설정하여 사용자 지정할 수 있습니다. 사용자 지정할 수 있는 요소는 다음과 같습니다.
database: 시스템 로그 테이블이 속한 데이터베이스입니다. 이 옵션은 현재 Deprecated 상태입니다. 모든 시스템 로그 테이블은system데이터베이스 아래에 있습니다.table: 데이터를 삽입할 테이블입니다.partition_by: PARTITION BY 표현식을 지정합니다.ttl: 테이블 TTL 표현식을 지정합니다.flush_interval_milliseconds: 데이터를 디스크에 플러시하는 간격입니다.engine: 매개변수와 함께 전체 엔진 표현식(ENGINE =로 시작)을 지정합니다. 이 옵션은partition_by및ttl과 충돌합니다. 함께 설정하면 서버가 예외를 발생시키고 종료됩니다.
MergeTree 엔진 테이블의 파티셔닝 기능을 사용할 수도 있습니다.
시스템 메트릭의 소스
CAP_NET_ADMINcapability- procfs (Linux에서만)
CAP_NET_ADMIN capability가 없으면 ProcfsMetricsProvider로 대체하려고 시도합니다. ProcfsMetricsProvider를 사용하면 쿼리별 시스템 메트릭(CPU 및 I/O)을 수집할 수 있습니다.
시스템에서 procfs가 지원되고 활성화되어 있으면 ClickHouse 서버는 다음 메트릭을 수집합니다.
OSCPUVirtualTimeMicrosecondsOSCPUWaitMicrosecondsOSIOWaitMicrosecondsOSReadCharsOSWriteCharsOSReadBytesOSWriteBytes
OSIOWaitMicroseconds는 Linux 커널 5.14.x부터 기본적으로 비활성화되어 있습니다.
sudo sysctl kernel.task_delayacct=1을 사용하거나 /etc/sysctl.d/에 kernel.task_delayacct = 1이 포함된 .conf 파일을 만들어 활성화할 수 있습니다.ClickHouse Cloud의 시스템 테이블
parts는 어느 노드에서 쿼리하든 일관되어야 합니다:
_log접미사가 있는 시스템 테이블- 메트릭을 노출하는 시스템 테이블(예:
metrics,asynchronous_metrics,events) - 진행 중인 프로세스를 노출하는 시스템 테이블(예:
processes,merges)
system.query_log 테이블을 살펴보겠습니다:
여러 버전에 걸쳐 쿼리하기
merge 함수를 사용하면 이러한 테이블을 대상으로 통합 쿼리를 실행할 수 있습니다. 예를 들어, 아래 쿼리는 각 query_log 테이블에서 대상 노드로 전송된 가장 최근 쿼리를 식별합니다:
순서를 판단할 때 숫자 접미사에 의존하지 마십시오테이블의 숫자 접미사는 데이터 순서를 나타내는 것처럼 보일 수 있지만, 이를 신뢰해서는 안 됩니다. 따라서 특정 날짜 범위를 대상으로 할 때는 항상 날짜 필터와 함께 merge 테이블 함수를 사용하십시오.
노드 전체에서 쿼리하기
clusterAllReplicas 함수와 merge 테이블 함수를 함께 활용할 수 있습니다. clusterAllReplicas 함수는 “default” 클러스터 내 모든 레플리카의 시스템 테이블(system table)을 쿼리할 수 있게 하며, 노드별 데이터를 하나의 통합된 결과로 모아줍니다. 여기에 merge 테이블 함수를 함께 사용하면 클러스터에서 특정 테이블의 모든 시스템 데이터를 대상으로 쿼리할 수 있습니다.
이 방식은 클러스터 전반의 작업을 모니터링하고 디버깅하는 데 특히 유용하며, ClickHouse Cloud 배포의 상태와 성능을 효과적으로 분석하는 데 도움이 됩니다.
ClickHouse Cloud는 중복성과 failover를 위해 여러 레플리카로 구성된 클러스터를 제공합니다. 이를 통해 동적 자동 스케일링 및 무중단 업그레이드와 같은 기능을 지원합니다. 특정 시점에는 새 노드가 클러스터에 추가되는 중이거나 클러스터에서 제거되는 중일 수 있습니다. 이러한 노드를 건너뛰려면 아래와 같이
clusterAllReplicas를 사용하는 쿼리에 SETTINGS skip_unavailable_shards = 1을 추가하십시오.query_log 테이블을 쿼리할 때의 차이를 살펴보겠습니다.
노드와 버전 전반에서 쿼리하기
merge 테이블 함수와 함께 사용하면 선택한 날짜 범위에 대해 정확한 결과를 얻을 수 있습니다: