ヘッダーをスキップ

Oracle Application Server mod_plsqlユーザーズ・ガイド
10g(10.1.3.1.0)

B31864-01
目次
目次
索引
索引

戻る 次へ

4 PL/SQLのパフォーマンスの最適化

この章では、Oracle HTTP ServerでのPL/SQLのパフォーマンスを向上させるための方法について説明します。

この章の内容は、次のとおりです。

4.1 Oracle HTTP ServerでのPL/SQLのパフォーマンス - 概要

この項では、Oracle HTTP ServerでPL/SQLベースのWebアプリケーションのパフォーマンスを向上させるためのいくつかの方法について説明します。

表4-1に、データベース・アクセス記述子(DAD)のパラメータおよび設定の推奨事項を示します。デフォルトでは、これらのDADパラメータは、dads.confファイルに指定されます。このファイルは、UNIXシステムの場合、ORACLE_HOME/Apache/modplsql/confディレクトリにあります。Windowsシステムの場合、デフォルトでは、ORACLE_HOME¥Apache¥modplsql¥confディレクトリにあります。このディレクトリのdads.READMEファイルには、DADパラメータについて詳細に説明されています。

表4-1    データベース・アクセス記述子(DAD)パラメータの推奨設定の概要 
パラメータ  推奨設定 

PlsqlAlwaysDescribeProcedure 

最高のパフォーマンスにするには、offに設定します。

デフォルト値: off 

PlsqlDatabaseConnectString 

新しいDADには、ServiceNameFormatを使用します。SIDFormatは、下位互換性の場合にのみ使用します。

注意: データベースのHA構成では、接続文字列パラメータはLDAP検索を介して解決されるように設定することをお薦めします。 

PlsqlFetchBufferSize 

日本語や中国語などのマルチバイト・キャラクタ・セットの場合、256に設定すると、パフォーマンスが向上します。

デフォルト値: 200 

PlsqlIdleSessionCleanupInterval 

このパラメータの値を増加すると、プールされたデータベース接続が、プール内で指定された時間、使用可能な状態を維持できます。

デフォルト値: 15(分)

関連項目: 3.11.3項「接続プールでの停止中のデータベース接続の検出」 

PlsqlLogEnable 

オラクル社カスタマ・サポート・センターからデバッグの目的で薦められないかぎり、Offに設定します。

デフォルト値: off 

PlsqlConnectionValidation 

接続プール内で停止中の接続を検出するためにmod_plsqlが使用するオプションを指定します。オプションは次のとおりです。

  • Automatic: mod_plsqlは、インスタンス障害を示す障害を検出する前に作成された、すべてのプールされたデータベース接続をテストします。

  • ThrowAwayOnFailure: mod_plsqlは、インスタンス障害を示す障害を検出する前に作成された、すべてのプールされたデータベース接続を破棄します。

  • AlwaysValidate: mod_plsqlは、リクエストを発行する前に、すべてのプールされたデータベース接続を常にテストします。

    重要: このオプションは、各リクエストのパフォーマンス・オーバーヘッドと関連しているため、注意して使用する必要があります。

  • NeverValidate: mod_plsqlは、プールされたデータベース接続のpingを行いません。

デフォルト値: Automatic

関連項目: 3.11.3.1項「停止中のデータベース接続を検出するためのオプションの指定」 

PlsqlConnectionTimeout 

mod_plsqlにプールされた接続のテストに対するタイムアウトを(ミリ秒単位で)指定します。

デフォルト値: 10000

関連項目: 3.11.3.2項「タイムアウト期間の指定」 

PlsqlMaxRequestsPerSession 

PL/SQLベースのWebアプリケーションがリソースまたはメモリーをリークしない場合は、このパラメータをさらに高い値(5000など)に設定できます。

デフォルト値: 1000

関連項目: 3.11.2項「プールされたデータベース・セッションのクローズ」および4.3.2項「接続プーリングのヒントおよびOracle HTTP Server構成」 

PlsqlNLSLanguage 

データベースのグローバリゼーション・サポートのパラメータと一致するように設定すると、Oracle Net Servicesでのキャラクタ・セット変換におけるオーバーヘッドを削減できます。 

PlsqlSessionStateManagement 

データベースがリリース8.1.7.2以上の場合、このパラメータをStatelessWithFastResetPackageStateに設定します。 

表4-2に、mod_plsqlのキャッシング・オプションと、そのオプションを説明している関連項目を示します。

表4-2    キャッシング・オプション 
オプション  説明 

期限方式 

定期的に変わるコンテンツに対して、最高のパフォーマンスを提供します。

関連項目: 3.10.2項「期限方式の使用」 

