説明
OceanBaseデータベースCommunity Edition V4.3.5では、V4.3.5 BP2バージョンからテーブルロック機能がサポートされています。
テーブルロックは最も基本的なロック戦略であり、テーブル全体をロックし、任意の時点で同一テーブルに対する読み書き操作を許可するのは一つのセッションのみです。LOCK TABLES ステートメントを使用してテーブルをロックできます。
データベースは複数のユーザーが共有するリソースです。複数のユーザーが同時にデータにアクセスすると、データベース内で複数のトランザクションが同一データに同時にアクセスする状況が発生します。並行操作を制御しない場合、正しくないデータが読み取られたり保存されたりし、データベースの整合性が損なわれる可能性があります。ロックは、データベースの並行制御を実現するための非常に重要な技術です。リソースの安全性(すなわちデータの完全性と整合性)を確保するために、ロックメカニズムが導入されました。このロックメカニズムを利用して、トランザクション間のデータの並行アクセスとデータの整合性を実現します。
前提条件
ロック対象のテーブルは、ユーザー自身の Schema 内に存在するか、ユーザーには LOCK TABLES 権限が付与されている必要があります。
操作例
test1 テーブルに読み取りロックを設定し、test2 テーブルに書き込みロックを設定します。
obclient> LOCK TABLES test1 as t1 READ LOCAL, test2 as t2 LOW_PRIORITY WRITE;
Query OK, 0 row affected
- テーブルを読み取り専用モードでロックすると、そのテーブルは
selectのみ可能で、変更はできません。テーブルをロックする際に、そのテーブル上にトランザクションが存在する場合、lockステートメントはトランザクションが終了するまで待機します。複数のセッションが同時にこの操作をテーブルに対して実行できます。 - テーブルを読み書きモードでロックすると、
lock tableを実行したセッションはテーブルに対して変更やクエリなどの操作を行うことができますが、他のセッションはそのテーブルに対して何も操作できず、selectもブロックされます。
LOCK TABLES ステートメントの詳細については、LOCK TABLESを参照してください。