バージョン 6.3.3
 —  オペレーション  —

Natural バッファプール

このドキュメントでは、次のトピックについて説明します。


全般的な情報

Natural バッファプールは、同じコンピュータ上で Natural オブジェクトにアクセスする複数の Natural プロセス間で Natural オブジェクトを共有するのに使用されます。 バッファプールとは、コンパイルされた Natural プログラムを実行に備えて配置するストレージエリアのことです。 Natural ユーザーからの Natural オブジェクト要求に応じて、プログラムはバッファプールにまたはバッファプールから移動されます。

Natural ではリエントラントな Natural オブジェクトコードが生成されるので、Natural プログラムの 1 つのコピーを複数のユーザーが同時に実行できます。 この目的のため、各オブジェクトは、呼び出し元が呼び出すたびにロードされるのではなく、システムファイルから Natural バッファプールに 1 回だけロードされます。

以下では次のトピックについて説明します。

バッファプール内のオブジェクト

バッファプール内のオブジェクトは、プログラムやダイアログなどの実行可能なオブジェクトです。 実行可能なオブジェクトのうち、ローカルデータエリア、パラメータデータエリア、およびコピーコードは、コンパイル目的でのみバッファプールに配置されます。

Natural オブジェクトがバッファプールにロードされると、ディレクトリエントリと呼ばれるコントロールブロックがこのオブジェクトに割り当てられます。 このコントロールブロックには、オブジェクトの名前、オブジェクトが属するライブラリまたはアプリケーション、オブジェクトの取得元のデータベース ID および Natural システムファイル番号などの情報と、いくつかの統計情報(例えば、プログラムを同時に実行しているユーザーの数)が含まれます。

リソース処理

リソースは、リソースが Natural システムファイル(FUSER など)のライブラリにあり、名前がファイル拡張子も含めて 32 文字以内の場合に、バッファプールにロードされます。

環境変数 NATGUI_BMP に割り当てられたディレクトリにあるか名前が 32 文字を超えるリソースは、アクセスされるたびに Natural プロセスに直接ロードされます(つまり、リソースはバッファプールにロードされません)。

複数のバッファプール

個別の要件に応じて、同じコンピュータ上で同じ Natural バージョンの異なるバッファプールを同時に実行できます。

コンフィグレーションユーティリティで、各バッファプールに対して同期を有効にできます(後述の「バッファプールの設定」も参照)。 同じシステムファイルからのオブジェクトを含み、同期が有効にされているすべてのバッファプールは、自動的に同期されます。

重要:
システムファイルが共有ドライブにある場合は、同期はサーバー上のファイルシステムが NTFS の場合にのみ実行されます。

同期が有効にされている場合:複数のバッファプールにロードされたオブジェクトが 1 つの Natural プロセスで変更されると、まずそのオブジェクトは無効としてマークされます。 オブジェクトがプロセスで使用されなくなると、バッファプールから削除されます。 次回このオブジェクトがプロセスで要求されると、オブジェクトはバッファプールに再度ロードされます。

バッファプールへのオブジェクトの保存

ユーザーがプログラムを実行すると、バッファプールマネージャが呼び出されます。 プログラムがすでにバッファプールロードされているかどうかを確認するためにディレクトリエントリが検索されます。 まだロードされていない場合は、コピーが適切なライブラリから取得され、バッファプールにロードされます。

Natural オブジェクトをバッファプールにロードしているときに、新しいディレクトリエントリがこのプログラムを識別するために定義され、新しくロードするオブジェクトを収容するために、現在実行中ではない 1 つまたは複数の他の Natural オブジェクトがバッファプールから削除されることがあります。

この目的のために、バッファプールは現在どのユーザーがどのオブジェクトを使用しているかの記録を管理し、それにより、ユーザーがそのオブジェクトを解放しないで Natural を終了する状況を検出します。 他のアプリケーションに属している新しいオブジェクトを収容するために、未使用または期限切れのオブジェクトがダイナミックに削除されます。

読み取り専用バッファプール

読み取り専用バッファプールとは、読み取りアクセスのみを許可する特別なバッファプールです。 オブジェクトが読み取り専用のバッファプールにない場合、Natural はエラー 82(オブジェクトが見つからない)を発行します。 システムファイルで見つからないオブジェクトの取得が試行されないため、システムファイルおよびバッファプールに対するすべてのロック操作がスキップされます。 アカウントデータは収集されません。 読み取り専用バッファプールにアクセスできるユーザー数に制限はありません。

