Oracle® Fusion Middleware Oracle Directory Server Enterprise Editionリファレンス 11g リリース1 (11.1.1.7.0) B72441-01 |
|
前 |
次 |
クライアント・リクエストに対するレスポンス時間を速くするために、Directory Serverはメモリー内のディレクトリ情報をキャッシュします。Directory Serverのパフォーマンスを最大限にする必要があるが、ディレクトリ・データのすべてを使用可能なメモリーに収めることができない場合は、キャッシュ設定を調整してパフォーマンスを最適化できます。
この章では、設定の調整が可能なキャッシュのタイプについて説明します。また、Directory Serverがそうしたタイプのキャッシュを使用する方法についても説明します。この章の内容は次のとおりです。
この項では、Directory Serverにより使用されるキャッシュのタイプについて説明します。
図8-1は、それぞれに独自のエントリー・キャッシュがある3つのサフィックスを持つ、Directory Serverのインスタンスのキャッシュを示しています。
Directory Serverではファイル・システム・キャッシュも使用します。ファイル・システム・キャッシュは基本のオペレーティング・システム、およびディスク・サブシステムのI/Oバッファにより管理されます。
Directory Serverの各インスタンスにはデータベース・キャッシュが1つあります。データベース・キャッシュは、データベースの索引とエントリが含まれたページを保持します。各ページはエントリではありませんが、データベースの一部が含まれているメモリーの一片です。
Directory Serverはデータベース・ファイルとデータベース・キャッシュ間でページを移動し、ユーザーが指定する最大データベース・キャッシュ・サイズを維持します。Directory Serverがデータベース・キャッシュに使用するメモリーの容量は、指定されたサイズよりも大きくなることがあります。これは、データベース・キャッシュを管理するために、Directory Serverでさらにメモリーが必要なためです。
メモリーは経験的テストおよびSolarisシステムでのpmap
(1)のようなツールを使用することにより監視できます。また、ps
(1)ユーティリティを-p
pidオプションおよび-o
formatオプションとともに使用して、Directory Server ns-slapd
などの特定のプロセスで使用されている現在のメモリーを表示することもできます。詳細は、オペレーティング・システムのドキュメントを参照してください。
エントリ・キャッシュは、クライアント・アプリケーションへの配信のためにフォーマットされた、最近アクセスされたエントリを保持します。
デフォルトで、エントリ・キャッシュは負荷に応じて、サーバーにより完全に管理されます。エントリのキャッシュ・メモリーは、ユーザーが指定したエントリ・キャッシュの最大サイズに基づき、そのサイズを超えるまで必要に応じて割り当てられます。
エントリ・キャッシュに格納されたエントリはすでにフォーマット済なので、Directory Serverはエントリ・キャッシュからエントリを効率的に返すことができます。データベースのエントリは、クライアント・アプリケーションに配信される前にフォーマットされ、エントリ・キャッシュに格納される必要があります。
エントリー・キャッシュをプレロード、または準備するようにDirectory Serverを構成し、Directory Serverがシャットダウンする前に、有益なユーザー・データのみがディスクに書き込まれるようにできます。その後、Directory Serverが再起動したときに有益なデータのみが読み取られます。プレロード・オプションを選択した場合、起動時にデータベース・キャッシュとDNキャッシュが自動的に準備されるように、最後に使用されたentryID
のみがディスクに保存されます。詳細は、『Oracle Directory Server Enterprise Edition管理者ガイド』を参照してください。
デフォルトで、エントリ・キャッシュは負荷に応じて、サーバーにより完全に管理されます。エントリのキャッシュ設定を変更する前に、デフォルト値でのサーバーのパフォーマンスの程度を評価する場合があります。
指定する最大サイズは、Directory Serverが要求する、基本のメモリー割当てライブラリからのメモリー量を示します。メモリーに対するリクエストをメモリー割当てライブラリが処理する方法によっては、Directory Serverがエントリ・キャッシュに使用できるメモリー容量よりも使用される実際のメモリーがはるかに大きい場合があります。
Directory Serverのプロセスにより使用されるメモリーは、使用されるメモリー割当てライブラリと、キャッシュされるエントリによって異なります。多くの小さな属性値を持つエントリは通常、少数の大きな属性値を持つエントリよりも多くのオーバーヘッドを必要とします。
設定できるキャッシュ・サイズのプロパティの詳細は、『Oracle Directory Server Enterprise Edition管理者ガイド』またはサーバーのmanページを参照してください。チューニングの推奨事項については、『Oracle Directory Server Enterprise Editionデプロイメント・プランニング・ガイド』を参照してください。
インポート・キャッシュはサフィックスが初期化されるときに作成され、使用されます。導入時にオフラインでのサフィックスの初期化のみが行われる場合、インポート・キャッシュとデータベース・キャッシュが同時に使用されることはありません。この場合、インポート・キャッシュとデータベース・キャッシュは、キャッシュ・サイズの集計時に一緒に追加される必要はありません。「総計キャッシュ・サイズ」を参照してください。インポート・キャッシュ・サイズが変更された場合、サフィックスが次にリセットされ、初期化されたときにその変更が有効になります。インポート・キャッシュは初期化のために割り当てられ、初期化後に解放されます。
Directory Serverでは、インポート・キャッシュの処理をデータベース・キャッシュの処理と同じように行います。スワップを避けるには、十分な物理メモリーが使用可能であることが必要です。インポート・キャッシュのサイズが大きいという利点は、キャッシュ・サイズが2GBを超えると薄くなります。
オペレーティング・システムは、Directory Serverのキャッシュや他のアプリケーションに使用されていない利用可能なメモリーを、ファイル・システム・キャッシュに割り当てます。ファイル・システム・キャッシュはディスクから最近読み取られたデータを保持するので、後続のリクエストがデータを取得するのにディスクから再度読み取るのではなく、キャッシュから取得できます。メモリー・アクセスはディスク・アクセスよりも何倍も高速なので、一部の物理メモリーをファイル・システム・キャッシュが利用できるようにしておくと、パフォーマンスが飛躍的に向上します。
ファイル・システム・キャッシュはデータベース・キャッシュの一部のかわりに使用できます。Directory Serverではデータベース・キャッシュを使用する方がファイル・システム・キャッシュを使用するよりも効率的ですが、ファイル・システム・キャッシュはDirectory Serverのns-slapd
プロセスと直接関連付けられていません。データベース・キャッシュだけを使用した場合に利用可能なキャッシュ・サイズよりも大きな総計キャッシュ・サイズがDirectory Serverで利用できるようになる可能性があります。
ファイル・システム・キャッシュについては、オペレーティング・システムのドキュメントを参照してください。
同時に使用されるすべてのキャッシュの合計は、使用可能な物理メモリーの総計サイズから、ファイル・システム・キャッシュのためのメモリーと、Directory Server自身のような他のプロセスのためのメモリーを差し引いたサイズよりも小さくしておく必要があります。
32ビット・サーバーの場合、総計キャッシュ・サイズは、Directory Serverのns-slapd
プロセスの合計サイズがオペレーティング・システムで可能な最大プロセス・サイズ未満になるように制限する必要があります。実際には、この制限は一般的に2GBから3GBの範囲です。
Directory Serverがオンラインの時にサフィックスが初期化される場合、データベース・キャッシュ、エントリ・キャッシュおよびインポート・キャッシュのサイズの合計が、利用可能な物理メモリーの合計サイズ未満になっている必要があります。
Directory Serverがオフラインのときにすべてのサフィックスが初期化される場合は、インポート・キャッシュとデータベース・キャッシュが共存しないため、オフラインのサフィックス初期化のためのインポート・キャッシュと、オンラインで使用するためのデータベース・キャッシュに同じメモリーを割り当てることができます。こうした特殊な場合の実装では、本番サーバーでオンライン一括ロードを実行しないようにしてください。同時に使用されるキャッシュの合計は、使用可能な物理メモリーの合計サイズ未満になっている必要があります。
キャッシュが非常に大きい場合は、Directory Serverにより使用されるメモリーが、利用可能な物理メモリーのサイズを超えないことが重要です。利用可能な物理メモリーのサイズを超えた場合は、システムのページングが繰返し発生し、パフォーマンスが低下します。
図8-2で、個々の線は異なるレベルのメモリーにアクセスするそれぞれのスレッドを表しています。破線は、Directory Serverを効果的に調整することにより最小化される、可能性のあるボトルネックを表します。
次の各項では、キャッシュを使用してDirectory Serverが検索を実行する方法について説明します。次の各項で説明するように、サブツリー検索を処理することにより、Directory Serverはすべての結果セットをメモリーにロードすることなく、結果を返します。
ベース検索はベースDNを指定するもので、Directory Serverによる管理が最も単純なタイプの検索です。Directory Serverは次の手順でベース検索を処理します。
Directory Serverがエントリ・キャッシュからエントリの取得を試行します。
エントリ・キャッシュでエントリが検出されると、Directory Serverは候補のエントリが検索に指定されたフィルタと一致するかどうかを検査します。
エントリが検索に指定されたフィルタと一致した場合、Directory Serverはフォーマット済のキャッシュされたエントリをクライアント・アプリケーションに返します。
Directory Serverがデータベース・キャッシュからエントリの取得を試行します。
データベース・キャッシュでエントリが検出されると、Directory Serverはそのエントリをサフィックスのエントリ・キャッシュにコピーします。Directory Serverは、エントリがエントリ・キャッシュで検出されたかのように処理を進めます。
Directory Serverはデータベース自身からエントリの取得を試行します。
データベースでエントリが検出されると、Directory Serverはそのエントリをデータベース・キャッシュにコピーします。Directory Serverは、エントリがデータベース・キャッシュで検出されたかのように、処理を進めます。
サブツリーまたはツリーのレベルに対する検索には、複数のエントリを処理するための追加プロセスが含まれます。Directory Serverは次の手順でサブツリー検索および1レベル検索を処理します。
Directory Serverがデータベース・キャッシュの索引からのフィルタに一致する一連の候補エントリの定義を試行します。
適切な索引が存在しない場合、候補エントリ・セットがデータベース自身で直接検出される必要があります。
各候補エントリについて、Directory Serverは次のタスクを実行します。
エントリを取得するためにベース検索を実行します。
検索に指定されたフィルタにエントリが一致するかどうかを検査します。
エントリがフィルタに一致する場合にクライアント・アプリケーションにエントリを返します。
図8-3で、個々の線は異なるレベルのメモリーにアクセスするそれぞれのスレッドを表しています。破線は、Directory Serverを効果的に調整することにより最小化される、可能性のあるボトルネックを表します。
この図には、更新のエントリを取得するために実行される内部ベース検索による影響は示されていません。
Directory Serverは次の手順で更新を処理します。
Directory Serverはエントリを取得するため、または追加操作の場合はエントリを更新するか、エントリがまだ存在していないことを検証するためにベースDN検索を実行します。
Directory Serverはデータベース・キャッシュおよび影響を受ける索引を更新します。
変更により影響を受けるデータがデータベース・キャッシュにロードされていない場合は、この段階は当該データがキャッシュにロードされる際のディスク・アクティビティになることがあります。
Directory Serverは変更に関する情報をトランザクション・ログに書き込み、情報がディスクにフラッシュされるのを待ちます(ディスクへのフラッシュは各チェックポイントで定期的に発生します)。つまり、Directory Serverのデータベース・ファイルは書込みごとではなく、チェックポイント操作時に更新されます。
Directory Serverは更新されたエントリをフォーマットし、サフィックスのエントリ・キャッシュにコピーします。
Directory Serverはクライアント・アプリケーションに、更新が正常に終了したという確認を返します。
次の図は、Directory Serverがキャッシュを使用してサフィックスを初期化する方法を示しています。個々の線は異なるレベルのメモリーにアクセスするそれぞれのスレッドを表しています。破線は、Directory Serverを効果的に調整することにより最小化される、可能性のあるボトルネックを表します。
Directory Serverは次の手順でサフィックスを初期化します。
LDIFからバッファをフィードするためのスレッドを開始します。
影響を受ける各索引のスレッドおよび索引を更新するための他のワーキング・スレッドを開始します。これらのスレッドはインポート・キャッシュを使用します。
インポート・キャッシュが足りなくなると、データベース・ファイルで読み書きします。
また、Directory Serverはサフィックスの初期化時にログ・メッセージを書き込みますが、トランザクション・ログには書き込みません。
Directory Serverに付属するサフィックス初期化ツールには、キャッシュのヒット率およびインポートのスループットに関するフィードバックが用意されています。キャッシュ・ヒット率およびインポートのスループットが同時に低下した場合は、インポート・キャッシュが小さすぎることが考えられます。