IBM Books

管理およびプログラミングの手引き OS/2 版、Windows NT 版、Unix 版


パフォーマンスを向上させる

パフォーマンスを向上させることは、システム・チューニングの重要な部分です。 本章では、Net.Data のパフォーマンスを向上させるための戦略について説明します。本章で説明するトピックは、以下の通りです。

さらに、Web サーバーが正しく調整されていることを確認してください。 Web サーバーのパフォーマンスは、Net.Data がマクロや直接要求を処理する速度には関係なく、応答時間に直接影響を与えます。


Web サーバー API の使い方

CGI を使わず、ICAPI あるいは GWAPI などの Web サーバー API を使って Net.Data を起動すると、パフォーマンスを向上させることができます。 Net.Data が Web サーバー API を使用して実行されている場合は、Net.Data は Web サーバーのプロセス内でスレッドとして実行されます。 Web サーバーの処理はマルチスレッド化されているので、複数の Net.Data 要求を同一のアドレス空間内で同時に処理することができます。そのため、Net.Data を CGI プロセスとして起動する場合のオーバーヘッドがなくなります。

考慮事項: Web サーバー API を使用すると、アプリケーションを分離せずにパフォーマンスを向上させることができます。 Net.Data はマルチスレッド環境で実行されるため、ユーザー作成の言語環境、不適切な呼び出し、またはデータベースの故障などによるエラーは、Web サーバーでの問題発生の原因となり、サーバーをダウンさせることもあります。 Web サーバー API の 1 つを使用するかどうかを決定する場合は、アプリケーションがパフォーマンスを重視するか、アプリケーションの分離を重視するかによって決定します。


FastCGI の使い方

FastCGI は、CGI-BIN の信頼性があり、パフォーマンスが向上しています。 FastCGI を使用すると、API サーバーの速度でマクロを実行できます。また、独立したメモリー空間を使用するという、より信頼性の高い方法を採用しています。 デフォルトでは、Net.Data の起動は CGI で実行します。

Net.Data は、FastCGI をサポートするすべてのサーバー上で FastCGI と共に使用できます。

FastCGI の構成方法を理解するには、FastCGI のための Net.Data の構成 を参照してください。

着信要求の数を処理するためのプロセスを適切な量だけ実行するよう、プロセス構成パラメーターで FastCGI を調整することができます。 たとえば、ある顧客が 1 秒に平均 100 の要求を出し、各要求の処理に 0.5 秒かかったとします。 この場合プロセス・パラメーターは 50 に設定されます。

FastCGI は以下の言語環境でサポートされています。

要件: FastCGI モードで実行する場合には、Oracle および Sybase 言語環境は Live Connection を必要とします。

同時プロセスの数の調整方法:

  1. プロセスの構成パラメーターが定義されている構成ファイルをオープンする。

  2. プロセスの数を指定する構成パラメーター値を次のようにして変更する。

    ここで、num はプロセス数です。


接続管理

Net.Data は、データベースと Java 仮想マシン接続を管理するための Live Connection と呼ぶコンポーネントを提供しています。 Live Connection はパフォーマンスを向上させるための永続的接続を保持します。 Net.Data アクションには、開始に時間がかかるものがあります。 たとえばデータベース照会は、発行前に、 このプロセスの DBMS に対する識別と、データベースへの接続を行わなければなりません。 これは多くの場合、Net.Data マクロがデータベースをアクセスするために必要な処理時間の、大半を占めてしまいます。 開始時間がかかるその他の例としては、Java 仮想マシンです。 このマシンは Java アプリケーション (Java アプレットではありません) を実行するものです。 CGI プログラムはその動作上、Web サーバーへの各要求ごとに相当の開始時間がかかります。 Net.Data は、OS/2、Windows NT、および UNIX オペレーティング・システム上の Live Connection 提供し、永続的接続を保持します。

Live Connection については、以下に示したセクションで説明しています。

Live Connection について

Live Connection は、開始時のオーバーヘッドをなくすことにより、パフォーマンスを劇的に向上させることができます。 これは、開始関数を実行する 1 つ以上のプロセスを連続して実行するからです。 したがってこれらのプロセスは要求が処理されるまで待機します。 Net.Data を CGI プログラムまたは FastCGI プログラムとして、あるいは Web サーバー API のプラグインとして使用する場合は Live Connection を使用することができます。

Live Connection は接続管理プログラムとクライエットで構成されています。 クライエット は、接続管理プログラムが開始するプログラムで、サーバーが実行中は活動状態に保たれます。 クライエットはデータを処理し、初期設定ファイルにおいてキーワード CLIETTE で指定した Net.Data 言語環境と通信します。 クライエットの各タイプごとに、特定の言語環境関数を処理します。たとえば DB2 クライエットは、DB2 データベースに接続し、Net.Data のマクロが Net.Data によって処理される前に、SQL 呼び出しを実行するための操作をセットアップします。 実行可能ファイルは、Live Connection の構成ファイル dtwcm.cnf で指定されています。図 22 は Live Connection、マクロ、および言語環境の間での対話を示しています。

図 22. クライエットを持つ Live Connection
クライエットを持つ Live Connection

以下のセクションでは、Live Connection を詳細に説明します。Live Connection の構成方法を理解するには、Live Connection の構成 を参照してください。

Live Connection の利点

Live Connection を使用した場合の主な利点は次のとおりです。

Live Connection を使用するかどうかの判断

Live Connection を CGI、FastCGI、あるいは API モードで使用すると、データベースと通信することができます。 さらに、アプリケーションが複数のデータベースのデータを要求する場合には、Live Connection の恩恵を受けることがあります。

Live Connection を API プラグインと共に使用すると、多くのシステムでパフォーマンスが向上します。ただし、これはシステムの負荷と構成によって異なります。 使用しているシステムで試行し、最適の構成を見つけだしてください。

多くのアプリケーションでは、Live Connection を使用しなくても、ACTIVATE DATABASE あるいは START DATABASE コマンドを使用してデータベース接続の確立の時間を節約することにより、パフォーマンスを向上させることができます。 データベースが使用するコマンドの詳細は、データベースの資料を参照してください。 また、オペレーティング・システムの資料も参照して、パフォーマンスの向上に役に立つその他のステップがないか調べてみてください。