読み取り専用バッファプールは、コンフィグレーションユーティリティで定義されます(後述の「バッファプールの設定」も参照)。 バッファプールが読み取り専用バッファプールとして定義されている場合は、ユーザー最大数に定義されている値は無視されます。

ユーティリティ NATBPSRV は、セマフォを読み取り専用バッファプールに割り当てません。 ただし、Natural パラメータファイルの位置に <バッファプール名>.PRL ファイル内のプリロードリストが必要です。これは、ローカルコンフィグレーションファイルに定義されます(インストール指定)。 例えば、読み取り専用バッファプールの名前が "ROBP" である場合は、ファイル名は ROBP.PRL になります。

プリロードリストは、ライブラリ SYSBPM にある Natural プログラム CRTPRL(プリロードリストリストの作成)を使用して生成できます。 このプログラムは、バッファプールの内容を抽出してバッファプールの既存のプリロードデータとマージします。

PRL ファイル内のプリロードリストには、コンマ区切りデータのレコードが次の形式で含まれています。

database-ID,file-number,library,object-name,kind,type

ファイル内のキーワードは、NATBPMON ユーティリティの DIR コマンドで表示されるキーワードと同じ意味を持ちます。

ディレクトリ記述レコード(オブジェクトの種類は、オブジェクトが FILEDIR.SAG の一部であることを意味する "D")を除き、すべてのキーワードに値が割り当てられている必要があります。 例:

キーワード NATBPSRV によってバッファプールにロードされる内容
222,111,MY_LIB,PGM1,G,P データベース 222 およびファイル番号 111 にあるライブラリ MY_LIB のプログラム PGM1 のオブジェクトコード
222,113,*,*,D FNAT = 222,113 にある LIBDIR.SAG
222,111,MY_LIB,*,D FUSER = 222,111 にあるライブラリ MY_LIBFILEDIR.SAG

読み取り専用バッファプールの使用には、アプリケーションの詳細が認識されていなければならないという短所があります(不明オブジェクトはロードできないため)。 これは、アプリケーションで必要なすべてのオブジェクトをプリロードリストに指定する必要があることを意味します。 まれに、アプリケーションで必要なオブジェクトの完全なセットを事前に決定できることがあります。

セカンダリ読み取り/書き込みバッファプール

Natural では、読み取り専用バッファプールをプライマリバッファプールとして実行できます。 このようなバッファプールは変更できません。 読み取り専用バッファプールにないオブジェクトはロードできません。 オブジェクトが読み取り専用のバッファプールにない場合、Natural はエラー 82(オブジェクトが見つからない)を発行します。 これを回避するには、Natural を実行時にセカンダリ標準バッファプール(読み取り/書き込みアクセス可能)に接続し、そこで不明オブジェクトをアクティブにします。 ダイナミックパラメータ BPID2 は、セカンダリバッファプールを識別します。

読み取り専用バッファプールの場合を除き、セカンダリバッファプールに接続できるユーザー数には上限があり、セカンダリバッファプールがアクセスされるたびにセマフォを使用したオブジェクトのロックが実行されます。

読み取り専用バッファプールのプリロードリストは、ライブラリ SYSBPM にあるプログラム CRTPRL を使用して、セカンダリ読み取り/書き込みバッファプールの内容を読み取り専用バッファプールのプリロードリストとマージすることによって更新/拡張できます。

代替の読み取り専用バッファプール

読み取り専用バッファプールには、コンフィグレーションユーティリティで代替バッファプールの名前を定義できます(後述の「バッファプールの設定」も参照)。

読み取り専用バッファプールにのみ使用できる、NATBPMON ユーティリティの SWAP コマンドを使用して、読み取り専用バッファプールに "現在使用されていない" というタグを付けることができます。 現在使用されていないバッファプールに接続されたすべての Natural セッションは、このバッファプールから切断され、代替バッファプールに接続されます。ただしこれは、代替バッファプールも読み取り専用バッファプールの場合に限られます。 Natural が新しいオブジェクトのロードを試行するとき(例えば、CALLNAT または RETURN ステートメントの実行時)、または Natural がスタックに配置されたコマンドの解釈を試行するときに、1 つのバッファプールから別のバッファプールへのスワップが実行されます。 現在使用されていないというタグが付けられているバッファプールの IPC リソース(共有メモリセグメント)は、NATBPMON ユーティリティの SWAP コマンドを発行した後に削除できます。 この機能により、Natural セッションを中止せずに、バッファおよびその内容を別の読み取り専用バッファプールの更新された内容と交換できます。

制限

Natural バッファプールの使用時に考慮する必要がある最低限の制限は以下のとおりです。