検証方式 

不定期に変わるコンテンツに対して、良好なパフォーマンスを提供します。

関連項目: 3.10.1項「検証方式の使用」 

システム・レベル・キャッシング 

システム上のすべてのユーザーに対して1つのコピーをキャッシュすることにより、パフォーマンスを向上させます。

関連項目: 3.10.3項「PL/SQLベースのWebアプリケーションでのシステム・レベルおよびユーザー・レベルのキャッシング」 

関連資料

  • mod_plsqlのメトリックの詳細は、『Oracle Application Serverパフォーマンス・ガイド』のパフォーマンス・メトリックに関する付録を参照してください。

  • 表4-1に示されたDADパラメータの詳細は、『Oracle HTTP Server管理者ガイド』の「mod_plsql」を参照してください。

  • 『Oracle Application Server PL/SQL Web Toolkitリファレンス』

 

4.2 Oracle HTTP Serverでのプロセス・ベースおよびスレッド・ベースの操作

この項では、Oracle HTTP Serverがプロセス・ベースであるプラットフォームとスレッド・ベースであるプラットフォームである場合に当てはまるPL/SQLのパフォーマンス問題について説明します。プロセス・ベースのOracle HTTP Server(UNIXベースのプラットフォームで稼働するものなど)では、サーブレット、PL/SQL、静的ファイルを含め、すべてのタイプのHTTPリクエストを各プロセスで処理します。スレッド・ベースのOracle HTTP Server(Windowsベースのプラットフォームなど)では、Oracle HTTP Serverプロセスは1つしかなく、複数のスレッドがプロセス内にあり、個々のスレッドを使用してすべてのタイプのHTTPリクエストを処理できます。


注意

この章のいくつかの例では、PL/SQLベースのWebアプリケーションに適用されるパフォーマンスの最適化について言及していますが、そこでは、プラットフォーム間の相違、すなわちプロセス・ベースかスレッド・ベースかが重大な意味を持ちます。 


4.3 mod_plsqlでのパフォーマンス・チューニング問題

mod_plsqlを使用する際、パフォーマンスおよびスケーラビリティに影響を及ぼす領域は次のとおりです。

4.3.1 PL/SQLベースのWebアプリケーション開発における考慮事項とプログラミングのヒント

PL/SQL Gatewayユーザーは、PL/SQLベースのWebアプリケーションを開発する際に、次の項目について考慮する必要があります。

  1. データベース・アクセス記述子(DAD)の使用を管理します。

    各Oracle HTTP Serverノードで使用されるDADの数を制限してください。


    注意

    使用されていないDADがあっても、パフォーマンスに影響はありません。 


  2. ネストした表を使用します。

    PL/SQLでは表を作成できます。PL/SQL表を作成するには、表の索引およびデータ型を持つ表を作成します。表の索引は、-2147483647〜+2147483647の2進整数です。この表索引オプションは、スパースと呼ばれ、顧客番号、従業員番号あるいはその他の便利な索引キーなど、重要な索引番号を使用できます。PL/SQL表は、大量データの処理に使用します。

    PL/SQLには、TABLEおよびVARRAY(可変サイズ配列)のコレクション型があります。TABLEコレクション型は、ネストした表と呼ばれます。ネストした表は、サイズに制限がなく、スパースにできます。つまり、ネストした表内の要素はDELETEプロシージャを使用して削除できます。可変サイズ配列は、サイズに制限があり、データベースに格納される際に順序および添字を保持します。ネストした表のデータは、その表に関連付けられたシステム表に格納されます。可変サイズ配列は、アプリケーションがバッチ配列スタイルでデータを処理するバッチ操作に適しています。ネストした表は、ネストした表を格納表に格納して、各要素を格納表の行にマッピングすることで、問合せを効率的に行うことができます。

  3. プロシージャ名のオーバーロードを注意して使用します。

    PL/SQLベースのWebアプリケーションでは、プロシージャ名のオーバーロード機能の使用に注意する必要があります。複数のプロシージャに異なる名前を付けて、プロシージャ名のオーバーロードを回避することが最良の方法です。

  4. パラメータ・タイプの判別に著しいオーバーヘッドが発生するアプリケーションの再作成を検討します。

    PL/SQLベースのWebアプリケーションでは、パラメータ・タイプ(スカラーや配列など)の詳細がURLから十分に提供されないプロシージャの実行におけるオーバーヘッドに注意する必要があります。このような場合、プロシージャを実行する最初の試みに失敗すると、mod_plsqlによって実行できるようにするためには、プロシージャ・シグネチャを記述する必要があります。

    関連項目

    4.3.5項「オーバーヘッドの問題」 

  5. 2パラメータ・スタイルの柔軟なパラメータの受渡しを利用するプロシージャを使用します。

    プロシージャでは、4パラメータ・スタイルのパラメータの受渡しではなく、パフォーマンスの高い2パラメータ・スタイルの柔軟なパラメータの受渡しを利用します。

    関連資料

     