要件: FastCGI モードおよび API モードで実行する場合には、Oracle および Sybase 言語環境は Live Connection を必要とします。

接続管理プログラムの開始

接続管理プログラムは、Net.Data に付属している独立した実行可能ファイルで、dtwcm という名前が付けられています。 Web サーバーの開始時に接続管理プログラムを開始してください。

接続管理プログラムを開始すると、このプログラムは構成ファイルを読み取り、プロセスのグループを開始します。 各プロセスでは、接続管理プログラムは特定のクライエットの実行を開始します。 Live Connection の構成方法を理解するには、Live Connection の構成 を参照してください。

Windows NT および OS/2 での接続プログラムの開始方法:

  1. コマンド行から <inst_dir>\connect\ ディレクトリーにディレクトリーを変更する。

  2. dtwcm を入力する。

ここで、<inst_dir> は、Net.Data のインストール・ディレクトリーです。

AIX での接続管理プログラムの開始

  1. コマンド行から、/usr/lpp/internet/db2www/db2/ ディレクトリーにディレクトリーを変更する。

  2. dtwcm を入力する。

メッセージ・オプションを指定して接続管理プログラムを開始する方法:

デフォルトでは、接続管理プログラムのメッセージは、表示されないようになっています。 接続管理プログラムのメッセージを表示したい場合は、-d オプションを指定して接続管理プログラムを開始します。

コマンド行から、dtwcm -d を入力します。

-d オプションを指定した場合、再度メッセージを表示させないようにするには、接続管理プログラムを再始動しなければなりません。

接続管理プログラムを、Windows NT のサービスとして、自動的に開始するには、以下のようにします。

Windows NT 上では、接続管理プログラムを、コマンド行からではなく、Windows NT のサービスとして開始させるよう指定することができます。 接続管理プログラムを Windows NT のサービスとして実行すると、マシンを開始するたびに、接続管理プログラムを自動的に開始させることができます。

ヒント : 自動的に接続管理プログラムを開始するようにセットアップする前に、接続管理プログラムをコマンド行から開始し、Live Connection の構成ファイルが正しいことを確認します。

  1. Windows NT のタスクバーから、「スタート (Start) -> 設定 (Settings) -> コントロール・パネル (Control Panel) -> サービス (Services)」と選択する。

  2. Net.Data の接続管理プログラム (Net.Data Connection Manager)」を選択し、次に「開始 (Startup)」ボタンをクリックする。

  3. 自動開始のタイプ (Automatic startup type)」を選択し、「OK」をクリックする。

Net.Data および Live Connection のプロセスの流れ

構成が完了し、データベース、Web サーバー、および接続管理プログラムを開始してからの Net.Data のプロセスは、Live Connection が 使用可能な場合には、一般に次のようなステップを取ります。

  1. Web サーバーが要求を受け取り、FastCGI、CGI または API プロセスのいずれかを開始して Net.Data を実行する。

  2. Net.Data が Net.Data マクロの処理を開始する。

  3. Net.Data が Live Connection を使用する関数呼び出しを検出すると Net.Data は、初期設定ファイルから必要なクライエットのタイプを決定する。 DB2 の場合、クライエットのタイプは、多くの場合、DB2 データベースの名前に基づいた名前になります (たとえば、DTW_SQL:CELDIAL)。

  4. Net.Data が接続管理プログラムにそのタイプのクライエットを要求する。

  5. 接続管理プログラムは、そのタイプの使用可能なクライエットを探す。使用可能なクライエットがない場合、接続管理プログラムはその要求を待ち行列に挿入し、正しいクライエットのタイプが使用可能になるとそれを処理します。

  6. クライエットが使用可能になると、接続管理プログラムは Net.Data に対して、クライエットとの通信方法を指示する。

  7. Net.Data はクライエットに対して関数の処理を依頼する。

  8. Net.Data マクロの処理が完了するまで、このプロセスをステップ 3 から繰り返す。

  9. すべてのクライエットを解放する。

初期設定ファイルでクライエットが指定されており、接続管理プログラムが実行されていない場合は、Net.Data は DLL をロードしてマクロを処理します。 API を使用すると、おそらくエラーが発生します。その場合は、接続管理プログラムを開始しなければなりません。


Net.Data のキャッシング

キャッシングは、アプリケーション・ユーザーにとっては、応答時間の改善に役にたちます。 Net.Data は、高速な検索のために、Web サーバーに要求した結果を、情報のリフレッシュのときまで、ローカルに保管しておきます。 本章では、Net.Data のキャッシングの概念、タスク、および制約事項について説明します。

Web のキャッシングについて

多くのソフトウェア・コンポーネントは、Web アプリケーションに対してキャッシングを実行します。 以下にキャッシング・アプリケーションの例を幾つか示します。

これらのコンポーネントはすべて、独立してキャッシングを実行しますが、全体的な結果としては、ユーザーにとっては応答時間が改善されています。 キャッシュされた項目をリフレッシュする時期を決定するために、Web コンポーネント (ブラウザー、プロキシー・サーバー、および Web サーバー)は、通常、以下のようなさまざまなオプションを考慮に入れます。

Net.Data のキャッシングについて

Net.Data それ自身は、それ自身のキャッシング関数を、Net.Data のマクロにより生成された何度もアクセスされるページおよび関連付けられたデータ項目に提供します。 Net.Data のキャッシュからページを送達することにより、Net.Data のマクロの実行、およびページ作成のためのデータへのアクセスに必要な時間を節約します。

サーバーごとに 1 つのキャッシュ管理プログラムが使用できます。 推奨 : 複数の Net.Data インスタンスに対して 1 つのキャッシュ管理プログラムを使用し、キャッシュ管理プログラムごとに複数のキャッシュを使用します。

図 23 は、Net.Data がキャッシュ管理プログラムを使用して、マクロ・ファイルからの HTML 出力のキャッシュを管理することを示しています。 この出力は、データベースからのデータを組み込むことができます。

