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