How are Locks and Wait Events implemented in ClickHouse?


In ClickHouse, locks and wait events are implemented using a combination of a lock manager and a wait queue. The lock manager is responsible for managing the state of locks and the wait queue is used to handle contention for locked resources. When a thread attempts to acquire a lock, it first checks if the lock is available. If it is, the thread acquires the lock and proceeds with its operation. If the lock is not available, the thread is placed in the wait queue and is blocked until the lock becomes available. Once the lock is available, the thread is woken up and can acquire the lock. The wait queue is implemented as a priority queue, with threads that have been waiting the longest having the highest priority. This helps to prevent starvation of threads that have been waiting for a long time.

Query for Monitoring Locks & Wait Events

Here’s an example of a SQL query that can be used to monitor locks and wait events in ClickHouse:

WHERE event_type = 'Lock' OR event_type = 'Wait' 
ORDER BY event_time DESC LIMIT 10

This query will select the most recent 10 events from the table where the event_type is either “Lock” or “Wait”. The event_time column is used to order the events in descending order.


Monitoring lock & wait events and expertly navigating them is key to achieving optimal query performance in ClickHouse. The aforementioned script can help you keep an eye on the lock or wait event & prevent performance bottlenecks.

To know more about Clickhouse Locks & Waits, do consider reading the following articles:

About Shiv Iyer 227 Articles
Open Source Database Systems Engineer with a deep understanding of Optimizer Internals, Performance Engineering, Scalability and Data SRE. Shiv currently is the Founder, Investor, Board Member and CEO of multiple Database Systems Infrastructure Operations companies in the Transaction Processing Computing and ColumnStores ecosystem. He is also a frequent speaker in open source software conferences globally.