| | GeneXus アプリケーションでのロック | |
ここでは、データの読み取りのみ、または読み取りおよび書き込みを行うときに、GeneXus でどのようにロックが処理され、並行性制御が行われるかについて説明します。
読み取りのみの場合 (For Each コマンド、Web Panel オブジェクト、Data Provider オブジェクトなどを使用する場合)、生成される SELECT でロックは行われません。
このような場合には常に排他的ロックが適用されます。たとえば、再編成時にはテーブルが排他的に開かれます。この場合、ほかのプロセスは、読み取りのみであってもテーブルを開くことができません。これに対して、読み取る情報が別の書き込みを行うプログラムによってロックされている場合、表示される値は DBMS によって異なります。古い情報が表示されるか、新しい情報が表示されるかは DBMS 次第です (ナレッジベース内のデータストアレベルにある [ Isolation level ] プロパティで設定が可能です)。
読み取りおよび書き込みの場合
更新を伴う For Each コマンドでは、For Each の開始時に SELECT がロック付きで実行されてから、更新 (UPDATE/SET) が実行されます。ほかのロックと同様に、レコードはコミット (またはロールバック) の実行時に解放されます。
注: 一部の For Each コマンドは最適化され、ロックを行わずに直接 UPDATE を実行します。これは最適化可能なもの (サーバー向けの条件があり、本体に割り当てのみがあるもの) のみが対象です。
For Each の最適化
サーバー側の関数/メソッド
|
|
|
|
|