図 23. Net.Data のキャッシング
Figure dtwa1100 not displayed.

Net.Data のキャッシングの用語

Net.Data の文書は、以下の用語を使用して、Net.Data のキャッシングを説明します。

キャッシュ
最近アクセスされたデータが入るメモリーの型。同一データに続けてアクセスする場合の速度を上げることが目的。 キャッシュは、ネットワークを介してアクセス可能な、使用頻度の高いデータのローカル・コピーを保留するのに使用される場合が多い。 Net.Data では、Net.Data のマクロが再使用するために、Net.Data により生成される HTML の Web ページを含むローカル・メモリー。 ページをキャッシュに格納することにより、Net.Data はキャッシュ内の情報を再生成する必要がありません。 各キャッシュは、キャッシュ管理プログラムにより管理されます。キャッシュ管理プログラムは、複数のキャッシュの管理をまかせることができ、Net.Data のサーバーの複数インスタンスを 提供することができます。

キャッシュ ID
特定のキャッシュを識別するストリング

キャッシュ管理プログラム
1 台のマシンのキャッシュを管理するプログラム 複数のキャッシュを管理できる。

構成、キャッシュ管理プログラムファイル
ログ記録、トレース、キャッシュ・サイズ、および他のオプションの設定を決定するために、Net.Data によって使用される設定を含むファイル。 キャッシュ管理プログラムの設定および特定のキャッシュ管理プログラムにより管理されるすべてのキャッシュ・ファイルを含みます。 ファイル名は、Net.Data と一緒にパックされている場合、cachemgr.cnf になります。

Net.Data のキャッシュの概念

システム上の HTTP の数、および HTTP サーバーが、Net.Data のそれ自身のコピーを (別々の Net.Data の構成ファイルを使用して) 実行させるかどうかにもよりますが、Net.Data のすべてのコピーを、1 つのキャッシュ管理プログラムあるいは複数のキャッシュ管理プログラムと関連付けることができます。 1 つのキャッシュ管理プログラムは、メモリー内の多くのキャッシュをサポートすることができ、各キャッシュは、キャッシュ ID と呼ばれるキャッシュ識別子を持っています。 図 24 は、1 つのキャッシュ管理プログラムが複数のマクロ・ファイルを取り扱い、2 つのキャッシュを管理しているところを示しています。

図 24. 複数のマクロ・ファイルおよびキャッシュを扱うキャッシュ管理プログラム
Figure dtwa1110 not displayed.

任意の数の項目は、キャッシュ・ページ として知られており、キャッシュ内に配置することができます。 キャッシュ・ページはそれぞれ、一意の識別子を持っており、これにはたとえば URL (Uniform Resource Locator) があります。 ページとは、完全な HTML のページのセグメント、あるいは完全な HTML のページです。

Net.Data がキャッシュ・データへの要求を受け取ると (たとえば、組み込み関数 DTW_CACHE_PAGE から)、以下のステップが行われます。

  1. Net.Data が、キャッシュ管理プログラムに接続する。

  2. Net.Data が、そのデータはキャッシュされているかどうかをチェックする。

  3. Net.Data がキャッシュ管理プログラムから切断される。

キャッシュ管理プログラムは、マクロ・ファイルが正常に処理を終了すると HTML 出力をキャッシュし、これにより正常に生成された Web ページのみがキャッシュされます。 データはブラウザーに送信されてからキャッシュされ、ユーザーに表示されるデータはキャッシュされるデータと同じものになります。

Net.Data にエラーが発生、またはマクロが途中で終了した場合、キャッシュ管理プログラムは以下を行います。

Net.Data のキャッシュの制約事項

Net.Data のキャッシングには、以下の制約事項があります。

機密保護
機密保護は、キャッシュ管理プログラムからは提供されません。 たとえば、あるデータベース・ユーザーがマクロを実行し、何ページものデータベースの結果をキャッシュした場合です。 別のデータベース・ユーザーは、そのキャッシュ・ページを取得することができます。

直接要求
Net.Data の直接要求起動は、Net.Data のキャッシングを使用できません。

Net.Data のキャッシング・インターフェース

Net.Data は、ユーザー・アプリケーションのためのキャッシングの構成とセットアップを行うときに使用する柔軟なインターフェースのセットを提供してくれます。 表 13 は、Net.Data のキャッシング機能を使用するためのさまざまなオプション、およびこれらの機能の説明箇所について説明しています。

表 13. Net.Data のキャッシュ・インターフェース
インターフェース 説明 行き先 ...
キャッシュ管理プログラムの構成オプション ログ記録とトレースなど、キャッシュ管理プログラムのための多くのオプションは、キャッシュ管理プログラムの構成ファイルの、キャッシュ管理プログラムのスタンザで指定することができます。 キャッシュ管理プログラムの定義
キャッシュ構成のオプション Net.Data キャッシュ管理プログラムの単一インスタンスにおいては、多くのキャッシュを定義して、キャッシュ項目を保持することができます。各キャッシュは、サイズと位置、そしてキャッシュ ID といったキャッシュ自身の特性の集合を持っています。これらの特性は、キャッシュ管理プログラムの構成ファイルのキャッシュ・スタンザで定義されます。各スタンザは、キャッシュ ID で識別されます。 キャッシュの定義
Net.Data の初期設定オプション Net.Data およびそれに対応するキャッシュ管理プログラムを別々のシステムで実行する場合は、キャッシュ管理プログラムのシステムとポート番号を、Net.Data の初期設定ファイルで指定します。 キャッシュ管理プログラムの構成変数
Net.Data のキャッシュの組み込み関数 Net.Data のキャッシュの組み込み関数を使用して、Net.Data のキャッシュの内容を操作することができます。 適切なマクロ関数にキャッシュ ID を指定し、最適な特性を持つキャッシュを選択します。 Net.Data 解説書 の組み込み関数の章を参照してください。

キャッシュ管理プログラムのための計画

Net.Data のキャッシュ関数を使用するための計画を立てる場合は、以下の点を考慮しなければなりません。

