Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL の使用法 » データベースの作成 » トランザクションと独立性レベルの使用 » 独立性レベルの選択

 

直列化可能なスケジュール

トランザクションを同時に処理するには、データベース・サーバは 1 つのトランザクションでいくつかのコンポーネント文を実行し、次に他のトランザクションのコンポーネント文を実行してから、最初のトランザクションのオペレーション処理を続行する必要があります。各種トランザクションのコンポーネント・オペレーションをインタリーブする順序を、「スケジュール」と呼びます。

この方法でトランザクションを同時に適用すると、前の項で説明した一貫性が失われる 3 つのケースを含む、さまざまな結果が生じる可能性があります。トランザクションが順次実行された場合、つまり 1 つのトランザクションが完全に終了した後、次のトランザクションが開始された場合、データベースの最終状態が達成されることがあります。トランザクションをある順序で順次実行した結果、データベースが実際のスケジュールと同じ状態になった場合、そのスケジュールは「直列化可能」であるといいます。

直列化可能性は、一般に正当性の基準として受け入れられています。直列化可能なスケジュールは、データベースがトランザクションの同時実行により影響を受けないため、正しいスケジュールとして受け入れられます。

トランザクションの直列化可能性は、独立性レベルの影響を受けます。独立性レベル 3 では、すべてのスケジュールは直列化可能です。デフォルト設定値は 0 です。

直列化可能とは、同時実行性が影響を与えないということ

トランザクションが順次実行されるときでも、データベースの最終状態はこれらのトランザクションが実行される順序によって異なります。たとえば、1 つのトランザクションが特定のセルに値 5 を設定し、別のトランザクションが同じセルに 6 を設定すると、そのセルの最終値は最後に実行されたトランザクションによって決まります。

スケジュールが直列化可能であることがわかっても、トランザクションを最も効率よく実行する順序が決まるわけではありません。同時実行性の影響がないというだけです。トランザクション・セットをある順序で順次実行することによって達成される結果は、すべて正しいと見なされます。

直列化不可能なスケジュールは矛盾を生じさせる

典型的な矛盾のケースで説明した矛盾のケースは、スケジュールが直列化可能でないときに生じる典型的な問題です。いずれのケースでも、すべてのトランザクションが順次実行された場合には起こり得ないような結果を生じさせる方法で文がインタリーブされたため、一貫性が失われました。たとえば、あるトランザクションがあるローにデータを挿入または更新しているときに、別のトランザクションがそのローを選択できる場合、ダーティ・リードが発生します。