最近のアクセス:
データ更新のブロッキング

大量のレコードを更新挿入、または削除する必要があり、スループットが問題となる場合には、DBMS へのラウンドトリップを減らすことで解決できることがあります。

データベース更新の操作をブロッキングする (挿入、更新、削除で共通) ことにより、これらをメモリーに格納し、グループとして DBMS に送信します。データベース更新操作のたびに DBMS とやりとりするのではなく、ユーザーが指定した更新操作回数 (N 回) ごとにやりとりを行います。
たとえば、まだ印刷していない請求書すべてを印刷する必要があり、印刷の状態を格納するのに InvoicePrintedFlag が使用されているとします。対応するコードは次のようなものです。このコードは合致するレコードを一度に読み込んで更新します。EndFor に達するたび (逐次) にレコードが DBMS に送信され、DBMS が更新されます。
For each
     where InvoicePrintedFlag = 'N'
       PrintInvoice.Call( InvoiceNumber )
       InvoicePrinterFlag = 'Y'
EndFor
次に示すように Blocking 節を追加すると、サーバーへのラウンドトリップの回数が削減されます。この場合、データベース更新は、EndFor に 100 回達するごとに 1 回のみ送信されます。これは通常、以前のコードよりも迅速です。
For each
     where InvoicePrintedFlag = 'N'
     Blocking 100
         PrintInvoice.Call(InvoiceNumber )
         InvoicePrinterFlag = 'Y'
EndFor
次のように、大量のレコードを同じコードで繰り返し挿入する場合も同様です。
For &i = 1 to &j
       ...
       New Blocking 100
             Att1 = ...
             Att2 = ...
       EndNew
EndFor

適用範囲

この節は DB2 には実装されません。
 

 







サブページ
Created: 14/09/18 03:17 by Admin Last update: 21/05/20 06:18 by Admin
カテゴリ
Powered by GXwiki 3.0