4.3.2 接続プーリングのヒントおよびOracle HTTP Server構成

Oracle HTTP Serverで接続プーリングを構成する際、次の項目について考慮してください。

  1. デフォルトの接続プーリングおよびPlsqlMaxRequestsPerSessionの設定値の使用

    新しいデータベース接続の作成はコストの高い操作であるため、各リクエストが独自のデータベース接続をオープンおよびクローズしないことが最も重要です。最適な方法は、あるリクエストでオープンされたデータベース接続が、後続のリクエストで確実に再利用されるようにすることです。まれなケースですが、データベースへのアクセスが非常に少なく、パフォーマンスが重要な問題ではない場合には、接続プーリングは無効化してもかまいません。たとえば、管理者がまれにサイトにアクセスして管理タスクを行う場合、管理アプリケーションへのアクセスに使用されるDADで、接続プーリングを無効化できます。接続プーリングを無効化するには、DADパラメータPlsqlMaxRequestsPerSessionを値1に設定します。


    注意

    PlsqlMaxRequestsPerSessionを値1に設定すると、使用可能なデータベース・セッション数が減り、パフォーマンスに影響を及ぼすことがあります。 


  2. UNIXシステムでは、プロセスが一度起動したら、そのプロセスが一定の時間起動した状態を維持するように、Oracle HTTP Server構成を正しくチューニングする必要があります。そうしないと、mod_plsqlの接続プーリングは有効に利用できなくなります。Oracle HTTP Serverリスナーは、プロセスの起動および停止を頻繁に行わないようにする必要があります。サイトの負荷を適切に分析して、Webサイトに対する平均の負荷を特定します。Oracle HTTP Server構成をチューニングして、httpdプロセスの数を、システムに対する平均の負荷を処理できるように設定する必要があります。さらに、httpd.confファイルの構成パラメータMaxClientsは、同様に、ランダムに発生する負荷の急激な上昇を処理できる必要があります。

  3. UNIXシステムでは、Oracle HTTP Serverプロセスは、プロセスが最終的に停止して再起動されるように設定する必要があります。これは、Oracle HTTP Server経由でアクセスされる様々なコンポーネントで発生する可能性があるメモリー・リークを管理するために必要です。特に、mod_plsqlでは、データベース・セッションのリソース・リークが問題を引き起こさないようにするために必要です。MaxRequestsPerChild構成パラメータが高い数値に設定されていることを確認してください。PL/SQLベースのWebアプリケーションの場合は、このパラメータを0(ゼロ)に設定しないでください。

  4. 負荷の高いサイトの場合、Oracle HTTP Serverの構成パラメータKeepAliveを無効にする必要があります。これにより、各プロセスは、現在のリクエストの処理が完了するとただちに他のクライアントからのリクエストを処理できるようになります。負荷が低く、Oracle HTTP Serverプロセスの数が常にOracle HTTP Serverリスナーに対する同時リクエストの数より多いサイトの場合、KeepAliveパラメータを有効にすると、パフォーマンスは向上します。このような場合、必ずKeepAliveTimeoutパラメータを適切にチューニングしてください。

  5. Oracle HTTP Server構成でTimeoutの値を低くすることもできます。これにより、クライアントが適時にレスポンスを返さない場合、Oracle HTTP Serverプロセスはより早く解放されます。この値を低くしすぎないでください。値が低すぎると、その値より遅いクライアントのレスポンスがタイムアウトします。

  6. ほとんどのWebサイトには、一貫したユーザー・インタフェースのために各画面に表示される静的イメージ・ファイルが多数あります。このようなファイルはほとんど変わることがないため、Oracle HTTP Serverリスナーにより処理される各イメージをmod_expiresでタグ付けすることで、システムに対する負荷を大幅に減らすことができます。また、Oracle Application Server Web CacheでWebサイトをフロントエンドにすることも検討してください。

    • Webサイトでのmod_expiresの使用が有効かどうかを確認する方法

      • Netscapeまたはページ・キャッシング情報を表示できる任意のブラウザを使用し、サイトで頻繁にアクセスされるWebページをいくつか開きます。各ページでマウスを右クリックし、ポップアップ・メニューから「ページ情報を表示」(または使用しているブラウザのこれに相当するコマンド)を選択します。ページ情報ウィンドウのトップ・パネルに、様々なイメージおよび静的コンテンツが多数表示される場合、そのサイトでのmod_expiresの使用は有効です。

      • また、Oracle HTTP Serverアクセス・ログをチェックして、HTTP 304(Not Modified)ステータスになるリクエストの割合を確認することもできます。grepユーティリティを使用してaccess_log304を検索し、この結果の行数をaccess_logの合計の行数で割ります。この割合が高い場合、そのサイトでのmod_expiresの使用は有効です。

    • 静的ファイルをExpiresヘッダーでタグ付けする方法

      • 静的イメージ・ファイルの処理に使用されるLocationディレクティブを探します。ExpiresActiveおよびExpiresDefaultディレクティブを追加します。

        Alias /images/ "/u01/app/oracle/myimages/" 
        <Directory "/u01/app/oracle/myimages/"> 
             AllowOverride None 
             Order allow, deny 
             Allow from all 
             ExpiresActive On 
             ExpiresDefault A2592000
        </Directory>
        
      • ブラウザは、現在から30日間、処理されるすべての静的ファイルを/imagesパスからキャッシュします。詳細は、『Oracle HTTP Server管理者ガイド』を参照してください。

    • 静的ファイルがExpiresヘッダーでタグ付けされているかどうかを確認する方法

      • Netscapeまたは任意のブラウザを使用して、ブラウザ内のすべてのキャッシュ済ファイルをクリーン・アップします。

      • Expiresヘッダーでタグ付けされたイメージがあるWebページを開きます。ページでマウスを右クリックし、ポップアップ・メニューから「ページ情報を表示」を選択します。または、使用しているブラウザのこれに相当するコマンドを使用します。

      • ページ情報のトップ・パネルで、Expiresヘッダーでタグ付けされているイメージを選択します。

      • 下部のパネルに表示される情報を確認します。Expiresヘッダーは有効な日付に設定されています。このエントリが「指定されていません」となっている場合、そのファイルはExpiresヘッダーでタグ付けされていません。

