パフォーマンスを向上させることは、システム・チューニングの重要な部分です。 本章では、Net.Data のパフォーマンスを向上させるための戦略について説明します。本章で説明するトピックは、以下の通りです。
さらに、Web サーバーが正しく調整されていることを確認してください。 Web サーバーのパフォーマンスは、Net.Data がマクロや直接要求を処理する速度には関係なく、応答時間に直接影響を与えます。
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 は、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 を必要とします。
同時プロセスの数の調整方法:
ここで、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 は、開始時のオーバーヘッドをなくすことにより、パフォーマンスを劇的に向上させることができます。 これは、開始関数を実行する 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 を使用した場合の主な利点は次のとおりです。
接続を再使用すると、新規に接続を作成するよりも効率的になります。 一般に、小さな SQL ステートメントを要求したり (たとえば、100000 より少ない行のデータベースに対する簡単な照会)、あるいはデータベース接続が難しい場合 (たとえばリモート・サーバー)、接続時間はかなり長くなります。
Live Connection では、1 つの Net.Data マクロを同時に複数のデータベースに接続できます。 これが可能なのは、各データベースは固有のクライエットを持っており、したがって Net.Data は単に複数のクライエットと通信するだけだからです。
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 での接続プログラムの開始方法:
ここで、<inst_dir> は、Net.Data のインストール・ディレクトリーです。
AIX での接続管理プログラムの開始
メッセージ・オプションを指定して接続管理プログラムを開始する方法:
デフォルトでは、接続管理プログラムのメッセージは、表示されないようになっています。 接続管理プログラムのメッセージを表示したい場合は、-d オプションを指定して接続管理プログラムを開始します。
コマンド行から、dtwcm -d を入力します。
-d オプションを指定した場合、再度メッセージを表示させないようにするには、接続管理プログラムを再始動しなければなりません。
接続管理プログラムを、Windows NT のサービスとして、自動的に開始するには、以下のようにします。
Windows NT 上では、接続管理プログラムを、コマンド行からではなく、Windows NT のサービスとして開始させるよう指定することができます。 接続管理プログラムを Windows NT のサービスとして実行すると、マシンを開始するたびに、接続管理プログラムを自動的に開始させることができます。
ヒント : 自動的に接続管理プログラムを開始するようにセットアップする前に、接続管理プログラムをコマンド行から開始し、Live Connection の構成ファイルが正しいことを確認します。
構成が完了し、データベース、Web サーバー、および接続管理プログラムを開始してからの Net.Data のプロセスは、Live Connection が 使用可能な場合には、一般に次のようなステップを取ります。
初期設定ファイルでクライエットが指定されており、接続管理プログラムが実行されていない場合は、Net.Data は DLL をロードしてマクロを処理します。 API を使用すると、おそらくエラーが発生します。その場合は、接続管理プログラムを開始しなければなりません。
キャッシングは、アプリケーション・ユーザーにとっては、応答時間の改善に役にたちます。 Net.Data は、高速な検索のために、Web サーバーに要求した結果を、情報のリフレッシュのときまで、ローカルに保管しておきます。 本章では、Net.Data のキャッシングの概念、タスク、および制約事項について説明します。
多くのソフトウェア・コンポーネントは、Web アプリケーションに対してキャッシングを実行します。 以下にキャッシング・アプリケーションの例を幾つか示します。
これらのコンポーネントはすべて、独立してキャッシングを実行しますが、全体的な結果としては、ユーザーにとっては応答時間が改善されています。 キャッシュされた項目をリフレッシュする時期を決定するために、Web コンポーネント (ブラウザー、プロキシー・サーバー、および Web サーバー)は、通常、以下のようなさまざまなオプションを考慮に入れます。
Net.Data それ自身は、それ自身のキャッシング関数を、Net.Data のマクロにより生成された何度もアクセスされるページおよび関連付けられたデータ項目に提供します。 Net.Data のキャッシュからページを送達することにより、Net.Data のマクロの実行、およびページ作成のためのデータへのアクセスに必要な時間を節約します。
サーバーごとに 1 つのキャッシュ管理プログラムが使用できます。 推奨 : 複数の Net.Data インスタンスに対して 1 つのキャッシュ管理プログラムを使用し、キャッシュ管理プログラムごとに複数のキャッシュを使用します。
図 23 は、Net.Data がキャッシュ管理プログラムを使用して、マクロ・ファイルからの HTML 出力のキャッシュを管理することを示しています。 この出力は、データベースからのデータを組み込むことができます。
Net.Data の文書は、以下の用語を使用して、Net.Data のキャッシングを説明します。
システム上の HTTP の数、および HTTP サーバーが、Net.Data のそれ自身のコピーを (別々の Net.Data の構成ファイルを使用して) 実行させるかどうかにもよりますが、Net.Data のすべてのコピーを、1 つのキャッシュ管理プログラムあるいは複数のキャッシュ管理プログラムと関連付けることができます。 1 つのキャッシュ管理プログラムは、メモリー内の多くのキャッシュをサポートすることができ、各キャッシュは、キャッシュ ID と呼ばれるキャッシュ識別子を持っています。 図 24 は、1 つのキャッシュ管理プログラムが複数のマクロ・ファイルを取り扱い、2 つのキャッシュを管理しているところを示しています。
図 24. 複数のマクロ・ファイルおよびキャッシュを扱うキャッシュ管理プログラム
任意の数の項目は、キャッシュ・ページ として知られており、キャッシュ内に配置することができます。 キャッシュ・ページはそれぞれ、一意の識別子を持っており、これにはたとえば URL (Uniform Resource Locator) があります。 ページとは、完全な HTML のページのセグメント、あるいは完全な HTML のページです。
Net.Data がキャッシュ・データへの要求を受け取ると (たとえば、組み込み関数 DTW_CACHE_PAGE から)、以下のステップが行われます。
キャッシュ管理プログラムは、マクロ・ファイルが正常に処理を終了すると HTML 出力をキャッシュし、これにより正常に生成された Web ページのみがキャッシュされます。 データはブラウザーに送信されてからキャッシュされ、ユーザーに表示されるデータはキャッシュされるデータと同じものになります。
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 つのタイプの識別子のプランを立てる必要があります。
キャッシュ管理プログラムは、ユーザー・システムにおける 1 つ以上のキャッシュを管理します。 これらのキャッシュはそれぞれ、動的に生成された HTML ページの内容を含んでいます。 キャッシュ管理プログラムおよび、各キャッシュを構成するには、キャッシュ管理プログラムの構成ファイル cachemgr.cnf におけるキーワードの値を更新します。
キャッシュ管理プログラムの構成ファイルには 2 種類のスタンザが含まれます。キャッシュ管理プログラム・スタンザとキャッシュ定義スタンザです。 以下のステップでは、ユーザー・アプリケーションのためのこれら 2 種類のスタンザのカスタマイズ方法について説明します。
許可済みのキーワードの値を指定して、キャッシュ管理プログラムのスタンザを定義します。 キーワードはすべてオプションです。デフォルト値を受け入れたくない場合以外は、キーワードを指定する必要はありません。
キャッシュ管理プログラムを定義するには、以下を行います。
デフォルトでは、メッセージをコンソールに書き込みます。
構文 :
log=path
ここで、path は、キャッシュ・ファイルのパスおよびファイル名です。
ヒント : キャッシュごとにログ・ファイルを指定するには、キャッシュ定義スタンザの tran-log キーワードを使用します。
この値は、Net.Data の初期設定ファイルの DTW_CACHE_PORT 構成変数で指定されるポート番号と一致していなければなりません。デフォルト値は、以下のようにして決定されます。
構文 :
port=port_number
デフォルトは、30 秒です。
構文 :
connection-timeout=seconds
デフォルトは、no あるいは off です。
構文 :
logging=yes|on|no|off
変数:
デフォルトは、 no です。yes と指定された場合は、ログのサイズ (下の log-size を参照) が最大になったときに、現行ログが閉じられ、そのファイルは、.old というファイル・タイプを持ち、新規のログがオープンします。 ログ・ファイルは、1 世代分しか保守されません (既存の .old ファイルは上書きされます)。
構文 :
wrap-log=yes|no
変数:
デフォルトは、64000 バイトです。
構文 :
log-size=bytes
デフォルトでは、キャッシュ管理プログラムの開始およびシャットダウンのメッセージだけがログ記録されます。
構文 :
trace-flags=trace_flag_definitions
変数:
例: すべてのトレース・フラグを使用可能に指定するトレース・フラグ。
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 }
許可済みのキーワードの値を指定して、キャッシュ定義スタンザを定義します。ほとんどのキーワードはオプションで、デフォルト値を使用したくない場合以外は、指定する必要はありません。
必須項目です。
構文 :
root=path_name
変数:
必須項目ではありません。デフォルトは、yes です。 no に設定されている場合は、キャッシュは、キャッシュ管理プログラムで定義されますが、アクティブにはなりません。 cacheadm コマンドを使えば、後でアクティブにすることができます。
構文 :
caching=yes|no
変数:
必須項目ではありません。デフォルトは 0 です (ディスクにはキャッシュしません)。
構文 :
fssize=nnB|nnKB|nnM
変数:
必須項目ではありません。デフォルトは、1MB です。
構文 :
mem-size=nnB|nnKB|nnMB
変数:
必須項目ではありません。デフォルトは、5 分です。
構文 :
lifetime=time_length
変数:
必須項目ではありません。デフォルトは、yesで、デフォルトの存続時間の長さは 60 秒です。 次の値は、時間の長さに設定することもできます。yes という値を指示し、項目をキャッシュに保留しておくことができる最大の時間の長さを宣言します。 no に設定すると、キャッシュ・ページは、有効期限切れとマークされることはありません。そして、存続時間検査は実行されません。
構文 :
check-expiration=yes|nnS|nnM|nnH|no
変数:
必須項目ではありません。デフォルトは、1KB です。
構文 :
datum-memory-limit (cacheobj-memory-limit)=nnB|nnKB|nnMB
変数:
必須項目ではありません。デフォルトは、1KB です。
構文 :
datum-disk-limit (cacheobj-space-limit)=nnB|nnKB|nnMB
変数:
必須項目ではありません。デフォルトは、0 です (統計はありません)。
構文 :
stat-interval = nnS|nnM|nnH
変数:
stat-interval の値が、0 よりも大きい場合に必須です。
構文 :
stat-files=filename
ここで、filename は、ログを記録する統計ファイルのパス名です。
必須項目ではありません。デフォルトは、yes です。
構文 :
reset-stat-counters=yes|no
変数:
必須項目です。特に指定されていなければ、キャッシュのトランザクション・ログは作成されません。
構文 :
tran-log=filename
ここで、filename は、キャッシュごとのトランザクション・ログのパスおよびファイル名です。
必須項目ではありません。デフォルトは、no です。
構文 :
tran-logging=yes|on|no|off
変数:
必須項目ではありません。デフォルトは、yes です。 yes として指定されている場合は、現行ログは、最大サイズ (tran-log-size を参照) に達したときに閉じられ、.old というファイル・タイプを持ちます。そして、新規のログがオープンします。ログは、1 世代分しか保守されません (既存の .old ファイルは上書きされます)。
構文 :
wrap-tran-log=yes|no
変数:
必須項目ではありません。デフォルトは、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 -c myconfig.cfg
キャッシュ管理プログラムを停止するには、cacheadm コマンドを使用します。
構文 :
>>-cacheadm----+---------------------+---+-------------------+--> '-hostname--hostname--' '-ポート--port_num--' >----terminate-------------------------------------------------><
パラメーター:
例:
cacheadm hostname host1 port 7178 terminate
DTW_CACHE_PAGE 組み込み関数を使用して、Web ページをキャッシュすることができます。 Net.Data は、マクロ・ファイルに DTW_CACHE_PAGE 関数を見付けると、キャッシュ管理プログラムに接続し、マクロ・ファイルの HTML 出力をマクロをメモリーにキャッシュし始めます。 Net.Data がマクロの処理を正常に終了すると、HTML 出力がブラウザーに送られ、 キャッシュ管理プログラムは 1 トランザクションの出力をキャッシュします (図 25 を参照)。
図 25. キャッシングを開始する DTW_CACHE_PAGE 関数
Net.Data の DTW_CACHE_PAGE() 組み込み関数を使用して、Net.Data によって生成されたページを、キャッシュに書き込むように指定します。
DTW_CACHE_PAGE() 関数は、ページがすでにキャッシュに存在しない、または有効期限が切れていると判断すると、マクロ・ファイルからの出力をすべてキャッシュします。 ページがキャッシュに存在していなかったり、指定された経過時間よりも古い場合は、Net.Data は出力ページをブラウザーに送り戻し、マクロ実行からの新規の出力ページを生成し、そのページをキャッシュに格納します。
キャッシュ管理プログラムがキャッシュされたページを検出し、ページがまだ現行のものであれば、キャッシュ内容が表示され、Net.Data はマクロを終了します。 このような振る舞いにより、Web ページがキャッシュから検索された後に必要のない処理が行われないようにしています。
パフォーマンスのためのヒント : DTW_CACHE_PAGE() をマクロの最初のステートメントあるいは、最初のステートメントの 1 つとして配置し、マクロ・ファイルの実行コストを最小にします。
ページをキャッシュするには、以下を行います。
@DTW_CACHE_PAGE("cache_id", cached_page_id, "age", status)
この関数を使用して、Net.Data がこのステートメント以降のマクロからのすべての HTML 出力をキャッシュするように指定します。 すべての HTML 出力をキャッシュしたい場合には、このステートメントを、マクロ・ファイルの冒頭部分に置きます。
パラメーター:
例:
%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----+---------------------+---+-------------------+--> '-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--'
パラメーター:
他のプログラムは、all オプションを使用して、結果をフォーマットあるいは解釈します。 各行には、以下の情報が含まれます。
パフォーマンスのためのヒント : オプション cache query all は、パフォーマンスに大きな影響を与えるので、あまり使わないようにします。
内部操作に関する各種統計が保持され、オプションでキャッシュ・ログに書き込むことができます。 それそれのキャッシュごとにログを別個に保持するか、 またはすべての統計を同一のログに書き込むことができます。 このセクションでは、 以下のキャッシュ・ログに関するトピックを説明します。
統計のログを作成するには、キャッシュ管理プログラムの構成ファイルを構成する必要があります。
ログの構成方法
キャッシュ管理プログラム構成ファイルのキャッシュ・スタンザに、 stat-files および stat-interval キーワードを指定します。
統計設定の変更は、 キャッシュ管理プログラムを停止、再構成、または再始動しなくても行うことができます。
統計収集設定の変更方法
cacheadm statistics コマンドを指定します。ただし、 cacheadm statistics コマンドによる変更は、 キャッシュ管理プログラムの再始動時に保存されません。
統計ログは ASCII プレーン・ファイルで、 表計算またはデータベース・プログラムにより処理またはインポートができます。 以下の 3 種類のレコードが書き込まれます。
mm/dd/yy hh:mm:ss id Initialization: interval n seconds
変数:
mm/dd/yy hh:mm:ss id Termination
変数:
mm/dd/yy hh:mm:ss id statistics
変数:
フィールド番号 | 内容 | 説明 | カウンターをゼロに再度初期化 |
---|---|---|---|
1 | 読み取り | キャッシュに対して実行された読み取り操作の回数 | はい |
2 | 書き込み | キャッシュに対して実行された書き込み操作の回数 | はい |
3 | クローズ | キャッシュ内のオブジェクトに対して実行されたクローズ操作の回数 | はい |
4 | オープン読み取り | キャッシュ内のオブジェクトに対して実行されたオープン読み取り操作の回数 | はい |
5 | オープン書き込み | キャッシュ内のオブジェクトに対して実行されたオープン書き込み操作の回数 | はい |
6 | オープン書き込み照会 | キャッシュ内のオブジェクトに対して実行されたオープン書き込み照会操作の回数 | はい |
7 | 読み取りヒット | キャッシュ内のオブジェクトに対する読み取りヒットの回数 | はい |
8 | 書き込みヒット | キャッシュ内のオブジェクトに対する書き込みヒットの回数 | はい |
9 | 書き込み照会ヒット | キャッシュ内のオブジェクトに対する書き込み照会ヒットの回数 | はい |
10 | 初期化 | このキャッシュで確立された新規セッションの数 | はい |
11 | 終了 | このキャッシュで終了したセッションの数 | はい |
12 | パージ | このキャッシュから削除されたオブジェクトの数 | いいえ |
13 | 使用メモリー | キャッシュのメモリー部分のオブジェクトが使用するメモリー量 | いいえ |
14 | 使用ディスク | キャッシュのディスク部分のオブジェクトが使用するディスク容量 | いいえ |
15 | 使用可能メモリー | キャッシュのメモリー部分のオブジェクトが使用可能なメモリー量 | いいえ |
16 | 使用可能ディスク | キャッシュのディスク部分のオブジェクトが使用可能なディスク・スペース容量 | いいえ |
17 | メモリー・オブジェクト・カウント | キャッシュのメモリー部分のオブジェクト数 | いいえ |
18 | ファイル・オブジェクト・カウント | キャッシュのディスク部分のオブジェクト数 | いいえ |
19 | セッション・カウント | キャッシュに対して現在活動状態のセッション数 | いいえ |
Net.Data はエラー・ログを提供してくれるので、Net.Data システムでのエラー問題あるいはパフォーマンス上の問題をモニターすることができます。
Net.Data のエラー・ログを使用している場合、多数のメッセージがエラー・ログに書き込まれていると、システムのパフォーマンスに影響がでることに気が付くかもしれません。 たとえば、Net.Data が検出できないマクロにユーザーがアクセスするたびに、Net.Data は出力としてメッセージをエラー・ログに渡します。
パフォーマンスへの影響を小さくするために、DTW_LOG_LEVEL キーワードを使用して Net.Data マクロに設定されているエラー・ログのログ記録レベルをチェックしてみてください。 このレベルが WARNING に設定されている場合は、そのレベルを ERROR に下げてみてください。パフォーマンスが若干向上します。あるいは OFF にしてみてください。この場合はパフォーマンスが大きく向上します。
以下のセクションでは、Net.Data 提供の言語環境の使用時にパフォーマンスを向上させるための手法について説明します。
以下のヒントを使用して Net.Data アプリケーションのパフォーマンスを向上させてください。
以下のセクションでは、データベースと SQL 言語環境に関するパフォーマンス手法をいくつか説明します。 DB2 のパフォーマンスの考慮事項について理解するには、Web サイト http://review.software.ibm.com/data/db2/performance にアクセスしてください。(英語版)
以下に示した要約は、データベース・アクセスを改善する最も簡単な手法をいくつか概説したものです。
たとえば、EDUCLVL をハーフワードの整数値 (SMALLINT) とします。次のように指定します。
... WHERE EDUCLVL < 11 AND EDUCLVL >= 2
次のような指定はしないでください。
... WHERE EDUCLVL < 1.1E1 AND EDUCLVL > 1.3
たとえば、EMPNO が CHAR(6) で、DEPTNO が CHAR(3) とします。次のように指定します。
... WHERE EMPNO > '000300' AND DEPTNO < 'E20'
次のような指定はしないでください。
... WHERE EMPNO > '000300 ' AND DEPTNO < 'E20 '
... WHERE LASTNAME LIKE 'J%SON%'
ただし、文字ストリングの先頭で使用すると、LIKE パターンは、走査する行数を制限するために LASTNAME 列で定義されている索引を DB2 が使用できなくなります。 たとえば、以下のような場合です。
... WHERE LASTNAME LIKE '%SON'
これらの記号は文字ストリングの先頭では使用しないでください。特に、大きな表にアクセスする場合には使用しないでください。
パフォーマンスを向上させるには、以下の SQL 言語環境手法を使用します。
重要: | カーソル位置が要求間で保持されないため、Net.Data は要求ごとに照会を再発行します。 |
入力専用パラメーターは、システムまたは Perl 言語環境が呼び出すプログラムに直接渡してください。 それには、グローバルな Net.Data 変数を定義し、それを参照します。外部のプログラムおよび Perl スクリプトの場合、%EXEC ステートメントのコマンド行でその変数を参照します。 インラインの Perl スクリプトの場合は、その変数を Perl のソースで直接参照します。