Skip to main content

설명

현재 사용자의 쿼리 로그 레코드를 표시합니다. query_log.database 및 query_log.table 서버 설정으로 구성된 쿼리 로그 테이블(기본값: system.query_log)을 읽고, 쿼리를 시작한 사용자가 currentUser()와 같은 행만 반환합니다(쿼리를 시작한 사용자는 initial_user가 설정되어 있으면 해당 값으로, 그렇지 않으면 user 값으로 결정됩니다). 쿼리 로그 테이블 자체와 달리 system.user_query_log는 별도의 권한 부여 없이 읽을 수 있으므로, 다른 사용자의 쿼리에 대한 접근 권한을 부여하지 않고도 사용자가 자신의 쿼리를 확인할 수 있습니다. 이 기능은 쿼리 로그가 로컬에 저장된 경우에만 지원됩니다. query_log.engine이 Distributed 또는 읽기를 다른 서버에 위임하는 엔진으로 구성된 경우, ClickHouse 프로토콜 서버 경계를 넘어 필요한 접근 검사를 적용할 수 없으므로 system.user_query_log는 해당 테이블 읽기를 거부하고 예외를 발생시킵니다. 이 경우 query_log.enable_user_query_log = 0으로 테이블을 비활성화하십시오. 가용성 system.user_query_log는 query_log.enable_user_query_log 서버 설정이 활성화된 경우에만 attach되며, 이는 기본값입니다. 설정이 0인 경우 테이블이 존재하지 않으며 해당 테이블에 대한 쿼리는 UNKNOWN_TABLE 오류로 실패합니다. query_log.enable_user_query_log가 활성화되어 있지만 기반 쿼리 로그가 구성되지 않았거나 해당 테이블이 아직 생성되지 않은 경우, system.user_query_log는 존재하지만 비어 있습니다. 상수와 비교하는 쿼리 로그의 파티션 및 키 컬럼(event_date, event_time, query_start_time, query_id, type 및 이와 유사한 스칼라 컬럼)에 대한 조건은 기반 쿼리 로그 테이블로 푸시다운됩니다. 따라서 아래 예시와 같은 일반적인 조회에서는 파티션 프루닝이 적용되며 보존된 전체 로그를 스캔하지 않습니다. 이 테이블을 제공하는 ClickHouse 버전으로 업그레이드하기 전에 system.user_query_log라는 이름의 테이블을 생성한 경우, 기존 테이블의 이름을 변경하거나 삭제하거나 query_log.enable_user_query_log를 0으로 설정하기 전까지 서버가 시작되지 않습니다.

