あるプログラムのトランザクションで ArcSDE ジオデータベースのデータを更新し、トランザクションをコミットする前に、別のプログラムが同じデータを読み取ったとします。2 つ目のプログラムは新しいコミットされていないデータを読み取るでしょうか、それとも、古いデータを読み取るでしょうか。その答えは、トランザクションの分離レベルによって異なります。
トランザクションがコミットされていないデータの読み取りを他のプログラムに許可する場合、2 つ目のプログラムは更新されたデータを読み取ります。この場合、2 つ目のプログラムはトランザクションが完了するまでデータの読み取りを待つ必要がないので、パフォーマンスが向上する可能性があります。しかし、これにはトレードオフがあります。2 つ目のプログラムが読み取るデータが最終的にコミットされない場合、2 つ目のプログラムは不正なデータまたは存在しないデータを読み取ることになります。
ユーザーがアプリケーションに最適なオプションを選択できるよう、DBMS は分離レベルを提供します。分離レベルは、後続のプロセスを他の同時実行プロセスからどのように分離するかを定義します。分離レベルはデータベース管理者が設定することができ、データベースのすべてのトランザクションに適用することができます。分離レベルは、アプリケーション内で、または個々のトランザクションを開始する前に設定することもできます。分離レベルによってプロセス間における以下の同時実行に関する振る舞いが定義されます。
- アプリケーションによって読み取り/更新される行を他の同時実行プロセスにどのように提供するか
- 他の同時実行アプリケーションからの更新をアプリケーションにどのように提供するか
DBMS では、4 つの分離レベルのいずれかを設定することができます。次に、分離性の低いものから順にそれらを示します。高い分離性を持つ分離レベルを設定した場合、データ整合性が強化されますが、ロックを保持する期間が長くなるため、同時実行性は低下します。
READ UNCOMMITTED:この分離レベルでは、同時に実行されているトランザクション間の分離性が最も低くなります。トランザクションによって変更され、まだコミットされていないデータを、他のトランザクションが読み取ることができます。
READ COMMITTED:トランザクションはコミットされたデータのみを読み取ります。コミットされていないデータを読み取ることはありません。
REPEATABLE READ:トランザクション内で同じ行が繰り返し読み取られた場合に適用される制限を追加して、同じ行が連続的に読み取られた場合に、その行の値が同じであることを保証します。
SERIALIZABLE:この分離レベルでは、同時に実行されているトランザクション間の分離性が最も高くなります。トランザクションで読み取られるデータはすべて、トランザクションが開始される前にコミットされたもので、トランザクションの実行中に他のトランザクションがコミットした変更が参照されることはありません。
DBMS によって、これらの分離レベルの名前が異なる場合があります。どの分離レベルも同様に機能しますが、重要な違いがいくつかあります。アプリケーションとワークフローを正しく設計するためには、DBMS のロックと同時実行性に分離レベルがどのように影響するのかを理解しなければなりません。詳細については、DBMS のドキュメントをご参照ください。
ArcGIS に分離レベルが適用される仕組みと同時実行性問題の詳細については、「同時実行性とロック」をご参照ください。