Net.Data のキャッシングを使用するには、以下のステップを完了しておく必要があります。そのためには、どのようにキャッシングを使用したいのかを知っておかなければなりません。

推奨 : キャッシングを使用する大きなアプリケーションに取りかかる前に、 アプリケーションの制作前に、アプリケーションの計画を立て、プロトタイプを作成することを強くお勧めします。

キャッシュ・エラー

Net.Data に内部エラーが発生し、マクロ・ファイルの処理が完了する前に終了した場合は、キャッシュ管理プログラムは Web ページをキャッシュしません。 キャッシュ管理プログラムは、不完全または Net.Data エラーを含むページをキャッシュしません。 このようなエラーには、マクロの構文エラーおよび SQL エラーがあります。

エラーを含むページは、以下の場合にキャッシュされます。

キャッシュ識別子

アプリケーションのためのキャッシングの設計時に、2 つのタイプの識別子のプランを立てる必要があります。

キャッシュ管理プログラムおよび Net.Data のキャッシュの構成

キャッシュ管理プログラムは、ユーザー・システムにおける 1 つ以上のキャッシュを管理します。 これらのキャッシュはそれぞれ、動的に生成された HTML ページの内容を含んでいます。 キャッシュ管理プログラムおよび、各キャッシュを構成するには、キャッシュ管理プログラムの構成ファイル cachemgr.cnf におけるキーワードの値を更新します。

キャッシュ管理プログラムの構成ファイルには 2 種類のスタンザが含まれます。キャッシュ管理プログラム・スタンザとキャッシュ定義スタンザです。 以下のステップでは、ユーザー・アプリケーションのためのこれら 2 種類のスタンザのカスタマイズ方法について説明します。

キャッシュ管理プログラムの定義

許可済みのキーワードの値を指定して、キャッシュ管理プログラムのスタンザを定義します。 キーワードはすべてオプションです。デフォルト値を受け入れたくない場合以外は、キーワードを指定する必要はありません。

キャッシュ管理プログラムを定義するには、以下を行います。

  1. キャッシュ管理プログラムのログ・ファイルの名前を指定する。 ログは、すべてのキャッシュに対しするすべてのトランザクション活動を表示し、デバッグおよび問題解析のために提供されます。

    デフォルトでは、メッセージをコンソールに書き込みます。

    構文 :

    log=path
    

    ここで、path は、キャッシュ・ファイルのパスおよびファイル名です。

    ヒント : キャッシュごとにログ・ファイルを指定するには、キャッシュ定義スタンザの tran-log キーワードを使用します。

  2. やってくる要求に対してキャッシュ管理プログラムが使用する TCP/IP のポート番号を指定する。このポート番号は、リモート・マシンからキャッシュ管理プログラムに接続する場合のみ使用します。

    この値は、Net.Data の初期設定ファイルの DTW_CACHE_PORT 構成変数で指定されるポート番号と一致していなければなりません。デフォルト値は、以下のようにして決定されます。

    1. キャッシュ管理プログラムは、ibm-cachemgrd という名前に関連付けられている値がないか、パス /etc/services をチェックする。 この値が検出されれば、キャッシュ管理プログラムは、その値を使用します。 値が見つからなければ、キャッシュ管理プログラムは、次の方法を使用します。

    2. キャッシュ管理プログラムは、デフォルトのポート、7175 を使用する。

    構文 :

    port=port_number
    

    ここで、port_number は、一意の TCP/IP ポート番号です。

  3. キャッシュ管理プログラムが、保留読み取りをアクティブにしておかなければならない最大の時間の長さを、秒で指定する。 この時間を過ぎると、キャッシュ管理プログラムは接続を除去します。

    デフォルトは、30 秒です。

    構文 :

    connection-timeout=seconds
    

    ここで、seconds は、保留読み取りをアクティブにしておかなければならない時間の長さに使用する秒数です。

  4. メッセージのログ記録を取るかどうかを指定する。

    デフォルトは、no あるいは off です。

    構文 :

    logging=yes|on|no|off
    

    変数:

    yes|on
    ログ記録が必要であることを示します。

    no|off
    ログ記録を実行しないことを示します。

  5. ログを循環するかどうかを指定する。

    デフォルトは、 no です。yes と指定された場合は、ログのサイズ (下の log-size を参照) が最大になったときに、現行ログが閉じられ、そのファイルは、.old というファイル・タイプを持ち、新規のログがオープンします。 ログ・ファイルは、1 世代分しか保守されません (既存の .old ファイルは上書きされます)。

    構文 :

    wrap-log=yes|no
    

    変数:

    yes
    ログを循環するよう指定します。

    no
    ログを循環しないよう指定します。

  6. 最大サイズをバイトで指定します。wrap-log が指定されている場合は、ログは、その最大サイズまで大きくなることができます。

    デフォルトは、64000 バイトです。

    構文 :

    log-size=bytes
    

    ここで、bytes は、最大サイズのバイト数です。

  7. ログに書き込むメッセージのレベルを指定する。 以下の値は、trace_flag_definitions リストに組み込まれたときに設定されますが、設定項目というものはありません。

    デフォルトでは、キャッシュ管理プログラムの開始およびシャットダウンのメッセージだけがログ記録されます。

    構文 :

    trace-flags=trace_flag_definitions
    

    変数:

    D_ALL
    すべてのトレース・フラグを使用可能にします。

    D_NONE
    すべてのトレース・フラグを使用不可にします。

例: すべてのトレース・フラグを使用可能に指定するトレース・フラグ。

trace=flags=D_ALL

スタンザの例 : 有効な構成マネージャーのスタンザは、以下のようになります。

cache-manager {
log=/u/cached/logs/cached.log
port=7177
connection-timeout=0
logging=yes
wrap-log=yes
log-size=64000
trace-flags=D_ALL
}

キャッシュの定義

許可済みのキーワードの値を指定して、キャッシュ定義スタンザを定義します。ほとんどのキーワードはオプションで、デフォルト値を使用したくない場合以外は、指定する必要はありません。

