並行性およびロック

処理の並行性 とは、複数のアプリケーション処理が、原則的に同時に同一データへのアクセスを行えることをいいます。

プログラム固有のプログラミングインターフェース情報の開始。

あるオーダー・エントリー・アプリケーションを、多くのトランザクションが 同時使用していると仮定します。 各トランザクションは、データを納品書と納品明細の表に挿入し、 顧客についてのデータの表を読み取り、在庫品目についてのデータ を読み取って更新します。 同じデータに対する 2 つの操作 (2 つのトランザクションの同時処理) は、 ほんのマイクロ秒単位で分かれて処理される場合があります。 しかし、ユーザーにとっては、操作は並行しているように見えます。

並行性を制御するDb2理由

並行性を制御することで、更新の消失を回避し、 反復不能読み取りおよびコミットされていないデータへのアクセスなどの望ましくない影響を回避する必要が あります。
更新の消失
並行性を制御しないと、 2 つの処理 A と B が、共にデータベースから同じ行を読み取って、 それからそれぞれが読み取った内容に基づいて、その列の新しい値を計算するよ うなことが起こります。 A がその行を新しい値で更新し、その後で B が同じ行を更新したとすると、A が 行った更新は失われてしまいます。
コミットしていないデータへのアクセス
さらに、並行性を制御していないと、処理 A がデータベースのある値を 更新し、処理 B が、その値がコミットされないうちに、 その値を読み取ってしまう可能性があります。 その後、A の値がコミットされずにバックアウトされる と、B の計算は、コミットされていない (おそらくは正しくない) データに基づいたものになって しまいます。
反復不能読み取り
ある種の処理は、次のような一連のイベントを必要とします。 つまり、A はデータベースからある行を読み取り、 他の SQL 要求の処理に移ります。 その後、A は最初の行を再び読み取り、 最初の時に読み取ったその同じ値を見つけなければなりません。 制御していないと、処理 B が 2 つの読み取りの間に その行を変更してしまう可能性があります。

このような状況が特に許可されない限り、Db2は並行性を制御するためにロックを使用することがあります。

Db2のロックの使用方法

ロックは、Db2リソースを、他のプロセスが同じリソースにアクセスする方法に影響を与えるような方法で、アプリケーション・プロセスに関連付けます。 リソースに関連付けられたプロセスは、ロックを保持している、またはロックを所有していると言われます。 Db2 ロックを使用して、他のプロセスによって変更されたが、まだコミットされていないデータに、どのプロセスもアクセスできないようにします。 XMLおよびLOBロックの場合、 Db2 もロックを使用して、アプリケーションが部分的なデータや不完全なデータにアクセスできないようにしています。

ロックが原因で、中断、タイムアウト、デッドロックなどの状態を含む、パフォーマンスを低下させる競合 が発生する可能性があります。 トランザクション・ロックのサイズ、期間、モード、および目的を知っていると、処理で中断、タイムアウト、またはデッドロックが発生する理由や、競合を防ぐ方法を理解するのに役立ちます。