ロック機能
TiDB は、 MySQL 5.7で利用可能なユーザーレベルロック関数のほとんどをサポートします。
サポートされている関数
名前 | 説明 |
---|---|
GET_LOCK(lockName, timeout) | アドバイザリーロックを取得します。 lockName パラメータは 64 文字以内である必要があります。タイムアウトになるまで最大timeout 秒待機し、失敗を返します。 |
RELEASE_LOCK(lockName) | 以前に取得したロックを解放します。 lockName パラメータは 64 文字以内である必要があります。 |
RELEASE_ALL_LOCKS() | 現在のセッションによって保持されているすべてのロックを解放します。 |
MySQLの互換性
- TiDB で許可される最小タイムアウトは 1 秒、最大タイムアウトは 1 時間 (3600 秒) です。これは、0 秒と無制限のタイムアウト (
timeout=-1
) の両方が許可される MySQL とは異なります。 TiDB は範囲外の値を最も近い許可値に自動的に変換し、timeout=-1
秒を 3600 秒に変換します。 - TiDB は、ユーザーレベルのロックによって引き起こされるデッドロックを自動的に検出しません。デッドロックされたセッションは最大 1 時間後にタイムアウトしますが、影響を受けるセッションの 1 つで
KILL
を使用して手動で解決することもできます。ユーザーレベルのロックを常に同じ順序で取得することで、デッドロックを防ぐこともできます。 - ロックはクラスター内のすべての TiDB サーバーで有効になります。これは、ロックが単一サーバーに対してローカルである MySQL クラスタやグループ レプリケーションとは異なります。
サポートされていない関数
IS_FREE_LOCK()
IS_USED_LOCK()
このページは役に立ちましたか?
Playground
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。