4.3.3 データベース・セッションの数のチューニング

データベース・セッションの数をチューニングする際、次の項目について考慮してください。

  1. Oracle init$SID.ora構成ファイルのprocessesおよびsessionsパラメータは、Oracleで最大数のデータベース・セッションを処理できるように設定する必要があります。この数は、DADの数にOracle HTTP Serverプロセスの最大数を掛け、さらにOracle HTTP Serverインスタンスの数を掛けた値に比例します。

  2. 2リスナー方針または共有サーバーを使用すると、データベース・セッションの数を減らすことができます。4.3.4項「2リスナー方針」を参照してください。

  3. UNIXプラットフォームでは、接続プールはOracle HTTP Serverプロセス間で共有されません。このため、アプリケーションではできるだけ少ないDADを使用することをお薦めします。

4.3.4 2リスナー方針

Oracle HTTP Serverがプロセス・ベースであるプラットフォーム(すべてのUNIXベースのプラットフォームなど)では、サーブレット、PL/SQL、静的ファイルおよびCGIを含め、すべてのタイプのHTTPリクエストを各プロセスで処理します。1つのOracle HTTP Serverリスナー設定で、各httpdプロセスはデータベースへの独自の接続プールを保持します。データベース・セッションの最大数は、httpd.conf構成ファイルのStartServersMinSpareServersおよびMaxSpareServersの設定およびシステムに対する負荷により決まります。このアーキテクチャでは、mod_plsqlリクエストの数に基づいてデータベース・セッションの数をチューニングできません。mod_plsqlリクエストの数に基づいてデータベース・セッションの数をチューニングするには、mod_plsqlリクエスト専用に別のHTTPリスナーをインストールします。この方法により、mod_plsqlリクエストの処理に必要なデータベース・セッションの数を大幅に減らすことができます。

