[Clickhouse] 디스크 사용량 추적
디스크 사용량을 모니터링하고 쫓아가는 방법을 정리해본다.
전체 디스크 사용량 확인
가장 간단하게 디스크 사용량을 확인하는 방법은 disk 테이블을 읽는 것이다.
SELECT
name AS disk,
path,
type,
formatReadableSize(total_space) AS total,
formatReadableSize(total_space - free_space) AS used
FROM system.disks
이러면 호스트 전체 디스크의 크기는 900GB고, 사용중인 용량이 115GB라는 말이 된다.
근데 여기에는 허수가 좀 크게 들어있다.
이 disk 정보는 clickhouse가 쓰는 영역만 계산하는게 아니라, 해당 파일시스템의 총 사용량을 계산하는 것이기 때문이다. 그래서 루트 파일시스템(/)을 쓴다면, 그 사용량이 그대로 전이된다.
가장 정확한 사용량을 재는 방법은 parts를 읽는 것이다.
SELECT
formatReadableSize(sum(bytes_on_disk)) AS size
FROM system.parts
이게 진짜 clickhouse의 사용량이다.
inactive parts
다른 DB들이 그렇듯이, clickhouse도 미사용영역에 대한 dead parts가 항상 남아있다.
이건 merge되고 남은 옛 잔여물일 수도 있고 삭제된 옛 데이터일 수도 있다.
시간이 지나면 정리되긴 하지만, 경우에 따라서는 크게 튈 수 있어서 세부 조정이 필요할 수 있다.
SELECT
active,
formatReadableSize(sum(bytes_on_disk)) AS size,
count() AS parts
FROM system.parts
GROUP BY active;

DB별 크기 조회
DB별 크기 조회 쿼리다.
SELECT
database,
sum(bytes_on_disk) AS bytes,
formatReadableSize(bytes) AS size,
sum(rows) AS rows,
uniqExact(table) AS table_count,
count() AS active_part_count
FROM system.parts
WHERE active = 1
GROUP BY database
ORDER BY bytes DESC;

테이블별 크기 조회
테이블별로 크기를 조회하는 쿼리다.
SELECT
database,
table,
disk_name,
sum(bytes_on_disk) AS bytes_on_disk,
formatReadableSize(bytes_on_disk) AS size_on_disk,
formatReadableSize(sum(data_compressed_bytes))
AS compressed_data,
formatReadableSize(sum(data_uncompressed_bytes))
AS uncompressed_data,
round(
sum(data_uncompressed_bytes)
/ nullIf(sum(data_compressed_bytes), 0),
2
) AS compression_ratio,
sum(rows) AS rows,
count() AS active_parts
FROM system.parts
WHERE active = 1
GROUP BY
database,
table,
disk_name
ORDER BY bytes_on_disk DESC;
테이블과 실제 디스크 사용량, 미압축시의 원본 데이터도 볼 수 있다.
압축이 상당히 잘되더라.
시스템 로그
DB를 장기간 운영하다보면 system 테이블이 수상할 정도로 부풀 수 있다.
clickhouse은 로그를 굉장히 열심히 쌓는 편인데, 그걸 알아서 치우질 않기 때문이다.
이건 알아서 잘 정리해줘야 한다.
정리 방법은 별도 포스트를 참조한다.
https://blog.naver.com/sssang97/224173373332
참조
https://clickhouse.com/docs/operations/system-tables/disks