컬럼

  • hostname (String) — 쿼리를 실행하는 서버의 호스트명입니다.
  • clickhouse_version (String) — 행을 생성한 ClickHouse 서버의 버전입니다.
  • system_processor (String) — 행을 생성한 ClickHouse 서버의 CPU 아키텍처입니다.
  • type (Enum8(‘QueryStart’ = 1, ‘QueryFinish’ = 2, ‘ExceptionBeforeStart’ = 3, ‘ExceptionWhileProcessing’ = 4)) — 쿼리 실행 중 발생한 이벤트의 유형입니다. 값: QueryStart — 쿼리 실행이 성공적으로 시작됨, QueryFinish — 쿼리 실행이 성공적으로 완료됨, ExceptionBeforeStart — 쿼리 실행 시작 전 예외 발생, ExceptionWhileProcessing — 쿼리 실행 중 예외 발생입니다.
  • event_date (Date) — 쿼리 시작 날짜입니다.
  • event_time (DateTime) — 쿼리 시작 시간입니다.
  • event_time_microseconds (DateTime64(6)) — 마이크로초 정밀도의 쿼리 시작 시간입니다.
  • query_start_time (DateTime) — 쿼리 실행 시작 시간입니다.
  • query_start_time_microseconds (DateTime64(6)) — 마이크로초 정밀도의 쿼리 실행 시작 시간입니다.
  • query_duration_ms (UInt64) — 밀리초 단위의 쿼리 실행 시간입니다.
  • read_rows (UInt64) — 쿼리에 참여한 모든 테이블과 테이블 함수에서 읽은 총 행 수입니다. 일반 서브쿼리와 IN 및 JOIN용 서브쿼리가 포함됩니다. 분산 쿼리에서는 read_rows에 모든 레플리카에서 읽은 총 행 수가 포함됩니다. 각 레플리카가 자체 read_rows 값을 전송하면 쿼리를 시작한 서버가 수신한 값과 로컬 값을 모두 합산합니다. 캐시 볼륨은 이 값에 영향을 주지 않습니다.
  • read_bytes (UInt64) — 쿼리에 참여한 모든 테이블과 테이블 함수에서 읽은 총 바이트 수입니다. 일반 서브쿼리와 IN 및 JOIN용 서브쿼리가 포함됩니다. 분산 쿼리에서는 read_bytes에 모든 레플리카에서 읽은 총 바이트 수가 포함됩니다. 각 레플리카가 자체 read_bytes 값을 전송하면 쿼리를 시작한 서버가 수신한 값과 로컬 값을 모두 합산합니다. 캐시 볼륨은 이 값에 영향을 주지 않습니다.
  • written_rows (UInt64) — attached 상태인 materialized view 등 파이프라인에 의해 트리거된 다운스트림 삽입에서 기록된 행을 포함한, 쿼리가 기록한 행 수입니다. 동기 삽입에서는 이러한 다운스트림 행이 query_kind = Insert 항목에 기록됩니다. 비동기 삽입에서는 query_kind = AsyncInsertFlush 항목에 기록되며, 클라이언트 측 Insert 항목에는 클라이언트에서 수락한 행만 기록됩니다. 행을 기록하지 않는 쿼리에서는 0입니다.
  • written_bytes (UInt64) — attached 상태인 materialized view 등 파이프라인에 의해 트리거된 다운스트림 삽입에서 기록된 바이트를 포함한, 쿼리가 기록한 바이트 수(비압축)입니다. 동기 삽입에서는 이러한 다운스트림 바이트가 query_kind = Insert 항목에 기록됩니다. 비동기 삽입에서는 query_kind = AsyncInsertFlush 항목에 기록되며, 클라이언트 측 Insert 항목에는 클라이언트에서 수락한 바이트만 기록됩니다. 데이터를 기록하지 않는 쿼리에서는 0입니다.
  • result_rows (UInt64) — SELECT 쿼리 결과의 행 수 또는 삽입으로 기록된 행 수입니다. 동기 삽입에서는 query_kind = Insert 항목에 파이프라인에 의해 트리거된 다운스트림 삽입(예: attached 상태인 materialized view)으로 기록된 행이 포함됩니다. 비동기 삽입에서는 이러한 다운스트림 행이 query_kind = AsyncInsertFlush 항목에 기록되며, 클라이언트 측 Insert 항목에는 클라이언트에서 수락한 행만 기록됩니다.
  • result_bytes (UInt64) — 쿼리 결과를 저장하는 데 사용된 RAM 용량(바이트)입니다.
  • memory_usage (UInt64) — 쿼리의 메모리 사용량입니다.
  • current_database (String) — 현재 데이터베이스 이름입니다.
  • query (String) — 쿼리 문자열입니다.
  • formatted_query (String) — 포맷된 쿼리 문자열입니다.
  • normalized_query_hash (UInt64) — 리터럴 값만 다른 쿼리에서는 동일한 값을 갖는 등의 숫자 해시 값입니다.
  • query_kind (String) — 쿼리 유형입니다.
  • databases (Array(String)) — 쿼리에 포함된 데이터베이스 이름입니다.
  • tables (Array(String)) — 쿼리에 포함된 테이블 이름입니다.
  • columns (Array(String)) — 쿼리에 포함된 컬럼 이름입니다.
  • partitions (Array(String)) — 쿼리에 포함된 파티션 이름입니다.
  • projections (Array(String)) — 쿼리 실행 중 사용된 프로젝션 이름입니다.
  • views (Array(String)) — 쿼리에 포함된 구체화된 뷰 또는 라이브 뷰의 이름입니다.
  • exception_code (Int32) — 예외 코드입니다.
  • exception (String) — 예외 메시지입니다.
  • stack_trace (String) — 스택 트레이스입니다. 쿼리가 성공적으로 완료된 경우 빈 문자열입니다.
  • is_initial_query (UInt8) — 쿼리가 원본 쿼리인지 여부입니다. 가능한 값: 1 — 원본(최상위) 쿼리, 0 — 분산 실행용 쿼리와 내부 서브쿼리를 포함하여 다른 쿼리가 시작한 자식 쿼리입니다.
  • connection_address (IPv6) — 연결이 설정된 클라이언트의 IP 주소입니다. 프록시를 통해 연결된 경우 프록시의 주소입니다.
  • connection_port (UInt16) — 연결이 설정된 클라이언트의 포트입니다. 프록시를 통해 연결된 경우 프록시의 포트입니다.
  • user (String) — 현재 쿼리를 시작한 사용자 이름입니다.
  • query_id (String) — 쿼리 ID입니다.
  • address (IPv6) — 쿼리 실행에 사용된 IP 주소입니다. 프록시를 통해 연결되고 auth_use_forwarded_address가 설정된 경우 프록시 주소가 아닌 클라이언트 주소입니다.
  • port (UInt16) — 쿼리 실행에 사용된 클라이언트 포트입니다. 프록시를 통해 연결되고 auth_use_forwarded_address가 설정된 경우 프록시 포트가 아닌 클라이언트 포트입니다.
  • initial_user (String) — 동일한 쿼리 체인에서 원본 쿼리를 실행한 사용자 이름입니다.
  • initial_query_id (String) — 동일한 쿼리 체인에 있는 원본 쿼리 ID입니다.
  • initial_address (IPv6) — 동일한 쿼리 체인에서 원본 쿼리가 시작된 IP 주소입니다.
  • initial_port (UInt16) — 동일한 쿼리 체인에서 원본 쿼리가 시작된 클라이언트 포트입니다.
  • initial_query_start_time (DateTime) — 동일한 쿼리 체인에서 원본 쿼리의 시작 시간입니다.
  • initial_query_start_time_microseconds (DateTime64(6)) — 동일한 쿼리 체인에서 마이크로초 정밀도의 원본 쿼리 시작 시간입니다.
  • authenticated_user (String) — 세션에서 인증된 사용자 이름입니다.
  • interface (Enum8(‘Unknown’ = 0, ‘TCP’ = 1, ‘HTTP’ = 2, ‘gRPC’ = 3, ‘MySQL’ = 4, ‘PostgreSQL’ = 5, ‘Local’ = 6, ‘TCP_Interserver’ = 7, ‘Prometheus’ = 8, ‘Background’ = 9, ‘ArrowFlight’ = 10)) — 클라이언트가 보고한, 쿼리가 시작된 인터페이스입니다. 보고된 인터페이스를 이 서버가 인식하지 못하는 경우 Unknown입니다.
  • is_secure (UInt8) — 쿼리가 보안 인터페이스를 통해 실행되었는지를 나타내는 플래그
  • os_user (String) — clickhouse-client를 실행하는 운영 체제 사용자 이름입니다.
  • client_hostname (String) — clickhouse-client 또는 다른 TCP 클라이언트가 실행되는 클라이언트 머신의 호스트명입니다.
  • client_name (String) — clickhouse-client 또는 다른 TCP 클라이언트의 이름입니다.
  • client_agent (String) — 클라이언트를 호출한 AI 코딩 에이전트(예: claude-code, cursor)로, 환경 변수에서 감지됩니다. 에이전트가 감지되지 않으면 비어 있습니다.
  • client_revision (UInt32) — clickhouse-client 또는 다른 TCP 클라이언트의 revision입니다.
  • client_version_major (UInt32) — clickhouse-client 또는 다른 TCP 클라이언트의 주 버전입니다.
  • client_version_minor (UInt32) — clickhouse-client 또는 다른 TCP 클라이언트의 부 버전입니다.
  • client_version_patch (UInt32) — clickhouse-client 또는 다른 TCP 클라이언트 버전의 패치 구성 요소입니다.
  • script_query_number (UInt32) — 여러 쿼리가 포함된 clickhouse-client 스크립트에서의 쿼리 번호입니다.
  • script_line_number (UInt32) — 여러 쿼리가 포함된 clickhouse-client 스크립트에서 쿼리가 시작되는 줄 번호입니다.
  • http_method (Enum8(‘UNKNOWN’ = 0, ‘GET’ = 1, ‘POST’ = 2, ‘OPTIONS’ = 3, ‘PUT’ = 4, ‘DELETE’ = 5, ‘HEAD’ = 6)) — 쿼리를 시작한 HTTP 메서드입니다. 쿼리가 HTTP를 통해 전달되지 않았거나 보고된 메서드를 이 서버가 인식하지 못하는 경우 UNKNOWN입니다.
  • http_user_agent (String) — HTTP 쿼리에 전달된 UserAgent HTTP 헤더입니다.
  • http_referer (String) — HTTP 쿼리에 전달된 Referer HTTP 헤더입니다(쿼리를 수행한 페이지의 전체 또는 일부 주소를 포함합니다).
  • forwarded_for (String) — HTTP 쿼리에 전달된 X-Forwarded-For HTTP 헤더입니다.
  • quota_key (String) — 쿼터 설정에서 지정한 쿼터 키입니다(keyed 참조).
  • distributed_depth (UInt64) — 쿼리가 서버 간에 전달된 횟수입니다.
  • revision (UInt32) — ClickHouse revision입니다.
  • http_handler_name (String) — 쿼리를 호출한 SQL로 정의된 HTTP handler(CREATE HANDLER)의 이름입니다. 쿼리가 이러한 handler를 통해 호출되지 않은 경우 비어 있습니다.
  • http_request_url (String) — 쿼리를 호출한 HTTP 요청 경로(쿼리 문자열 제외)입니다. 민감한 요청 매개변수가 저장되지 않도록 쿼리 문자열은 생략됩니다. HTTP가 아닌 쿼리에서는 비어 있습니다.
  • log_comment (String) — 로그 주석입니다. max_query_size 이하 길이의 임의 문자열로 설정할 수 있습니다. 정의되지 않은 경우 빈 문자열입니다.
  • thread_ids (Array(UInt64)) — 쿼리 실행에 참여하는 스레드 ID입니다. 이 스레드들은 동시에 실행되지 않았을 수 있습니다.
  • peak_threads_usage (UInt64) — 쿼리를 실행하는 동시 스레드의 최대 수입니다.
  • ProfileEvents (Map(String, UInt64)) — 다양한 메트릭을 측정하는 ProfileEvents입니다. 이에 대한 설명은 system.events 테이블에서 확인할 수 있습니다.
  • Settings (Map(String, String)) — 클라이언트가 쿼리를 실행할 때 변경된 설정입니다. 설정 변경 로깅을 활성화하려면 log_query_settings 매개변수를 1로 설정하십시오.
  • used_aggregate_functions (Array(String)) — 쿼리 실행 중 사용된 집계 함수의 정규 이름입니다.
  • used_aggregate_function_combinators (Array(String)) — 쿼리 실행 중 사용된 집계 함수 조합자의 정규 이름입니다.
  • used_database_engines (Array(String)) — 쿼리 실행 중 사용된 데이터베이스 엔진의 정규 이름입니다.
  • used_data_type_families (Array(String)) — 쿼리 실행 중 사용된 데이터 타입 계열의 정규 이름입니다.
  • used_dictionaries (Array(String)) — 쿼리 실행 중 사용된 딕셔너리의 정규 이름입니다.
  • used_formats (Array(String)) — 쿼리 실행 중 사용된 포맷의 정규 이름입니다.
  • used_functions (Array(String)) — 쿼리 실행 중 사용된 함수의 정규 이름입니다.
  • used_storages (Array(String)) — 쿼리 실행 중 사용된 스토리지의 정규 이름입니다.
  • used_table_functions (Array(String)) — 쿼리 실행 중 사용된 테이블 함수의 정규 이름입니다.
  • used_executable_user_defined_functions (Array(String)) — 쿼리 실행 중 사용된 실행형 사용자 정의 함수의 정규 이름입니다.
  • used_sql_user_defined_functions (Array(String)) — 쿼리 실행 중 사용된 SQL 사용자 정의 함수의 정규 이름입니다.
  • used_row_policies (Array(String)) — 쿼리 실행 중 사용된 행 정책 이름 목록입니다.
  • used_privileges (Array(String)) — 쿼리 실행 중 확인에 성공한 권한입니다.
  • missing_privileges (Array(String)) — 쿼리 실행 중 누락된 권한입니다.
  • used_number_of_joins (UInt64) — 이 쿼리에서 실행된 물리적 조인의 수입니다. 파이프라인이 구성되는 시점에 수집되므로, 쿼리 텍스트에 있는 JOIN 절의 수가 아니라 모든 최적화를 거친 후 남은 조인을 반영합니다. 조인은 중첩 깊이와 관계없이 집계됩니다. 서브쿼리, 공통 테이블 표현식(CTE), 뷰, 뷰의 뷰, 그리고 INSERT로 트리거된 materialized view의 SELECT는 모두 전송된 쿼리의 행에 집계되므로, 쿼리 텍스트 자체에 JOIN이 전혀 없더라도 이 값이 0이 아닐 수 있습니다. EXPLAIN PIPELINE처럼 파이프라인을 실행하지 않고 구성만 하는 쿼리는 설명 대상 쿼리의 조인을 보고합니다. 일부 파이프라인은 단일 쿼리가 실행되는 동안 여러 번 구성됩니다. materialized view의 SELECT는 이를 트리거하는 INSERT의 블록마다, 그리고 삽입 스트림마다 구성되고, 재귀 CTE의 재귀 멤버는 반복할 때마다 구성되며, 루프의 relation은 재시작될 때마다 다시 구성됩니다. 그렇더라도 이러한 파이프라인의 조인은 한 번만 집계되므로, 이 값은 파이프라인이 구성된 횟수가 아니라 쿼리 자체를 나타냅니다.
  • used_join_algorithms (Array(String)) — used_number_of_joins에 집계된 조인의 알고리즘으로, ‘HASH’, ‘PARALLEL_HASH’, ‘GRACE_HASH’, ‘PARTIAL_MERGE’, ‘FULL_SORTING_MERGE’, ‘PARALLEL_FULL_SORTING_MERGE’, ‘IE_JOIN’, ‘DIRECT’, ‘PASTE’, ‘CONSTANT’가 있습니다. 정렬 및 중복 제거되므로 여러 조인에서 사용된 알고리즘은 한 번만 표시됩니다. join_algorithm 설정에서 허용하는 알고리즘이 아니라 각 조인을 실행하는 데 실제로 선택된 알고리즘입니다. 실행 도중 알고리즘이 다른 알고리즘으로 대체될 수 있으며, 이 경우 두 알고리즘이 모두 보고됩니다.
  • used_join_kinds (Array(String)) — used_number_of_joins에 집계된 조인의 종류로, 조인마다 원소가 하나씩 기록되므로 여러 조인에 공통된 종류는 여러 번 표시됩니다. 원소는 실행 순서가 아니라 정렬된 순서로 표시됩니다. 각 종류는 실제로 실행된 종류이므로 쿼리 텍스트와 다를 수 있습니다. 최적화기가 조인의 양쪽을 서로 바꿔 실행하면서 LEFT가 RIGHT로 바뀔 수 있기 때문입니다.
  • used_join_strictness (Array(String)) — used_number_of_joins에 집계된 조인의 엄격성으로, 조인마다 원소가 하나씩 used_join_kinds와 동일한 순서로 기록됩니다. 즉, 두 배열에서 같은 인덱스의 원소는 동일한 조인을 나타냅니다.
  • spilled_to_disk (Array(String)) — 쿼리 실행 중 디스크의 임시 파일에 데이터를 기록한(외부 메모리 처리) 연산자 목록으로, 정렬 및 중복 제거되어 있습니다. 빈 배열이면 쿼리가 전부 메모리 내에서 실행되었음을 의미합니다.
  • transaction_id (Tuple(UInt64, UInt64, UUID, Int64)) — 이 쿼리가 실행된 트랜잭션의 식별자입니다.
  • query_cache_usage (Enum8(‘Unknown’ = 0, ‘None’ = 1, ‘Write’ = 2, ‘Read’ = 3)) — 쿼리 실행 중 쿼리 캐시 사용 상태입니다. 값: ‘Unknown’ = 상태를 알 수 없음, ‘None’ = 쿼리 결과가 쿼리 결과 캐시에 기록되거나 쿼리 결과 캐시에서 읽히지 않음, ‘Write’ = 쿼리 결과가 쿼리 결과 캐시에 기록됨, ‘Read’ = 쿼리 결과가 쿼리 결과 캐시에서 읽힘.
  • asynchronous_read_counters (Map(String, UInt64)) — 비동기 읽기 메트릭입니다.
  • is_internal (UInt8) — 내부적으로 실행되는 보조 쿼리인지 여부를 나타냅니다.
별칭:
  • ProfileEvents.Names — mapKeys(ProfileEvents)의 별칭입니다.
  • ProfileEvents.Values — mapValues(ProfileEvents)의 별칭입니다.
  • Settings.Names — mapKeys(Settings)의 별칭입니다.
  • Settings.Values — mapValues(Settings)의 별칭입니다.

예시

마지막 수정일 2026년 9월 26일