たとえば、メインのOracle HTTP Serverリスナーがmylsnr1.mycompany.comのポート7777で稼働しているとします。まず、別のOracle HTTP Serverリスナーをmylsnr2.mycompany.comのポート8888にインストールします。次に、mylsnr1.mycompany.com:7777に対して行われたすべてのmod_plsqlリクエストを、mylsnr2.mycompany.com:8888の2番目のリスナーにリダイレクトします。手順は次のとおりです。

  1. mylsnr1.mycompany.com:7777に対するすべてのPL/SQLリクエストをmylsnr2.mycompany.com:8888にリダイレクトするには、次のように構成を変更します。

    1. ポート7777で稼働しているOracle HTTP Serverリスナーについては、ORACLE_HOME/Apache/modplsql/conf/plsql.confファイルを編集します。行の先頭に#を挿入して、次の行をコメント化します。

      #LoadModule plsql_module...
      
    2. mylsnr1.mycompany.comのPL/SQLリクエストの処理に使用されるDADの場所を、mylsnr2.mycompany.comORACLE_HOME/Apache/modplsql/conf/dads.conf構成ファイルにコピーします。

      行の先頭に#文字を挿入して、mylsnr1.mycompany.com上のDADの場所の構成パラメータをコメント化します。

      #<Location /pls/portal> 
      #... 
      #</Location>
      
    3. 次の行をdads.confに追加して、このDADの場所に対するすべてのmod_plsqlリクエストを2番目のリスナーに転送するように、このリスナーを設定します。

      ProxyPass /pls/portal http://mylsnr2.mycompany.com:8888/pls/portal
      

    すべてのDADの場所について、この設定の手順を繰り返します。

  2. PL/SQLプロシージャはブラウザに表示されるURLを生成するため、すべてのURLがmylsnr2.mycompany.com:8888の内部mod_plsqlリスナーを参照せずに構成されていることが重要です。PL/SQLベースのWebアプリケーションでURLがどのように生成されるかにより、次の3つのオプションがあります。

    • URLがアプリケーションにハードコードされている場合、常にハードコードされた値(HOST=mylsnr1.mycompany.comおよびPORT=7777)を使用してURLが生成されていることを確認してください。この場合、変更は不要です。

    • PL/SQLベースのWebアプリケーションが常にCGI環境変数SERVER_NAMEおよびSERVER_PORTを使用する場合、mylsnr2.mycompany.comのリスナーの構成を変更することは簡単です。ファイルを編集し、2番目のリスナーのORACLE_HOME/Apache/conf/httpd.confファイルのServerNameおよびPort行を次のように変更します。

      ServerName mylsnr1.mycompany.com (was mylsnr2.mycompany.com)
      Port 7777                        (was 8888)
      
    • URLがCGI環境変数HTTP_HOSTを使用して生成されている場合、ポート8888で稼働しているOracle HTTP ServerリスナーのCGI環境変数をオーバーライドする必要があります。各DADのORACLE_HOME/Apache/modplsql/conf/dads.confファイルに次の行を追加して、デフォルトのCGI環境変数HOSTSERVER_NAMEおよびSERVER_PORTをオーバーライドします。

      PlsqlCGIEnvironmentList  SERVER_NAME  mylsnr1.mycompany.com 
      PlsqlCGIEnvironmentList  SERVER_PORT  7777 
      PlsqlCGIEnvironmentList  HOST mylsnr1.us.oracle.com:7777
      

    いかなる場合でも、目的はアプリケーションに2番目のリスナーが存在しないかのように見せかけて、URLを生成することです。

  3. 設定をテストし、すべてのDADに問題なくアクセスできることを確認します。

  4. この設定では、mylsnr1.mycompany.comのメインのリスナーは、Oracle HTTP Serverリスナーに対する合計の負荷に基づいて設定できます。mylsnr2.mycompany.comの2番目のリスナーは、実行されるmod_plsqlリクエストのみに基づいて細かくチューニングできます。

4.3.5 オーバーヘッドの問題

一部のストアド・プロシージャの実行時、mod_plsqlにDescribeのオーバーヘッドが発生することがあり、その結果、実行を正常終了するために、データベースへのラウンドトリップが2回余分に発生します。これは、パフォーマンスと密接な関係があります。

4.3.5.1 Describeのオーバーヘッド

PL/SQLプロシージャを実行するために、mod_plsqlは、渡されるパラメータのデータ型を認識する必要があります。この情報に基づいて、mod_plsqlは、各パラメータを配列またはスカラーとしてバインドします。プロシージャ・シグネチャを認識するための1つの方法は、プロシージャを実行前に記述することです。ただし、この方法は、各プロシージャを実行前に記述する必要があるため、効率的ではありません。Describeのオーバーヘッドを回避するには、mod_plsqlでパラメータ名ごとに渡されるパラメータの数を調べるようにします。この情報を使用して、各変数のデータ型を推定します。このロジックは単に、渡される値が1つの場合はそのパラメータをスカラーとし、それ以外の場合は配列とします。これは、ほとんどの場合において機能しますが、1つの値を配列パラメータに渡そうとしたり、複数の値をスカラーに渡そうとしている場合には機能しません。このような場合、プロシージャを実行する最初の試みに失敗します。mod_plsqlはDescribeコールを発行して、PL/SQLプロシージャのシグネチャを取得し、Describe操作で取得した情報に基づいて各パラメータをバインドします。プロシージャは再実行され、結果が戻されます。

