메모리 문제 디버깅
메모리 문제 디버깅 (Debugging memory issues)
메모리 문제나 메모리 누수를 만났을 때 상당한 메모리를 소비하는 쿼리와 리소스가 무엇인지 아는 것이 도움이 됩니다. 아래 쿼리들로 어떤 쿼리·데이터베이스·테이블이 최적화될 수 있는지 찾아 메모리 문제를 디버깅할 수 있어요.
출처: 문서
본문
메모리 문제나 메모리 누수를 만났을 때 상당한 메모리를 소비하는 쿼리와 리소스가 무엇인지 아는 것이 도움이 됩니다. 아래에서 어떤 쿼리·데이터베이스·테이블이 최적화될 수 있는지 찾아 메모리 문제를 디버깅하는 데 도움이 되는 쿼리들을 찾을 수 있습니다:
현재 실행 중인 프로세스를 최고 메모리 사용별로 나열
SELECT
initial_query_id,
query,
elapsed,
formatReadableSize(memory_usage),
formatReadableSize(peak_memory_usage),
FROM system.processes
ORDER BY peak_memory_usage DESC
LIMIT 100;
메모리 사용 메트릭 나열
SELECT
metric, description, formatReadableSize(value) size
FROM
system.asynchronous_metrics
WHERE
metric LIKE '%Cach%'
OR metric LIKE '%Mem%'
ORDER BY
value DESC;
현재 메모리 사용별로 테이블 나열
SELECT
database,
name,
formatReadableSize(total_bytes)
FROM system.tables
WHERE engine IN ('Memory','Set','Join');
병합이 사용하는 총 메모리 출력
SELECT formatReadableSize(sum(memory_usage)) FROM system.merges;
현재 실행 중인 프로세스가 사용하는 총 메모리 출력
SELECT formatReadableSize(sum(memory_usage)) FROM system.processes;
딕셔너리가 사용하는 총 메모리 출력
SELECT formatReadableSize(sum(bytes_allocated)) FROM system.dictionaries;
기본 키와 인덱스 입자가 사용하는 총 메모리 출력
SELECT
sumIf(data_uncompressed_bytes, part_type = 'InMemory') AS memory_parts,
formatReadableSize(sum(primary_key_bytes_in_memory)) AS primary_key_bytes_in_memory,
formatReadableSize(sum(primary_key_bytes_in_memory_allocated)) AS primary_key_bytes_in_memory_allocated,
formatReadableSize(sum(index_granularity_bytes_in_memory)) AS index_granularity_bytes_in_memory,
formatReadableSize(sum(index_granularity_bytes_in_memory_allocated)) AS index_granularity_bytes_in_memory_allocated
FROM system.parts;