Locking Functions
TiDB supports most of the user-level locking functions available in MySQL 8.0.
Supported functions
Name | Description |
---|---|
GET_LOCK(lockName, timeout) | Acquires an advisory lock. The lockName parameter must be NO longer than 64 characters. Waits maximum timeout seconds before timing out and returns a failure. |
IS_FREE_LOCK(lockName) | Checks if a lock is free. |
IS_USED_LOCK(lockName) | Checks if a lock is in use. If true, it returns the corresponding connection ID. |
RELEASE_ALL_LOCKS() | Releases all locks held by the current session. |
RELEASE_LOCK(lockName) | Releases a previously acquired lock. The lockName parameter must be NO longer than 64 characters. |
MySQL compatibility
- The minimum timeout permitted by TiDB is 1 second, and the maximum timeout is 1 hour (3600 seconds). This differs from MySQL, where both 0 second and unlimited timeouts (
timeout=-1
) are permitted. TiDB will automatically convert out-of-range values to the nearest permitted value and converttimeout=-1
to 3600 seconds. - TiDB does not automatically detect deadlocks caused by user-level locks. Deadlocked sessions will timeout after a maximum of 1 hour, but can also be manually resolved by using
KILL
on one of the affected sessions. You can also prevent deadlocks by always acquiring user-level locks in the same order. - Locks take effect on all TiDB servers in the cluster. This differs from MySQL Cluster and Group Replication where locks are local to a single server.
IS_USED_LOCK()
returns1
if it is called from another session and is unable to return the ID of the process that is holding the lock.