このDescribeコールは、プロシージャに対して透過的に発生しますが、mod_plsqlの内部では、ラウンドトリップが2回余分に発生します。1回は実行に失敗したコールのため、もう1回はDescribeコールのためです。

4.3.5.2 Describeのオーバーヘッドの回避

次のようにして、パフォーマンスの問題を回避できます。

4.3.6 柔軟なパラメータの受渡し(4パラメータ)のオーバーヘッド

ラウンドトリップのオーバーヘッドは、PL/SQLプロシージャが古いスタイルの4パラメータ・インタフェースを使用している場合に発生します。PL/SQL Gatewayは、最初に2パラメータ・インタフェースを使用してプロシージャの実行を試みます。これに失敗すると、PL/SQL Gatewayは4パラメータ・インタフェースを使用します。つまり、すべての4パラメータ・インタフェースのプロシージャでは、ラウンドトリップが1回余分に発生します。

4.4 キャッシングのパフォーマンスを向上させるためのファイル・システム・キャッシュのチューニング

ファイル・システム・キャッシュを構成し、使用すると、OracleAS Portalアプリケーションおよび一般的なPL/SQLベースのWebアプリケーションのパフォーマンスを向上させることができます。

この項の内容は、次のとおりです。

4.4.1 ファイル・システム・キャッシュのチューニングの概要

この項では、mod_plsqlに関連するファイル・システム・キャッシュのチューニング・オプションについて説明します。キャッシュ・コンテンツは、オペレーティング・システム付属のファイル・システム・コールを使用してキャッシュされますが、キャッシュされたコンテンツはmod_plsqlのメモリー領域には格納されません。mod_plsqlのファイル・システム・キャッシュを使用していても、メモリー・ディスクなどの機能がオペレーティング・システムでサポートされ、それを使用するようにシステムが構成されている場合(一部のUNIXプラットフォームはメモリー・ディスク・ベースの高速格納をサポートしています)、キャッシュ・コンテンツはメモリーに存在することがあります。

この項の情報を使用すると、mod_plsqlがファイル・システム・キャッシュを使用するように構成されている場合に、PL/SQLベースのWebアプリケーションのパフォーマンスを向上させることができます。たとえば、OracleAS Portalではファイル・システム・キャッシュを使用しています。そのため、ファイル・システム・キャッシュが適切にチューニングされれば、OracleAS Portalのパフォーマンスは向上します。

表4-3に、mod_plsqlに対して設定できるキャッシュ関連のパラメータを示します。これらのパラメータをcache.confファイルに設定します。このファイルは、UNIXではORACLE_HOME/Apache/modplsql/confディレクトリに、WindowsではORACLE_HOME¥Apache¥modplsql¥confディレクトリにあります。


注意

confディレクトリのcache.READMEファイルには、各パラメータの詳細な説明およびパラメータ値の設定方法を示す例が含まれています。 


表4-3    mod_plsql cache.confの構成パラメータの概要 
パラメータ  説明 

PlsqlCacheCleanupTime 

キャッシュ・クリーン・アップ・ルーチンの実行間隔を設定します。

デフォルト: Everyday 23:00(現地時間の毎日午後11時にクリーン・アップ・ルーチンを実行)

関連項目: 4.4.5項「キャッシュ・クリーン・アップの構成」 

PlsqlCacheDirectory 

mod_plsqlのキャッシュを保持するディレクトリを定義します。

デフォルト:

UNIXシステムでは、エラー・ログのデフォルト・ディレクトリはORACLE_HOME/Apache/modplsql/cacheです。

Windowsシステムでは、デフォルト・ディレクトリはORACLE_HOME¥Apache¥modplsql¥cacheです。

関連項目: 4.4.3項「より高速なファイル・システムに存在するためのファイル・システム・キャッシュの構成」 

PlsqlCacheEnable 

ファイル・システム・キャッシュを使用できるようにします。

デフォルト: On

関連項目: 4.4.2項「ファイル・システム・キャッシュの有効化」 

PlsqlCacheMaxAge 

キャッシュ・コンテンツのエージングを日単位で制御します。

デフォルト: 30(日)

関連項目: 4.4.4.2項「PlsqlCacheMaxAgeによるキャッシュのエージング日数の設定」 

PlsqlCacheMaxSize 

キャッシュに格納される個々のファイルの最大サイズをバイト単位で設定します。

デフォルト: 1048576(1MB)

関連項目: 4.4.4.3項「PlsqlCacheMaxSizeによるキャッシュ・ファイルの最大ファイル・サイズの設定」 

PlsqlCacheTotalSize 