Top of page

バッファプールの設定

バッファプール割り当ては、ローカルコンフィグレーションファイルに保存されています。 バッファプールを設定するには、コンフィグレーションユーティリティを使用して、ローカルコンフィグレーションファイルに特定の値を指定する必要があります。 これらの値のリストについては、『コンフィグレーションユーティリティ』ドキュメントの「バッファプール割り当て」を参照してください。

Top of page

Natural バッファプールサービスの使用

Natural は、PC の起動時に Windows サービスの Software AG Natural n.n Buffer Pool Service を使用してバッファプールサーバーを起動します。

Natural のインストール時に、デフォルトバッファプール NATBP が設定されます。 NATBP は、Natural 起動時のデフォルトバッファプール名としても使用されます(別のバッファプールを定義するには、プロファイルパラメータ BPID を使用します)。

必要に応じて、サービス設定を変更できます。 これについては、以降のトピックを参照してください。

バッファプールサービスコマンド

Natural bin ディレクトリに保存されている natbpsvc.exe ファイルは、サービスコマンドを実行するのに使用されます。

次のサービスコマンドは、Windows のコマンドプロンプトウィンドウで指定できます。

コマンド 説明
NATBPSVC INSTALL mode
バッファプールサービスをインストールします。 mode は、次のいずれかです。
manual デフォルトです。 サービスがインストールされ、手動で開始する必要があります(START コマンドを使用するか、Windows で Software AG Natural n.n Buffer Pool Service を開始することによって行います)。
automatic サービスがインストールされ、PC の起動時に自動的に起動します。
NATBPSVC CREATE buffer-pool-name サービスによって開始されるバッファプールを新規作成します。 サービスは、指定された名前を持つバッファプールが Natural パラメータファイルに定義されているかどうかをチェックします。
NATBPSVC START サービス(停止している場合)、および start パラメータが "yes" に設定されている(SET コマンドを参照)すべての作成されたバッファプール(CREATE コマンドを参照)を開始します。
NATBPSVC START buffer-pool-name 指定バッファプールを開始します。 サービスが(PC の起動時に自動的に、またはユーザーによって手動で)開始されていなかった場合は、エラーメッセージが表示されます。
NATBPSVC SET buffer-pool-name start=mode
サービスの開始時に指定バッファプールを開始するかどうかを定義します。 mode は、次のいずれかです。
yes バッファプールが開始されます。
no デフォルトです。 バッファプールは開始されません。
NATBPSVC STOP サービスを停止し、以前に開始されたすべてのバッファプールを停止します。
NATBPSVC STOP buffer-pool-name 指定バッファプールを停止します。
NATBPSVC SHOW サービス用に定義されたすべてのバッファプールの設定パラメータを表示して、サービスの開始時にこれらのバッファプールを開始するかどうかを示します。
NATBPSVC SHOW buffer-pool-name 指定バッファプールの設定パラメータを表示して、サービスの開始時にこのバッファプールを開始するかどうかを示します。
NATBPSVC STATUS サービス用に定義されたすべてのバッファプールのステータスを表示して、これらのバッファプールがアクティブか非アクティブかを示します。
NATBPSVC STATUS buffer-pool-name 指定バッファプールのステータスを表示して、このバッファプールがアクティブか非アクティブかを示します。
NATBPSVC DELETE buffer-pool-name 指定バッファプールをサービスから削除します。
注意:
デフォルトのバッファプール NATBP は削除しないでください。削除すると、Natural が正常に機能しなくなる可能性があります。
NATBPSVC REMOVE サービスをシステムから削除します。

例:独自のバッファプールを使用した Natural の開始

この例では、MYBP という名前の新しいバッファプールを作成し、新しいバッファプールで Natural を開始する方法について説明します。