キャッシュを定義するには、以下を行います。

  1. キャッシュ・ページを保持するパスおよびディレクトリー名。 始動時には、このディレクトリーを含むファイル・システムは、少なくとも、fssize (以下を参照) の値と同じ大きさでなければなりません。そうでないと、キャッシュは開始されません。 以下の値は、絶対パス名として、あるいはキャッシュ管理プログラムが開始したパスに対応する相対パス名として指定することができます。

    必須項目です。

    構文 :

    root=path_name
    

    変数:

    path_name
    キャッシュ・ページが保管されているパスおよびディレクトリーの絶対あるいは相対名です。

  2. キャッシュ管理プログラムが始動したときに、現行キャッシュをアクティブにするかどうかを指定します。

    必須項目ではありません。デフォルトは、yes です。 no に設定されている場合は、キャッシュは、キャッシュ管理プログラムで定義されますが、アクティブにはなりません。 cacheadm コマンドを使えば、後でアクティブにすることができます。

    構文 :

    caching=yes|no
    

    変数:

    yes
    キャッシュ管理プログラムが開始したとき、キャッシュをアクティブにするように指定します。

    no
    キャッシュ管理プログラムが開始したとき、キャッシュをアクティブにしないように指定します。

  3. 現行キャッシュ内のページが、ファイル・システムで使用する最大のスペースを指定します。 スペースの最大量を超えた場合、キャッシュ管理プログラムは、キャッシュが占有するスペースの合計を制限内に持っていくのに十分なページを、最も古いものから順に削除していきます。 この値を大きな値に設定すると、実効的に、エントリーの自動パージを使用不可にすることができます。しかし、ファイル・システムの物理的なスペースを超えてしまうと、 キャッシュに新規のスペースを追加することはできません。

    必須項目ではありません。デフォルトは 0 です (ディスクにはキャッシュしません)。

    構文 :

    fssize=nnB|nnKB|nnM
    

    変数:

    nnB
    バイト数です。たとえば、5000B とします。

    nnKB
    Kバイト数です。たとえば、640KB とします。

    nnMB
    Mバイト数です。たとえば、30MB とします。

  4. このキャッシュ内のすべてのページが使用するメモリーの最大量を指定する。 メモリーの最大量を超えた場合、キャッシュ管理プログラムは、キャッシュが占有するメモリーの合計を制限内に持っていくのに十分なページを、最も古いものから順に削除していきます。 これを大きな値に設定すると、実効的に、ページの自動パージを使用不可にすることができます。しかし cachemgrd プロセスがメモリーを消費しすぎると、オペレーティング・システムは、プロセスを終了することがあります。

    必須項目ではありません。デフォルトは、1MB です。

    構文 :

    mem-size=nnB|nnKB|nnMB
    

    変数:

    nnB
    バイト数です。たとえば、5000B とします。

    nnKB
    Kバイト数です。たとえば、640KB とします。

    nnMB
    Mバイト数です。たとえば、30MB とします。

  5. キャッシュにページを保留しておくことができる最大の時間の長さ。この値を超えると、キャッシュ管理プログラムは、そのページを有効期限切れとしてマークします。しかし、fssize (ページがディスクにキャッシュされている場合) あるいは memsize (ページがメモリーにキャッシュされている場合) の制限に達しない限り、そのページは削除されません。キャッシュ管理プログラムは、memsize あるいは fssize の制限に達した場合は、他のすべてのページに先だって、有効期限切れとしてマークされたページを削除します。lifetime のチェックを、check_expiration キーワードを使って使用不可にすることができます。

    必須項目ではありません。デフォルトは、5 分です。

    構文 :

    lifetime=time_length
    

    変数:

    nnS
    秒数です。たとえば 600S とします。

    nnM
    分数です。たとえば 20M とします。

    nnH
    時間数です。たとえば 30H とします。

  6. キャッシュ・ページを有効期限切れとしてマークし、存続時間の検査を実行するかどうかを指定する。

    必須項目ではありません。デフォルトは、yesで、デフォルトの存続時間の長さは 60 秒です。 次の値は、時間の長さに設定することもできます。yes という値を指示し、項目をキャッシュに保留しておくことができる最大の時間の長さを宣言します。 no に設定すると、キャッシュ・ページは、有効期限切れとマークされることはありません。そして、存続時間検査は実行されません。

    構文 :

    check-expiration=yes|nnS|nnM|nnH|no
    

    変数:

    yes
    キャッシュ管理プログラムは存続時間検査を実行し、キャッシュ・ページを有効期限切れとしてマークするように指定します。

    nnS
    秒数です。たとえば 600S とします。

    nnM
    分数です。たとえば 20M とします。

    nnH
    時間数です。たとえば 30H とします。

    no
    キャッシュ管理プログラムは存続時間検査を実行しないように、そしてキャッシュ ・ページを有効期限切れとしてマークしないように指定します。

  7. キャッシュ・ページが、メモリー・キャッシュ内に占有することができる最大のスペース量を指定する。 ページがメモリーにとって大きすぎる場合は、ファイル・キャッシュがチェックされます。 十分なスペースが存在する場合は、キャッシュ管理プログラムは、そのかわりに、そのキャッシュ・ページをファイル・キャッシュに格納します。 ページがファイル・キャッシュに収まりきれない場合は、キャッシングの実行は失敗します。 ページは、datum_memory_limit 値 (cacheobj-memory-limit) よりも小さいけれども、キャッシュには十分なスペースがない場合、最も古いキャッシュ・スペースがメモリー・キャッシュから削除され、新規のページが収容されます。

    必須項目ではありません。デフォルトは、1KB です。

    構文 :

    datum-memory-limit (cacheobj-memory-limit)=nnB|nnKB|nnMB
    

    変数:

    nnB
    バイト数です。たとえば、5000B とします。

    nnKB
    Kバイト数です。たとえば、640KB とします。

    nnMB
    Mバイト数です。たとえば、30MB とします。

  8. キャッシュ・ページが、ファイル・キャッシュ内に占有することができる最大のスペース量を指定します。 ページは datum_disk_limit 値 よりも小さいけれども、キャッシュにはスペースが残っていない場合、最も古いキャッシュ・ページがファイル・キャッシュから削除され、新規のページが収容されます。

    必須項目ではありません。デフォルトは、1KB です。

    構文 :

    datum-disk-limit (cacheobj-space-limit)=nnB|nnKB|nnMB
    

    変数:

    nnB
    バイト数です。たとえば、5000B とします。

    nnKB
    Kバイト数です。たとえば、640KB とします。

    nnMB
    Mバイト数です。たとえば、30MB とします。

  9. 統計レコードの作成間隔の時間を指定する。 0 に設定すると、統計レコードは書き込まれません。

    必須項目ではありません。デフォルトは、0 です (統計はありません)。

    構文 :

    stat-interval = nnS|nnM|nnH
    

    変数:

    nnS
    秒数です。たとえば 600S とします。

    nnM
    分数です。たとえば 1M とします。

    nnH
    時間数です。たとえば 3H とします。

  10. 現行キャッシュの統計のログを記録するために使用されるパスおよびファイルの名前を指定する。

    stat-interval の値が、0 よりも大きい場合に必須です。

    構文 :

    stat-files=filename
    

    ここで、filename は、ログを記録する統計ファイルのパス名です。

  11. 統計がログ・ファイルに書き込まれるごとに、統計のカウンターを 0 にリセットするかどうかを指定する。

    必須項目ではありません。デフォルトは、yes です。

    構文 :

    reset-stat-counters=yes|no
    

    変数:

    yes
    統計カウンターをリセットします。

    no
    統計カウンターをリセットしません。

  12. キャッシュごとにトランザクションのログを保持するパスおよびファイル名を定義する。 キャッシュのトランザクション・ログのファイルは、キャッシュ管理プログラムのログ・ファイルとは別のもので、後者は、キャッシュ管理プログラムの活動全体のログを記録するのに使用されます。

    必須項目です。特に指定されていなければ、キャッシュのトランザクション・ログは作成されません。

    構文 :

    tran-log=filename
    

    ここで、filename は、キャッシュごとのトランザクション・ログのパスおよびファイル名です。

  13. キャッシュ管理プログラムが最初に開始したときに、キャッシュのトランザクション・ログをオンにするかどうかを指定する。 このパラメーターは、tran-log パラメーターを介して、有効なトランザクション・ログのファイルが指定されていなければ、無視されます。 有効な tran-log 値が、キャッシュ管理プログラムの構成ファイルで指定されておれば、キャッシュ管理プログラムのデーモンが実行されている間は、cacheadm コマンドを使用して、トランザクションのログ記録をアクティブにしておくことができます。

    必須項目ではありません。デフォルトは、no です。

    構文 :

    tran-logging=yes|on|no|off
    

    変数:

    yes|on
    ログが必要であることを示します。

    no|off
    ログ記録を実行しないことを示します。

  14. トランザクション・ログを循環するかどうかを指定する。

    必須項目ではありません。デフォルトは、yes です。 yes として指定されている場合は、現行ログは、最大サイズ (tran-log-size を参照) に達したときに閉じられ、.old というファイル・タイプを持ちます。そして、新規のログがオープンします。ログは、1 世代分しか保守されません (既存の .old ファイルは上書きされます)。

    構文 :

    wrap-tran-log=yes|no
    

    変数:

    yes
    ログを循環することを示します。

    no
    ログを循環しないことを示します。

  15. wrap-tran-log が指定されている場合は、トランザクション・ログを大きくすることができる最大サイズをバイトで指定します。

    必須項目ではありません。デフォルトは、64000 です。

    構文 :

    tran-log-size=bytes
    

    ここで、bytes は、最大サイズのバイト数です。

