トランザクションの独立性

トランザクションの独立性により、データベースへの同時接続が複数あったとしても、システムでは一度に1つのトランザクションを処理するように見えるアプリケーションを実現できます。アプリケーションは、Isolation一般接続属性を使用して、接続の分離レベルを設定できます。

同時接続では、異なる分離レベルを使用できます。

分離レベルと同時実行性は反比例します。分離レベルが低いほど、同時実行性は高まりますが、データの非一貫性のリスクが増大します。分離レベルが高いほど、データ一貫性の度合いは高まりますが、同時実行性は損なわれます。

TimesTenでは、次の2つの分離レベルがサポートされています。

コミット読取り分離レベル

読取りアクセスは書込みアクセスをブロックせず、書込みアクセスは読取りアクセスをブロックしないため、コミット読取り分離レベルは同時実行性を高めることができます。

アプリケーションでコミット読取り分離レベルを使用する場合、読取りアクセスで書込みデータの個別のコピーが使用されるため、ロックは必要ありません。コミット読取り分離レベルは、問合せに対する非ブロッキング処理です。書込みアクセスは、コミット読取り分離レベルが使用されている読取りアクセスはブロックしません。コミット読取り分離レベルがデフォルトの分離レベルです。コミット読取り分離レベルがデフォルトの分離レベルです。

TimesTenでは、コミット読取り分離レベルの実装にバージョニングが使用されます。TimesTenの更新操作では、待機せずに、更新する行のシリアライズ可能でない読取り操作を続行できるように、それらの行の新しいコピーが作成されます。

図4-1は、あるアプリケーションでデータのコミット済コピーの読取りが行われ、別のアプリケーションでコミットされていないコピーに対して書込みおよび読取りが行われていることを示しています。

図4-1 コミット読取り分離レベル

図4-1の説明が続きます。
「図4-1 コミット読取り分離レベル」の説明

この分離レベルは、スキャン中の行にアクセスする必要がある他の処理と競合する可能性がある、スキャンの実行時間が長いアプリケーションにとって有効です。ただし、この分離レベルを使用する場合の短所は、トランザクション、あるいは単一の文(たとえば、ネステッド結合の内部ループ)内であっても、繰返し不可能な読取り操作が可能なことです。

この分離レベルを使用している場合、表を操作するDDL文は、その表に対する読取りアクセスと書込みアクセスをブロックできます。たとえば、アプリケーションで表の行を読み取ろうとしても、別のアプリケーションにその表に対してコミットしていないDROP TABLECREATE INDEX、またはALTER TABLE操作が存在すると、読取りを実行できません。さらに、ブロッキング・チェックポイントによって、読取りアクセスと書込みアクセスの両方がブロックされます。

コミット読取り分離レベルでは、マテリアライズド・ビューとそれらのディテール表との一貫性を保証するために、マテリアライズド・ビューのメンテナンス中に必要となる読取りロックを設定します。これらのロックは、トランザクションの終了まで保持されませんが、かわりにマテリアライズド・ビューのメンテナンスが完了した時点で解放されます。

シリアライズ可能分離レベル

アプリケーションでシリアライズ可能分離レベルを使用する場合、ロックがトランザクション内で取得され、読取り操作および書込み操作の両方のトランザクションのコミットまたはロールバックまで保持されます。

そのため、あるトランザクションで読み取られた行は、最初のトランザクションが完了するまで、他のトランザクションから更新または削除することはできません。同様に、あるトランザクションによって挿入、更新または削除された行は、最初のトランザクションが完了するまで、他のトランザクションからはアクセスできません。

この分離レベルは、同時実行性を低下させるかわりに、トランザクション内の繰返し可能な読取り操作と独立性の向上を実現します。データベース・レベル・ロックが選択されている場合、トランザクションでは、シリアライズ可能分離レベルが使用されます。

図4-2は、トランザクションがコミットされるまでロックが保持されることを示しています。

図4-2 シリアライズ可能分離レベル

図4-2の説明が続きます。
「図4-2 シリアライズ可能分離レベル」の説明

シリアライズ可能分離レベルは、最強の分離レベルを必要とするトランザクションに有効です。読取りロックはトランザクションがコミットするまで保持されるため、別のトランザクションによって読み取られるデータを変更する必要がある同時実行アプリケーションでは、ロック・タイムアウトが発生する可能性があります。