キャッシュの合計サイズを制限します。この値はバイト単位で指定します。

デフォルト: 20971520(20MB)

関連項目: 4.4.4.1項「PlsqlCacheTotalSizeによる合計キャッシュ・サイズの設定」 

4.4.2 ファイル・システム・キャッシュの有効化

cache.confPlsqlCacheEnableパラメータにより、mod_plsqlキャッシングが使用できるようになります。パフォーマンスを最大化するには、PlsqlCacheEnableパラメータの値をOnに設定して有効にします。


注意

PL/SQLキャッシングをサポートするアプリケーション(Oracle Portalなど)でのみ、PlsqlCacheEnableOnに設定するメリットがあります。 


4.4.3 より高速なファイル・システムに存在するためのファイル・システム・キャッシュの構成

この項では、別のディスク上にあるようにファイル・システム・キャッシュを構成する方法について説明します。ファイル・システム・キャッシュを使用し、より高速な別のディスク上にキャッシュを格納すると、OracleAS Portalや一般的なPL/SQLベースのWebアプリケーションなど、ファイル・システム・キャッシュを使用するすべてのタイプのWebアプリケーションについて、パフォーマンスは向上します。

ファイル・システム・キャッシュを構成する際、キャッシュを別の物理ディスクまたはメモリー・ディスクのいずれかに設定できます。

ファイル・システム・キャッシュを別のディスク上に設定するには、次のようにします。

  1. キャッシュのファイル・システムは次の場所にあるとします。

    UNIXの場合: /u01/cache

    Windowsの場合: E:¥cache

  2. 次のファイルを更新します。

    UNIXの場合: ORACLE_HOME/Apache/modplsql/conf/cache.conf

    Windowsの場合: ORACLE_HOME¥Apache¥modplsql¥conf¥cache.conf

  3. キャッシュ・パラメータのPlsqlCacheDirectoryを次のように変更します。

    UNIXの場合: PlsqlCacheDirectory /u01/cache

    Windowsの場合: PlsqlCacheDirectory E:¥cache

4.4.4 ファイル・システム・キャッシュのサイズ変更

この項の内容は、次のとおりです。

4.4.4.1 PlsqlCacheTotalSizeによる合計キャッシュ・サイズの設定

デフォルトのインストールでは、mod_plsqlのファイル・システム・キャッシュ・サイズは2097152バイト(20MB)に設定されます。PL/SQLアプリケーションがOWA_CACHEパッケージを使用しない場合、またはパッケージを使用して少量のコンテンツをキャッシュする場合は、デフォルト設定で十分です。PL/SQLアプリケーションが大量のコンテンツをmod_plsqlのファイル・システム・キャッシュにキャッシュする場合、より高い値の指定を検討する必要があります。

キャッシュ・サイズを制御するには、cache.confファイルにPlsqlCacheTotalSizeパラメータを設定します。UNIXシステムでは、このファイルはORACLE_HOME/Apache/modplsql/confディレクトリにあります。Windowsシステムでは、このファイルはORACLE_HOME¥Apache¥modplsql¥confにあります。

高いキャッシュ・ヒット率を達成するのに十分なキャッシュ・サイズを設定する必要があります。頻繁にアクセスされるコンテンツがキャッシュされた状態を維持するのに十分な大きさのキャッシュ・サイズを設定するようにしてください。また、キャッシュ・サイズが大きくなりすぎないように、ディスク領域の量を制限することも重要です。キャッシュ・サイズを適切にチューニングすると、頻繁にアクセスされるコンテンツすべてを保持するために十分なキャッシュを提供する一方で、非常に大きなキャッシュの検索は非効率であることから、キャッシュ・サイズが大きくなりすぎるのを防ぐこともできます。

PlsqlCacheTotalSizeの値はバイト数で指定します。1MBは1048576バイトです。この設定は、割り当てられるキャッシュ量に対する弱い制限です。場合によっては、次のクリーン・アップ操作までに、キャッシュ・サイズがこの制限を超えて大きくなることがあります。そのため、キャッシュ・サイズに対する強い制限は、使用する物理ハード・ディスク・サイズとなります。この制限に達すると、領域が使用可能になるまで、キャッシュ・コンテンツをディスクに書き出すことができません。


注意

PlsqlCacheTotalSizeに使用できる最大値は、4294967296バイト(4GB)です。 


適度なキャッシュ・サイズを決定するには、次のようにします。

  1. httpd.confLogLevelinfoレベルに設定してmod_plsqlパフォーマンス・ロギングをオンにし、mod_plsqlロギングを使用できるようにします。

  2. 日次ベースでerror_logを監視します。UNIXシステムでは、エラー・ログのデフォルト・ディレクトリはORACLE_HOME/Apache/Apache/logです。Windowsシステムでは、デフォルト・ディレクトリはORACLE_HOME¥Apache¥Apache¥logです。