スタンザの例 : キャッシュに対する有効なキャッシュ定義スタンザ

test1
{
caching=on
fssize=5MB
mem-size=10MB
lifetime=6000000
check-expiration=150
datum-memory-limit=5KB
datum-disk-limit=500KB
stat-interval=60
reset-stat-counters=no
root=/u/cached/chaches/cache0
stat-files=/u/cached/logs/chache0.stats
tran-log=/u/cached/logs/cache0.log
tran-logging=yes
wrap-tran-log=yes
tran-log-size=100k
}

キャッシュ管理プログラムの開始と停止

以下のセクションでは、キャッシュ管理プログラムの開始および停止方法について説明します。

キャッシュ管理プログラムの開始

cachemgrd コマンドを使用して、キャッシュ管理プログラムのデーモンを開始します。

構文 :

>>-cachemgrd----c--config_file---------------------------------><
 

パラメーター:

cachemgrd
コマンドのキーワード。

config_file
キャッシュ管理プログラムおよびキャッシュ管理プログラムにより管理される各キャッシュが定義されるファイルの名前を指定します。 Net.Data の製品と一緒に出荷された構成ファイルは、cachemgr.cnf です。

例:

cachemgrd -c myconfig.cfg

キャッシュ管理プログラムの停止

キャッシュ管理プログラムを停止するには、cacheadm コマンドを使用します。

構文 :

>>-cacheadm----+---------------------+---+-------------------+-->
               '-hostname--hostname--'   '-ポート--port_num--'
 
>----terminate-------------------------------------------------><
 

パラメーター:

cacheadm
コマンドのキーワード。

hostname
キャッシュが実行されているマシンが、cacheadm コマンドが発行されるマシンと異なっている場合、そのマシンの名前を指定します。

port_num
キャッシュのポート番号が、デフォルト (7175) と異なっている場合は、キャッシュのポート番号を指定します。

terminate
キャッシュ管理プログラムの停止を指定します。

例:

cacheadm hostname host1 port 7178 terminate 

Web ページのキャッシング

DTW_CACHE_PAGE 組み込み関数を使用して、Web ページをキャッシュすることができます。 Net.Data は、マクロ・ファイルに DTW_CACHE_PAGE 関数を見付けると、キャッシュ管理プログラムに接続し、マクロ・ファイルの HTML 出力をマクロをメモリーにキャッシュし始めます。 Net.Data がマクロの処理を正常に終了すると、HTML 出力がブラウザーに送られ、 キャッシュ管理プログラムは 1 トランザクションの出力をキャッシュします (図 25 を参照)。

