ジェネリックバッファ 

ジェネリックバッファでは、テーブルの 1 つのレコードがアクセスされると、ジェネリックキー項目がこのレコードに一致するバッファ内の全レコードがロードされます。ジェネリックキーは、左寄せされたテーブルの一次キーの一部です。

以下の例では、テーブル SCOUNTER から赤で強調表示されたレコードがプログラムにより読み込まれます。テーブルがジェネリックにバッファされた場合は、ジェネリックキー項目 (MANDT および CARRID) が一致する全レコードがバッファにロードされます。

フルバッファリングを使用する場合

処理を行うのに特定のジェネリック領域のみが必要な場合には、テーブルをジェネリックバッファリングしてください。

クライアント依存でフルバッファリングが行われたテーブルは、アプリケーションサーバでは同時に全クライアントで作業を行うことはできないので自動的にジェネリックバッファリングが行われます。クライアント項目がジェネリックキーとなります。

言語依存のテーブルに対してもジェネリックバッファリングを行うようお奨めします。通常、アプリケーションサーバ上で必要なのは 1 つの言語のレコードだけです。この場合、ジェネリックキーには言語項目までのまたは言語項目を含むすべてのキー項目が含まれます。

ジェネリックキーの定義方法

ジェネリックバッファリングでは、適切なジェネリックキーを定義することが重要です。

ジェネリックキーが小さすぎる場合は、バッファ内には複数の非常に大きい領域が含まれることになります。このような場合には、アクセスによってバッファにロードされるデータが多くなりすぎることがあります。

ジェネリックキーが大きすぎる場合は、バッファ内には大量の小さいジェネリック領域が含まれることになります。これにより、バッファされた各ジェネリック領域に対して管理エントリが指定されるのでバッファのパフォーマンスが低下する場合があります。あまりにも頻繁にアクセスを行うと、テーブルのジェネリックキーが完全に定義されないため、バッファを迂回してデータベースに直接アクセスされる場合もあります。各ジェネリック領域のレコードが数個のときは、テーブル全体をバッファリングする方が効率的です。

ジェネリックキーのうち使用されるのは 64 バイトだけです。 64 バイト以上の長さのジェネリックキーを指定することは可能ですが、 64 バイトを超える部分はジェネリック領域の登録に使用されません。

バッファデータへのアクセス

テーブルが完全指定のジェネリックキー項目でアクセスされる場合は、テーブルにはジェネリックバッファのみが有効です。 SELECT 命令でジェネリックキーの項目に値が割り当てられていないときは、データベースから直接読み込まれ、バッファは使用されません。

バッファ内にないジェネリック領域に完全指定のジェネリックキーでアクセスすると、その領域をロードするためのデータベースアクセスが生じます。テーブルの指定領域内にレコードが含まれていない (" レコードがありません ") 場合には、バッファ内のその領域は非存在とマークされます。この領域が再び必要な場合は、データベースにアクセスする必要はありません。