バッファ サイズ初期化パラメータ

エンタープライズ ジオデータベースの SERVER_CONFIG システム テーブルには、転送バッファの初期化パラメータとして MINBUFSIZE、MAXBUFSIZE、および MINBUFOBJECTS の 3 つがあります。

ArcSDE サービス(アプリケーション サーバ)とクライアント アプリケーション間でのデータ転送には、ストリームが使用されます。ストリームはテーブルまたはレイヤへのクエリのための通信メカニズムの役割を果たします。ストリームは、ネットワーク スタックに構造を渡す前のコンテナとして、メモリ構造(転送バッファ)を使用します。

ArcSDE ストリームを作成する際、プロセスはクライアントとサーバの両方で転送バッファを割り当てます。転送バッファは、レコードを個別に送信するのではなく、ベクタ データ レコードを蓄積してネットワーク経由で一括送信することにより、入出力(I/O)を削減し、パフォーマンスを向上させます。

レコードは ArcSDE アプリケーション サーバ プロセスの転送バッファに蓄えられ、アプリケーションがデータベースにクエリを実行するときに、クライアントの転送バッファに送信されます。あるいは、レコードは ArcSDE クライアントの転送バッファに蓄えられ、アプリケーションがデータベースにデータを書き込むときに、ArcSDE サーバ プロセスの転送バッファに送信されます。

転送バッファのパラメータ

これらのパラメータの組み合わせは、クライアントのリクエストのたびにバッファが送信されるのを防ぐための最小閾値となります。リクエストされたクエリによってデータを取得している場合でも、バッファのデータは MINBUFOBJECTS または MINBUFSIZE に達するまで送信されません。すべてのデータがバッファに配置されたら、データはこれらの閾値に達していなくてもクライアントに転送されます。最初にチェックされるのは MINBUFOBJECTS です。

MINBUFOBJECTS パラメータは、転送バッファをストリーム経由で送信するためのレコードの最小数で、デフォルト値は 512 です。これは最小値でもあります。Esri のテストでは、このパラメータに 512 よりも大きい値を設定しても、パフォーマンス上のメリットはないことが判明しています。

MINBUFSIZE パラメータは、MAXBUFSIZE の半分を超える値に設定しないでください。MINBUFSIZE の値が大きすぎると、クライアントにバッファが転送されるまでの待ち時間が長くなる可能性があります。MAXBUFSIZE が 64KB で、MINBUFSIZE が 56KB の場合、転送バッファの閾値に達するまでデータはクライアントに送信されません。最小値は 4,096 バイトです。

MAXBUFSIZE パラメータは、各転送バッファに割り当てられるメモリの合計量を表します。転送バッファは MAXBUFSIZE に達した時点でレコードの蓄積を停止し、クライアントにレコードを送信するためのリクエストを待ち受けます。バッファのサイズを増やす前に、サーバ上に十分なメモリが搭載されていることを確認してください。そうしないと、過剰なページングによってパフォーマンスが低下するおそれがあります。たとえば、デフォルト値では、各バッファに 64KB が割り当てられます。100 人のユーザが接続した場合、各 gsrvr プロセスには、システム メモリを合計で 6.4MB 消費するバッファが 1 つ含まれます。MAXBUFSIZE の値を倍にすると、12.8MB のメモリが消費されることになります。

データ転送シーケンス

クエリに応じてデータが蓄積されている間、ArcGIS はデータ行の数が MINBUFOBJECTS パラメータの値に達したかどうかを確認します。クエリの処理がまだ完了していないが、MINBUFOBJECTS 閾値に達していて(要求された数の行が揃っていて)、クライアントがデータを待ち受けている場合、データは送信されます。クエリの処理がまだ完了しておらず、MINBUFOBJECTS 閾値に達していない、という場合、ArcSDE はデータのサイズが MINBUFSIZE の値に達したかどうかを確認します。そうでなければ、バッファへのデータの取り出し(バッファリング)が続行されます。

バッファリングの開始

MINBUFSIZE の値に達していて、クライアントが待機している場合、データはクライアントに送信されます。

MINBUFFSIZE 閾値に達した場合

クライアントが待機していないが、データの取得が依然として続いている場合、バッファリングは MINBUFSIZE の値を超えても続行されます。

クライアントが待機していない場合でもバッファリングを続行

バッファリングは、リクエストされたデータがすべてバッファに配置されたか、クライアントがデータを待機しているか、MAXBUFSIZE の値に達するまで続行されます。MAXBUFSIZE の値に達すると、バッファリングは停止します。

クライアントがデータをリクエスト
MAXBUFSIZE に達した場合

関連トピック

5/10/2014