Start of instruction set独自のバッファプールで Natural を開始するには

  1. コンフィグレーションユーティリティを使用して、ローカルコンフィグレーションファイルに追加のバッファプールを MYBP という名前で定義します。 『コンフィグレーションユーティリティ』ドキュメントの「バッファプール割り当て」を参照してください。

    注意:
    この例では、デフォルトバッファプール NATBP に定義された値と同じ値を使用できます。

  2. Windows のコマンドプロンプトウィンドウを起動します。

  3. natbpsvc.exe ファイルが保存されている Natural bin ディレクトリに移動します。

  4. 次のコマンドを入力して、バッファプールを MYBP という名前で作成します。

    NATBPSVC CREATE MYBP

    次の情報が表示されます。

    %NATBPSVC-I: Natural n.n Buffer Pool Service
    %NATBPSVC-I: New buffer pool 'MYBP' created
    %NATBPSVC-I: Natural n.n Buffer Pool Service
    

    重要:
    指定した名前のバッファプールがローカルコンフィグレーションファイルにまだ定義されていない場合は、対応するメッセージが代わりに表示されます。 次の手順に進む前に、ローカルコンフィグレーションファイルにバッファプールを定義してください。

  5. 次のコマンドを入力して、サービスの開始時にバッファプールが開始されるように定義します。

    NATBPSVC SET MYBP start=yes

    次の情報が表示されます。

    %NATBPSVC-I: Natural n.n Buffer Pool Service
    %NATBPSVC-I: Configuration successfully set
    %NATBPSVC-I: Natural n.n Buffer Pool Service
    
  6. 次のコマンドを入力して、バッファプールを直ちに開始します(サービスを再スタートする必要はありません)。

    NATBPSVC START MYBP

    次の情報が表示されます。

    %NATBPSVC-I: Natural n.n Buffer Pool Service
    %NATBPSVC-I: Send request to Natural n.n Buffer Pool Service
    %NATBPSVC-I: Buffer pool 'MYBP' started
    %NATBPSVC-I: Natural n.n Buffer Pool Service
    
  7. 次のコマンドを入力して、サービス用に現在定義されているすべてのバッファプールのステータスを表示します。

    NATBPSVC STATUS

    次の情報が表示されます。

    %NATBPSVC-I: Natural n.n Buffer Pool Service
    %NATBPSVC-I: Send request to Natural n.n Buffer Pool Service
    %NATBPSVC-I:    MYBP is active
                    NATBP is active
    %NATBPSVC-I: Natural n.n Buffer Pool Service
    
  8. 次のようにダイナミックパラメータ BPID を使用して、Natural を開始します。

    natural BPID=MYBP

Top of page

ユーティリティ NATBPSRV を使用したバッファプールの作成

バッファプールの作成には、ユーティリティ NATBPSRV を使用します。

バッファプールサーバーは、Natural バッファプールサービスによって自動的に起動されます。

注意:
ユーティリティ NATBPSRV を使用すると、他のバッファプールユーザーの作業を破損する可能性があるので、すべての Natural ユーザーがこのユーティリティにアクセスできるようにはしないでください。

NATBPSRV は、バッファプールが必要とするリソースを割り当て、バッファプール用の恒久的な通信機能(共有メモリとセマフォ)を作成します。 リソースと機能に必要な指定は、コンフィグレーションユーティリティで行います(「バッファプールの設定」を参照)。

デフォルトでは、バッファプール NATBP が開始されます。 他のバッファプールを開始するには、次の NATBPSRV コマンド行オプションで名前を指定します。

NATBPSRV BP = buffer-pool-name

Top of page

バッファプールのモニタリング

バッファプールモニタでは、バッファプールの操作中の動作を監視します。 バッファプールモニタは、コンピュータ上で Natural を停止しなければならないときにバッファプールをシャットダウンするのにも使用できます。

バッファプールモニタでは、Natural バッファプールの現在の状態に関する情報が収集されます。

同じコンピュータ上で複数のバッファプールがアクティブになっていて、複数のバッファプールにロードされたオブジェクトが Natural プロセスで変更されると、オブジェクトはその Natural プロセスが接続先されているバッファプールからのみ削除されます。 変更されたオブジェクトが、それが現在ロードされている同じコンピュータ上の他のバッファプールからも削除されるようにするには、コンフィグレーションユーティリティでバッファプールの同期を有効にします。

Natural では、2 つのバージョンのバッファプールモニタを使用できます。グラフィカルユーザーインターフェイスと、コマンド行バージョンの NATBPMON ユーティリティです。

バッファプールモニタの異なるバージョンの使用方法については、「GUI バージョンのバッファプールモニタの使用」および「コマンド行バージョンのバッファプールモニタの使用(NATBPMON)」を参照してください。

Top of page

トラブルシューティング

このセクションでは、Natural バッファプールの使用時に発生する可能性のある問題とその解決方法について説明します。

以下は、典型的なコマンド出力の例と、実行中に発生した問題に関する説明です。

問題

Natural または Natural バッファプールモニタを起動できない。

以降の例では、Natural 管理者またはユーザーが経験する可能性がある最も一般的な問題について説明します。 これらの問題は、Natural または NATBPMON ユーティリティを起動するときにバッファプールが非アクティブな場合に発生します。

解決策

Natural バッファプールサービスの使用」の説明に従って、バッファプールサービスを開始します。

Top of page