ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseアーキテクチャ概要
リリース6.0
B25763-01
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

ロック

ロックとは、リソースへのアクセスのシリアル化に使用する高水準の構造で、あるユーザーによって参照中または変更中の要素が、別のユーザーによって同時に変更されるのを防ぎます。データ・ストアが共有モードでアクセスされる場合、TimesTenは自動的にロックを設定します。

アプリケーションでは、次の3つのロック・レベルから選択できます。

データ・ストア・レベル・ロック

データ・ストア・レベル・ロックは、トランザクションによるアクセス時にデータ・ストア全体をロックし、他のトランザクションによるアクセスを禁止します。すべてのデータ・ストア・レベル・ロックは排他的です。データ・ストア・レベル・ロックを必要とするトランザクションは、データ・ストアにアクティブなトランザクションがなくなるまで開始できません。いったんトランザクションでデータ・ストア・レベル・ロックが取得されると、トランザクションがコミットするまで、他のすべてのトランザクションはブロックされます。

データ・ストア・レベル・ロックでは、表レベル・ロックより同時実行性を制限されるため、通常、データ・ストア・レベル・ロックは、同時実行性が不要な場合にバルク・ロードなどの初期化処理で有効です。データ・ストア・レベル・ロックを使用すると、同時実行性およびスループットは低下しますが、行レベル・ロックまたは表レベル・ロックよりレスポンス時間が向上します。

異なるトランザクションは、異なるレベルのロックと共存できますが、データ・ストア・レベル・ロックを使用しているトランザクションが1つでも存在すると、同時実行性が低下します。

表レベル・ロック

表レベル・ロックは、トランザクションによってアクセスされる際に表をロックし、文が表の大部分の行にアクセスする場合に有効です。こうした文には、単一のトランザクションで実行される、問合せ、更新、削除、または複数の挿入があります。すべてのSQL文に対して、オプティマイザが、表ロックを使用するタイミングを判断します。また、結合時に表の大部分の行にアクセスする文を複数含むトランザクションを最適化するために、アプリケーションではttOptSetFlag()プロシージャをコールして、オプティマイザで表ロックを使用するようにリクエストできます。

すべてのより粒度の高いロックと同様に、表ロックはスループットを低下させる可能性があるため、表の大部分をロックする必要がある場合、または同時実行性が必要ない場合にのみ使用します。コミット読取り分離レベルの場合、TimesTenでは、ttOptSetFlag()をコールして、アプリケーションによって明示的にリクエストされていないかぎり、読取り操作に対して表レベル・ロックを使用しません。

行レベル・ロック

行レベル・ロックは、トランザクションによってアクセス中の行のみをロックします。同時実行トランザクションが同一表の行にアクセスできるようにすることで、最高の同時実行性を実現できます。通常、行レベル・ロックは、同時実行トランザクションが多数あり、それぞれが同一表の異なる行で処理中の場合に最適です。