system.query_log 테이블 사용하기
다음의 유용한 쿼리는 실행된 쿼리 중 어떤 쿼리가 가장 많은 메모리를 사용했는지 보여줍니다.
이 쿼리에 대해 몇 가지 설명드리면 다음과 같습니다.
- 결과는 지난 1일(
now() - toIntervalDay(1)))을 기준으로 계산되지만, 시간 인터벌은 쉽게 수정할 수 있습니다 default라는 이름의 클러스터(cluster)가 있다고 가정합니다. 이는 ClickHouse Cloud에서 사용하는 클러스터 이름입니다.default를 클러스터 이름으로 변경하세요- 클러스터가 없다면 이 문서 끝에 나와 있는 쿼리를 참조하세요
SELECT
count() as nb_query,
user,
query,
sum(memory_usage) AS memory,
normalized_query_hash
FROM
clusterAllReplicas(default, system.query_log)
WHERE
(event_time >= (now() - toIntervalDay(1)))
AND is_initial_query = 1
AND query_kind = 'Select'
AND type = 'QueryFinish'
and user != 'monitoring-internal'
GROUP BY
normalized_query_hash,
query,
user
ORDER BY
memory DESC;응답은 다음과 같습니다:
┌─nb_query─┬─user────┬─query─────────────────────────────────────────────────────────┬───memory─┬─normalized_query_hash─┐
│ 11 │ default │ select version() │ 46178924 │ 7202516440347714159 │
│ 2 │ default │ SELECT * FROM "system"."table_functions" LIMIT 31 OFFSET 0 │ 8391544 │ 12830067173062987695 │
└──────────┴─────────┴───────────────────────────────────────────────────────────────┴──────────┴───────────────────────┘클러스터가 없다면 단일 system.query_log 테이블에 직접 쿼리할 수 있습니다:
SELECT
count() as nb_query,
user,
query,
sum(memory_usage) AS memory,
normalized_query_hash
FROM
system.query_log
WHERE
(event_time >= (now() - toIntervalDay(1)))
AND is_initial_query = 1
AND query_kind = 'Select'
AND type = 'QueryFinish'
and user != 'monitoring-internal'
GROUP BY
normalized_query_hash,
query,
user
ORDER BY
memory DESC;