System-таблицы, логи, метрики, трассировка запросов, профилирование, alerting
System-таблицы, логи, метрики, трассировка запросов, профилирование, alerting
-- Последние выполненные запросы
SELECT
query_id,
query,
event_date,
event_time,
elapsed,
read_rows,
read_bytes,
result_rows,
result_bytes,
memory_usage,
user
FROM system.query_log
WHERE event_date = today()
ORDER BY event_time DESC
LIMIT 20;
-- Медленные запросы (> 1 секунды)
SELECT
query,
elapsed,
read_rows,
read_bytes,
memory_usage,
user
FROM system.query_log
WHERE event_date = today()
AND elapsed > 1.0
ORDER BY elapsed DESC;
-- Ошибки выполнения
SELECT
query,
exception_code,
exception_text,
event_time
FROM system.query_log
WHERE event_date = today()
AND type = 'Exception'
ORDER BY event_time DESC;Типы записей:
QueryStart — начало выполненияQueryFinish — успешное завершениеException — ошибка выполнения-- Активные запросы
SELECT
query_id,
query,
elapsed,
read_rows,
read_bytes,
memory_usage,
user,
host
FROM system.processes
ORDER BY elapsed DESC;
-- Запросы с большим потреблением памяти
SELECT
query,
memory_usage,
elapsed,
user
FROM system.processes
WHERE memory_usage > 1000000000 -- 1 GB
ORDER BY memory_usage DESC;
-- Убийство запроса
KILL QUERY WHERE query_id = 'query_id';-- Все метрики
SELECT
metric,
value,
description
FROM system.metrics
ORDER BY metric;
-- Ключевые метрики
SELECT
metric,
value
FROM system.metrics
WHERE metric IN (
'Query',
'Merge',
'HTTPConnection',
'TCPConnection',
'MemoryTracking'
);Важные метрики:
| Метрика | Описание |
|---|---|
| Query | Количество выполненных запросов |
| Merge | Количество слияний частей |
| HTTPConnection | Активные HTTP подключения |
| TCPConnection | Активные TCP подключения |
| MemoryTracking | Используемая память |
-- События с момента запуска
SELECT
event,
value,
description
FROM system.events
ORDER BY event;
-- События за период (через query_log)
SELECT
'Queries' AS event,
count() AS value
FROM system.query_log
WHERE event_date = today();-- Метрики, обновляемые периодически
SELECT
metric,
value
FROM system.asynchronous_metrics
WHERE metric LIKE '%Memory%'
OR metric LIKE '%Disk%';Примеры:
TotalMemoryAllocated — выделенная памятьFilesystemFree — свободное место на дискеSELECT
name,
path,
free_space,
total_space,
keep_free_space,
type
FROM system.disks;-- Статус частей таблиц
SELECT
database,
table,
partition,
name,
active,
level,
rows,
bytes_on_disk,
modification_time
FROM system.parts
WHERE database = 'default'
AND active = 1
ORDER BY modification_time DESC;
-- Неактивные части (ожидают удаления)
SELECT
database,
table,
name,
bytes_on_disk
FROM system.parts
WHERE active = 0
ORDER BY bytes_on_disk DESC;
-- Части с большим количеством уровней (проблемы с merge)
SELECT
database,
table,
name,
level,
rows
FROM system.parts
WHERE active = 1
AND level > 10
ORDER BY level DESC;-- Статус реплик
SELECT
database,
table,
total_replicas,
active_replicas,
is_readonly,
is_session_expired,
absolute_delay,
last_queue_update
FROM system.replicas;
-- Проблемы с репликацией
SELECT
database,
table,
is_readonly,
is_session_expired,
absolute_delay
FROM system.replicas
WHERE is_readonly = 1
OR is_session_expired = 1
OR absolute_delay > 60;-- Очередь репликации
SELECT
database,
table,
position,
node_name,
type,
required_quorum,
is_currently_executing,
create_time
FROM system.replication_queue
ORDER BY create_time;
-- Зависшие операции репликации
SELECT
database,
table,
position,
type,
is_currently_executing,
create_time
FROM system.replication_queue
WHERE create_time < now() - INTERVAL 1 HOUR;-- Активные слияния
SELECT
database,
table,
elapsed,
progress,
num_parts,
result_part_name,
bytes_read_uncompressed,
bytes_written_uncompressed
FROM system.merges
ORDER BY elapsed DESC;
-- Мутации (UPDATE/DELETE)
SELECT
database,
table,
mutation_id,
command,
create_time,
is_done,
latest_fail_reason
FROM system.mutations
WHERE is_done = 0;-- Узлы кластера
SELECT
cluster,
shard_num,
replica_num,
host_name,
host_address,
port,
is_local
FROM system.clusters
WHERE cluster = 'cluster_default';-- Статус выполнения DDL на кластере
SELECT
query,
host,
shard_num,
replica_num,
status,
exception_code,
exception_text,
query_finish_time
FROM system.distributed_ddl_queue
ORDER BY entry DESC
LIMIT 20;-- Детальная информация о запросе
SELECT
query_id,
query,
event_type,
elapsed,
read_rows,
read_bytes,
written_rows,
written_bytes,
result_rows,
result_bytes,
memory_usage,
peak_memory_usage,
read_latency_ms,
ProfileEvents,
Settings
FROM system.query_log
WHERE query_id = 'specific_query_id'
ORDER BY event_time;-- События для конкретного запроса
SELECT
ProfileEvents['ReadBufferFromFileDescriptorRead'] AS file_reads,
ProfileEvents['ReadBufferFromFileDescriptorReadBytes'] AS file_read_bytes,
ProfileEvents['OSReadChars'] AS os_read_chars,
ProfileEvents['OSWriteChars'] AS os_write_chars
FROM system.query_log
WHERE query_id = 'specific_query_id'
AND type = 'QueryFinish';Важные ProfileEvents:
ReadBufferFromFileDescriptorRead — чтения с дискаSelectedRows — отобранные строкиSelectedBytes — отобранные байтыMergedRows — строки после mergeMergedColumns — колонки после merge-- Включить трассировку (в конфигурации)
-- <query_log>
-- <collect_query_traces>1</collect_query_traces>
-- </query_log>
-- Просмотр трассировки
SELECT
query_id,
event_time,
trace,
arrayMap(x -> demangle(x), trace) AS trace_demangled
FROM system.trace_log
WHERE query_id = 'specific_query_id'
ORDER BY event_time;-- Статистика по запросам за период
SELECT
toDate(event_time) AS date,
count() AS total_queries,
avg(elapsed) AS avg_elapsed,
max(elapsed) AS max_elapsed,
avg(read_rows) AS avg_read_rows,
avg(memory_usage) AS avg_memory
FROM system.query_log
WHERE event_date >= today() - INTERVAL 7 DAY
AND type = 'QueryFinish'
GROUP BY date
ORDER BY date;
-- Топ запросов по потреблению памяти
SELECT
query,
avg(memory_usage) AS avg_memory,
max(memory_usage) AS max_memory,
count() AS executions
FROM system.query_log
WHERE event_date = today()
GROUP BY query
ORDER BY avg_memory DESC
LIMIT 20;
-- Топ запросов по времени выполнения
SELECT
query,
avg(elapsed) AS avg_elapsed,
max(elapsed) AS max_elapsed,
count() AS executions
FROM system.query_log
WHERE event_date = today()
GROUP BY query
ORDER BY avg_elapsed DESC
LIMIT 20;-- Размер таблиц
SELECT
database,
table,
sum(rows) AS total_rows,
sum(bytes_on_disk) AS total_bytes,
sum(bytes_on_disk) / sum(rows) AS bytes_per_row
FROM system.parts
WHERE active = 1
GROUP BY database, table
ORDER BY total_bytes DESC;
-- Статистика по партициям
SELECT
database,
table,
partition,
sum(rows) AS rows,
sum(bytes_on_disk) AS bytes,
min(modification_time) AS oldest_part,
max(modification_time) AS newest_part
FROM system.parts
WHERE active = 1
GROUP BY database, table, partition
ORDER BY modification_time DESC;-- Предупреждение о низком месте на диске
SELECT
name,
free_space,
total_space,
round(free_space * 100.0 / total_space, 2) AS free_pct
FROM system.disks
WHERE free_space < 10000000000 -- 10 GB
OR free_space * 100.0 / total_space < 10;-- Предупреждение об отставании реплик
SELECT
database,
table,
total_replicas,
active_replicas,
absolute_delay
FROM system.replicas
WHERE absolute_delay > 60 -- 1 минута
OR active_replicas < total_replicas;-- Предупреждение о зависших мутациях
SELECT
database,
table,
mutation_id,
command,
create_time,
latest_fail_reason
FROM system.mutations
WHERE is_done = 0
AND create_time < now() - INTERVAL 1 HOUR;-- Предупреждение о долгих слияниях
SELECT
database,
table,
elapsed,
num_parts,
bytes_read_uncompressed
FROM system.merges
WHERE elapsed > 3600; -- 1 часClickHouse экспортирует метрики в формате Prometheus:
<!-- config.xml -->
<clickhouse>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
</prometheus>
</clickhouse>URL метрик:
http://clickhouse:9363/metrics — все метрики# prometheus.yml
scrape_configs:
- job_name: 'clickhouse'
static_configs:
- targets: ['clickhouse:9363']Популярные дашборды:
-- Найти медленные запросы
SELECT
query,
avg(elapsed) AS avg_elapsed,
count() AS executions
FROM system.query_log
WHERE event_date = today()
GROUP BY query
HAVING avg_elapsed > 1.0
ORDER BY avg_elapsed DESC;
-- Анализ плана выполнения
EXPLAIN PIPELINE
SELECT ...;
-- Проверка использования индексов
EXPLAIN indexes = 1
SELECT ...;-- Запросы с большим потреблением памяти
SELECT
query,
max(memory_usage) AS max_memory,
event_time
FROM system.query_log
WHERE event_date = today()
AND memory_usage > 1000000000
ORDER BY max_memory DESC;
-- Лимиты памяти
SELECT
name,
value
FROM system.settings
WHERE name LIKE '%memory%';-- Проверка статуса реплик
SELECT
database,
table,
is_readonly,
is_session_expired,
absolute_delay,
last_queue_update_exception
FROM system.replicas;
-- Ошибки в очереди репликации
SELECT
database,
table,
position,
type,
create_time,
latest_fail_reason
FROM system.replication_queue
WHERE latest_fail_reason != '';Изучим безопасность: пользователи, роли, права доступа, квоты, SSL/TLS.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.