Clickhouse provides a system table for monitoring running queries. When working with a cluster, you need to use the clusterAllReplicas function to get processes from all nodes.

SELECT query FROM clusterAllReplicas(default, system.processes);

For a single-node Clickhouse instance, you can simply query the system.processes table directly without the cluster function:

SELECT query FROM system.processes;

For more detailed information about the running processes, include additional fields:

SELECT
    user,
    query_id,
    address,
    elapsed,
    formatReadableSize(memory_usage) AS memory,
    substring(query, 1, 80) AS query_snippet
FROM clusterAllReplicas(default, system.processes)
ORDER BY elapsed DESC

Query id: 7d23f9a1-8c42-4e21-b9f3-52a749cc2f8d

┌─user────┬─query_id──────────────────┬─address────────┬─elapsed─┬─memory───┬─query_snippet────────────────────────────────────────────────────────────┐
│ default │ 98e7b642-2fe3-4a39-aa4... │ 192.168.1.105  │   42.91 │ 2.35 GiB │ SELECT count() FROM events WHERE toDate(timestamp) >= today() - 7        │
│ admin   │ 7d23f9a1-8c42-4e21-b9f... │ 192.168.1.101  │   14.23 │ 4.12 MiB │ SELECT user, query_id, address, elapsed, formatReadableSize(memory_usa... │
└─────────┴───────────────────────────┴────────────────┴─────────┴──────────┴──────────────────────────────────────────────────────────────────────────┘

2 rows in set. Elapsed: 0.103 sec.

If you’re not sure which columns are available, you can always run:

DESCRIBE system.processes