図 25. キャッシングを開始する DTW_CACHE_PAGE 関数
Figure dtwa1109 not displayed.

ページのキャッシング

Net.Data の DTW_CACHE_PAGE() 組み込み関数を使用して、Net.Data によって生成されたページを、キャッシュに書き込むように指定します。

DTW_CACHE_PAGE() 関数は、ページがすでにキャッシュに存在しない、または有効期限が切れていると判断すると、マクロ・ファイルからの出力をすべてキャッシュします。 ページがキャッシュに存在していなかったり、指定された経過時間よりも古い場合は、Net.Data は出力ページをブラウザーに送り戻し、マクロ実行からの新規の出力ページを生成し、そのページをキャッシュに格納します。

キャッシュ管理プログラムがキャッシュされたページを検出し、ページがまだ現行のものであれば、キャッシュ内容が表示され、Net.Data はマクロを終了します。 このような振る舞いにより、Web ページがキャッシュから検索された後に必要のない処理が行われないようにしています。

パフォーマンスのためのヒント : DTW_CACHE_PAGE() をマクロの最初のステートメントあるいは、最初のステートメントの 1 つとして配置し、マクロ・ファイルの実行コストを最小にします。

ページをキャッシュするには、以下を行います。

  1. マクロ・ファイルの HTML ブロックでは、HTML のコーディングに先立ち、以下の関数ステートメントを挿入します。
    @DTW_CACHE_PAGE("cache_id", cached_page_id, "age", status)
    

    この関数を使用して、Net.Data がこのステートメント以降のマクロからのすべての HTML 出力をキャッシュするように指定します。 すべての HTML 出力をキャッシュしたい場合には、このステートメントを、マクロ・ファイルの冒頭部分に置きます。

    パラメーター:

    cache_id
    ページが配置されるキャッシュを識別するストリング。 キャッシュ ID をマクロ、あるいはマクロのグループに関連付けることができます。

    cached_page_id
    後に @DTW_CACHE_PAGE により行うキャッシュ要求時に、キャッシュ内のページを識別するのに使用される識別子を含むストリング。たとえばページの URL。

    age
    ページが古くなったと考えられるときを指定する、秒で示される時間の長さを含むストリング変数。要求されたページが、age の値よりも長くキャッシュ内にある場合は、Net.Data は、マクロを実行し、ページを再生成し、そして、生成されたページをキャッシュして、古くなったページを置き換えます。要求されたページが、age の値よりも短いか同じ時間キャッシュ内にある場合は、Net.Data は、キャッシュからページを取得し、そのページをブラウザーに送信します。この場合、Net.Data は即時にマクロの実行を終了します。

    status
    ページのキャッシュに成功したかそうでないかを示すために、Net.Data によって戻されるストリング変数。

例:

%HTML(cache_example) {
 %IF (customer == "Joe Smith")
 @DTW_CACHE_PAGE("mymacro.d2w", "http://www.mypage.org", "-1", status)
  %ENDIF
 ...
<html>
 
<head>
 <:title>This is the page title</title>
</head>
 
 <body>
 <center>
 <h3>This is the Main Heading</h3>
 <p>It is $(time). Have a nice day!
</body>
 
 </html>
 %}

高度なキャッシング: キャッシュの動的な判別

DTW_CACHE_PAGE() 関数は、マクロ・ファイル内のその位置からキャッシングを開始します。 通常は、関数をマクロファイルの先頭に配置することでパフォーマンスが向上し、すべての HTML 出力をキャッシュするようにできます。

高度なキャッシング・アプリケーションの場合、 マクロ・ファイルの先頭ではなく処理途中の特定のポイントでキャッシュを行うようにする必要がある場合には、 DTW_CACHE_PAGE() 関数を HTML 出力セクションに配置することができます。 たとえば、 照会または関数呼び出しから戻される行数に基づきキャッシングを行うか判断する場合があります。

例: 予想される HTML 出力のサイズに応じてキャッシュの決定を行うため、関数は HTML ブロックに配置します。

% DEFINE { ...%}
 
...
 
%FUNCTION(DTW_SQL) count_rows(){
  select count(*) from customer
%REPORT{
%ROW{
  @DTW_ASSIGN(ALL_ROWS, V1)
%}
%}
%}
 
%FUNCTION(DTW_SQL) all_customers(){
 select * from customer
%}
 
%HTML (OUTPUT) {
<html>
<head>
 <title>This is the customer list
</head>
 <body>
 
@count_rows()
 
 %IF ($(ALL_ROWS) > "100")
 @DTW_CACHE_PAGE("mymacro.d2w", "http://www.mypage.org", "-1", status)
  %ENDIF
 
@all_customers()
 
</body>
 </html>
%}

この例では、ページは予想される HTML 出力サイズに基づきキャッシュまたは検索されます。 データベース・テーブルの行が 100 以上の場合のみ、HTML 出力ページはキャッシュの対象となります。 Net.Data は常に、 マクロの実行後に OUTPUT ブロックのテキスト This is the customer list をブラウザーに送信します。 テキストはキャッシュされません。 関数呼び出しに続く行の @count_rows() は、 IF ブロックの条件が満たされるとキャッシュまたは検索されます。 2 つの部分により完全な Net.Data 出力ページが形成されます。

CACHEADM コマンド

以下のタスクに CACHEADM コマンドを使用します。

すべてのパラメーターは、省略して、最小の固有の文字集合にすることができます。

構文 :

>>-cacheadm----+---------------------+---+-------------------+-->
               '-hostname--hostname--'   '-ポート--port_num--'
 
>-----+-activate-------------------------------------+---------->
      +-deactivate-----------------------------------+
      +-flags--flags---------------------------------+
      +-flush----------------------------------------+
      +-query--+-all-------+-------------------------+
      |        '-url--url--'                         |
      +-purge----url--url----------------------------+
      +-statistics--+-off--------------------------+-+
      |             '-on--+----------------------+-' |
      |                   '-interval--interval---'   |
      '-terminate------------------------------------'
 