mod_plsql error_logエントリは、次のような形式です。

[info] mod_plsql: cachecleanup deleted=2571 max_age=96,2178852b  kept=1042,25585368b 
time=128s limit=25600000b

意味は次のとおりです。

deletedは、クリーン・アップ・プロセスで削除されたキャッシュ・ファイルの数です。

max_ageは、一定期間使用されていなかったために削除されたキャッシュ・ファイルの数および合計サイズです。

keptは、クリーン・アップ・プロセス後に保持されたキャッシュ・ファイルの数および合計サイズです。

timeは、クリーン・アップの実行にかかった時間です。

limitは、合計キャッシュ・サイズです。これは、PlsqlCacheTotalSize設定の値です。

エラー・ログのエントリは次のように解析します。

4.4.4.2 PlsqlCacheMaxAgeによるキャッシュのエージング日数の設定

PlsqlCacheMaxAgeパラメータを使用すると、キャッシュ・コンテンツの古さを制御できます。パラメータの値は日数単位で指定します。このパラメータのデフォルト値は30(日)です。これは、キャッシュ・コンテンツが30日以内であれば、キャッシュに保存されることを意味します。30日を過ぎると、コンテンツはクリーン・アップ・プロセス時に削除対象とみなされます。

mod_plsql error_logmax_age情報には、キャッシュ・ファイルのエージング情報が示されます。サイトが非常に動的なサイトである場合、この設定をより小さい値に構成します。古いキャッシュ・コンテンツは通常、再利用されないため、より小さい値がキャッシュ・ヒット率に影響を及ぼすことがないためです。サイトに多くの静的ページが含まれる場合、PlsqlCacheMaxAgeの値を増やし、クリーン・アップ・プロセスでキャッシュ・コンテンツが故意に削除されないようにします。

4.4.4.3 PlsqlCacheMaxSizeによるキャッシュ・ファイルの最大ファイル・サイズの設定

PlsqlCacheMaxSizeパラメータを使用すると、キャッシュに格納される個々のファイルの最大サイズを指定できます。このパラメータを使用することで、1つのキャッシュ・ファイルでキャッシュ全体がいっぱいになる状態を回避できます。

このパラメータのデフォルト値は1048576(バイト)です。一般に、このパラメータは、合計キャッシュ・サイズの約1〜3%の値に設定します。


注意

PlsqlCacheMaxSizeに使用できる最大値は、4294967296バイト(4GB)です。 


4.4.5 キャッシュ・クリーン・アップの構成

キャッシュ・クリーン・アップ・パラメータにより、ファイル・システム・キャッシュを調査し、必要に応じてクリーン・アップする頻度が決まります。キャッシュ・クリーン・アップ・パラメータのPlsqlCacheCleanupTimecache.confファイルに指定されています。頻度は、毎日、毎週、毎月に設定できます。毎週のクリーン・アップを指定する場合、曜日と時刻を指定できます。

mod_plsqlのPlsqlCacheCleanupTimeのデフォルト設定は、現地時間の毎日午後11時です。そのため、デフォルトでは、毎晩午後11時にクリーン・アップ・ルーチンが実行されます。毎月の頻度を選択した場合、クリーン・アップは毎月第1土曜日に行われます。

クリーン・アップの頻度が高すぎるとキャッシュ・ヒット率が低くなり、クリーン・アップの頻度が低すぎるとキャッシュのディスク使用量が過多になるため、このパラメータを適切に設定することが重要です。

クリーン・アップ・アクティビティは、mod_plsql error_logのエントリを使用して監視します。エントリを分析して、クリーン・アップ・パラメータのPlsqlCacheCleanupTimeをチューニングします。

[info] mod_plsql: cachecleanup deleted=2571 max_age=96,2178852b  kept=1042,25585368b 
time=128s limit=25600000b

次の事柄に注意してください。

4.5 Oracle HTTP Serverのディレクティブ

Oracle HTTP ServerでのPL/SQLのパフォーマンスを向上させるには、使用している構成に対してOracle HTTP Serverのディレクティブを適切にチューニングする必要があります。

関連資料

  • 『Oracle Application Serverパフォーマンス・ガイド』のOracle HTTP Serverのディレクティブの構成に関する項

  • 『Oracle HTTP Server管理者ガイド』の第4章「サーバー・プロセスの管理」および第5章「ネットワーク接続の管理」

 


戻る 次へ
Oracle
Copyright © 2006 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引