SLEEP statement
The SLEEP statement is used to introduce a delay or pause in the execution of a query or a batch of queries for a specific amount of time.
Statement syntax
SurrealQL Syntax
SLEEP @duration;
Example usage
The following query shows example usage of this statement.
SLEEP 1s;
SLEEP 100ms;
For more dynamic usage of sleep, see SurrealDB’s sleep function.
SLEEP during parallel operations
A SLEEP statement does not interfere with operations that are underway in the background, such as a DEFINE INDEX statement using the CONCURRENTLY clause.
CREATE |user:50000| SET name = id.id() RETURN NONE;
DEFINE INDEX unique_name ON TABLE user FIELDS name UNIQUE CONCURRENTLY;
INFO FOR INDEX unique_name ON TABLE user;
SLEEP 50ms;
INFO FOR INDEX unique_name ON TABLE user;
SLEEP 50ms;
INFO FOR INDEX unique_name ON TABLE user;
SLEEP 50ms;
INFO FOR INDEX unique_name ON TABLE user;
Possible output
{
building: {
count: 0,
status: 'initial'
}
}
{
building: {
count: 17250,
status: 'initial'
}
}
{
building: {
count: 33542,
status: 'initial'
}
}
{
building: {
status: 'built'
}
}
Use cases
SLEEP can be useful in a small number of situations, such as:
- Testing and debugging: can be used to understand how concurrent transactions interact, test how systems handle timeouts and delays, simulate behaviour in more distant regions with longer latency
- Throttling: can be used to throttle the execution of operations to prevent the database from being overwhelmed by too many requests at once
- Security measures: can be used to slow down the response rate of login attempts to mitigate the risk of brute force attacks