>-----+--------------------+-----------------------------------><
      '-cacheid--cache_id--'
 

パラメーター:

activate
指定キャッシュをアクティブにします。キャッシュがすでにアクティブの場合は、キャッシュ管理プログラムは何もしません。

cache_id
ページが配置されるキャッシュを識別するストリング変数。 たとえば、cache1 となります。

deactivate
指定キャッシュを非アクティブにします。キャッシュがすでに非アクティブの場合は、キャッシュ管理プログラムは何もしません。 すべての保留操作は完了し、新規の操作は受け付けられません。 最後の操作が完了すると、キャッシュ管理プログラムは、キャッシュを非アクティブとしてマークします。

flags
リストされたフラグを、オンあるいはオフに切り替えるかどうかを指定します。

D_ALL
すべてのトレース・フラグを、オンにします。

D_NONE
すべてのトレース・フラグを、オフにします。

flush
cache_id パラメーターで指定されるキャッシュをフラッシュします。この flush パラメーターには、このパラメーターが必要です。 このパラメーターにより、指定のキャッシュからすべての項目が無条件に削除されます。

hostname
キャッシュが実行されているマシンが、cacheadm コマンドが発行されるマシンと異なっている場合、そのマシンの名前を指定します。 たとえば、myhost とします。

port_num
キャッシュのポート番号が、デフォルト (7175) と異なっている場合は、キャッシュのポート番号を指定します。この番号は、システム内では一意的でなければなりません。

purge
キャッシュからパージする特定のページを指定します。 url が指定されている場合は、キャッシュ管理プログラムは、url と一致するキーを持つページをパージします。 従属関係が指定されている場合は、キャッシュ管理プログラムは、関連付けられている従属関係を持つすべての項目をパージし、各項目のキーを、標準出力ストリームである stdout に書き込みます。

query
ユーザーが指定する以下のパラメーターに応じて、キャッシング・データを戻します。

statistics
特定のキャッシュの統計収集のログ記録を使用可能にするか使用不可にします。これは、cache_id パラメーターを必要とします。 インターバルが、statistics パラメーターを on にして指定されている場合は、Net.Data は、更新インターバルを、指定された秒数に設定あるいはリセットします。

terminate
キャッシュ管理プログラムの停止を指定します。

tranlogging
特定のキャッシュのトランザクション・ログの記録を使用化にするか使用不可にします。これは、cache_id パラメーターを必要とします。 このパラメーターが有効になるのは、キャッシュの有効なトランザクション・ログが、tran-log パラメーターと一緒に、キャッシュ管理プログラムの構成ファイルで指定されている場合だけです。

url
Web サーバー上のファイルの位置を指定する URL (Universal Relative Location) アドレス。 たとえば、http:www.ibm.com/mydir/page1 となります

キャッシュ・ログ

内部操作に関する各種統計が保持され、オプションでキャッシュ・ログに書き込むことができます。 それそれのキャッシュごとにログを別個に保持するか、 またはすべての統計を同一のログに書き込むことができます。 このセクションでは、 以下のキャッシュ・ログに関するトピックを説明します。

ログの構成

統計のログを作成するには、キャッシュ管理プログラムの構成ファイルを構成する必要があります。

ログの構成方法

キャッシュ管理プログラム構成ファイルのキャッシュ・スタンザに、 stat-files および stat-interval キーワードを指定します。

統計設定の変更は、 キャッシュ管理プログラムを停止、再構成、または再始動しなくても行うことができます。

統計収集設定の変更方法

cacheadm statistics コマンドを指定します。ただし、 cacheadm statistics コマンドによる変更は、 キャッシュ管理プログラムの再始動時に保存されません。

キャッシュ・ログ・フォーマット

統計ログは ASCII プレーン・ファイルで、 表計算またはデータベース・プログラムにより処理またはインポートができます。 以下の 3 種類のレコードが書き込まれます。


エラー・ログ・レベルの設定

Net.Data はエラー・ログを提供してくれるので、Net.Data システムでのエラー問題あるいはパフォーマンス上の問題をモニターすることができます。

Net.Data のエラー・ログを使用している場合、多数のメッセージがエラー・ログに書き込まれていると、システムのパフォーマンスに影響がでることに気が付くかもしれません。 たとえば、Net.Data が検出できないマクロにユーザーがアクセスするたびに、Net.Data は出力としてメッセージをエラー・ログに渡します。

パフォーマンスへの影響を小さくするために、DTW_LOG_LEVEL キーワードを使用して Net.Data マクロに設定されているエラー・ログのログ記録レベルをチェックしてみてください。 このレベルが WARNING に設定されている場合は、そのレベルを ERROR に下げてみてください。パフォーマンスが若干向上します。あるいは OFF にしてみてください。この場合はパフォーマンスが大きく向上します。


言語環境の最適化

以下のセクションでは、Net.Data 提供の言語環境の使用時にパフォーマンスを向上させるための手法について説明します。

REXX 言語環境

以下のヒントを使用して Net.Data アプリケーションのパフォーマンスを向上させてください。

SQL 言語環境

以下のセクションでは、データベースと SQL 言語環境に関するパフォーマンス手法をいくつか説明します。 DB2 のパフォーマンスの考慮事項について理解するには、Web サイト http://review.software.ibm.com/data/db2/performance にアクセスしてください。(英語版)

データベース手法

以下に示した要約は、データベース・アクセスを改善する最も簡単な手法をいくつか概説したものです。

SQL 言語環境の手法

パフォーマンスを向上させるには、以下の SQL 言語環境手法を使用します。

システムおよび Perl 言語環境

入力専用パラメーターは、システムまたは Perl 言語環境が呼び出すプログラムに直接渡してください。 それには、グローバルな Net.Data 変数を定義し、それを参照します。外部のプログラムおよび Perl スクリプトの場合、%EXEC ステートメントのコマンド行でその変数を参照します。 インラインの Perl スクリプトの場合は、その変数を Perl のソースで直接参照します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]