36 パフォーマンスのチューニング
Oracle Unified Directoryのデフォルト設定は、制限されたリソースを使用して機器を稼働させる評価担当者および開発者を対象としています。Oracle Unified Directoryを本番環境にデプロイする場合、Java仮想マシン(JVM)およびサーバー構成に対して若干の初期チューニングを行うことによって、スケーラビリティおよびパフォーマンスを向上(特に書込み操作の場合)させることができます。
トピック
36.1 パフォーマンス問題のアセスメントについて
INSTANCE_DIR/OUD/logs/access
にあるアクセス・ログを確認して、パフォーマンスの問題がサーバーとクライアントのどちらに関連しているかを迅速に特定します。
このログには、次の形式のエントリが含まれます:
[09/Sep/2009:15:36:18 +0200] SEARCH RES conn=1 op=16 msgID=17 result=0 nentries=1 etime=1
etime
フィールドの値は、サーバーがリクエストの処理に費やした時間(ミリ秒単位)です。一般的には、etimes
の値が大きい場合、サーバー側で問題が発生しています(通常この問題は、適切なパフォーマンス・チューニングおよび索引付けを行うことによって解決できます)。パフォーマンスの問題が発生しているが、etimes
の値が小さい場合は、クライアント・アプリケーションに問題がある可能性が高くなります。
包括的なモニタリング情報は、cn=monitor
エントリにあります。「Oracle Unified Directoryのモニタリング」を参照してください。Oracle Enterprise Managerを使用してOracle Unified Directoryのパフォーマンスをモニターすることもできます。『Oracle® Enterprise Manager Plug-in for Oracle Unified Directoryユーザーズ・ガイド』のOUDインスタンスに関するパフォーマンス・メトリックの表示に関する項を参照してください。
36.2 一般的なパフォーマンス・パラメータのチューニング方法の理解
パフォーマンス・チューニングの戦略は、ディレクトリ・サーバーとプロキシ・サーバーのどちらを実行するかによって異なります。
特定のデプロイメント・シナリオでは、次のパラメータによってパフォーマンスが向上する場合があります。
-
Javaのバージョン。提供されているJava Runtime Environment (JRE)の最新リリースを使用します。Oracle Unified Directoryは、Java 8 Update 131以上と連携して動作します。
-
環境変数。サーバーはOPENDS_JAVA_HOME環境変数を使用して、インストール済のJREを指します。複数のバージョンのJavaがシステムにインストールされている場合は、目的のインストールのルートを指すようにJAVA_HOME環境変数を設定します。これにより、Oracle Unified Directoryではない他のアプリケーションが、JAVA_HOME変数によって指定されたバージョンのJREを使用できるようになります。
サーバー用のJREインストールを指定するには、次のいずれかを実行します。
-
dsjavaproperties
コマンドを使用して、適切な環境変数を設定します。詳細は、「dsjavaproperties」を参照してください。
-
OPENDS_JAVA_BIN環境変数を(JAVAのバイナリ・パスを使用して)設定します。
-
OPENDS_JAVA_HOME環境変数を(JAVAのインストール・パスを使用して)設定します。
-
36.3 dsjavaproperties
ユーティリティを使用したJava仮想マシン設定の理解
JAVA_ARGS
環境変数を使用して、JVMに渡すことができるグローバル構成引数を提供するか、java.properties
ファイルを使用できます。java
コマンドで使用できる引数はすべて、どちらの方法でも使用できます。
JVMをチューニングしてパフォーマンスを最適化し、Oracle Unified Directoryアプリケーションの堅牢性と応答性を確保することをお薦めします。ヒープ・サイズをチューニングすることによってJVMをチューニングできます。ヒープ・サイズは、次のように分割されます:
-
若い世代: PDUやローカル変数などの操作を含みます。
-
古い世代: JEデータベース・キャッシュやエントリ・キャッシュなどのOracle Unified Directoryキャッシュを含みます。
-
永続世代: 定数およびクラスを含みます。
Oracle Unified Directoryがディレクトリ・サーバー・モードの場合、次のデータベース・キャッシュ・オプションのいずれかを実行できます。
-
データベース・キャッシュのデータベース全体をキャッシュします。これによって最適なパフォーマンスが与えられますが、キャッシュ・ウォームアップが長くなり、ヒープ・サイズが大きくなります。
-
データベース・キャッシュでデータベースのBツリー(上位ノードおよび内部ノード)の内部ノードのみをキャッシュし、残りのRAMをファイル・システム・キャッシュ用に保持します。これによってパフォーマンスが向上し、ウォームアップが短くなり、ヒープ・サイズが小さくなります。非常に大きいデプロイ(50MBytesエントリ超)用にお薦めします。小規模および中規模のデプロイにお薦めします。
詳細は、「データベース・キャッシュ・サイズの決定」を参照してください。
ノート:
プロキシ・モードでは、グローバル索引を使用した配布に大きい古い世代を使用します。
詳細は、「dsjavaproperties」を参照してください。
JVMのチューニングの詳細は、Javaパフォーマンスのドキュメント(http://java.sun.com/docs/performance/
)を参照してください。
http://www.oracle.com/technetwork/java/performance-138178.html
にあるJavaチューニングのホワイト・ペーパーおよびガベージ・コレクションのチューニングのドキュメントも特に役立ちます。
次の表では、主なJVMチューニング可能オプションについて説明します。
パラメータ | 説明 |
---|---|
|
常にクライアントJVMではなくサーバーJVMを使用します。クライアントVMは、実行時間が短いプロセス用に最適化されているため、できるかぎり迅速に起動する必要があります。サーバーVMはウォームアップに時間がかかりますが、長い目で見れば高速です。 |
|
次のように、32ビットまたは64ビット・バージョンのJVMを選択します。
|
|
このオプションは、64ビットのJVMを使用し、ヒープ・サイズが32GB未満の場合に使用します。 |
|
このパラメータによって、JVMで使用できる初期ヒープ・サイズおよび最大ヒープ・サイズが設定されます。ヒープ・サイズを増やすとパフォーマンスが向上する場合がありますが、設定した値が大きすぎる場合、フル・ガベージ・コレクションを実行するための一時停止時間が長くなるという悪影響が生じる可能性があります。通常、初期サイズおよび最大サイズは同じ値に設定する必要があります。 パフォーマンスを最大にするには、DB全体をメモリー内にキャッシュできるようにヒープのサイズを設定します。通常は、サーバーの実行に必要なヒープを割り当て、残りをDBキャッシュに割り当てます。 たとえば、Oracle Unified Directoryインスタンスのヒープ・サイズを
CMSを古い世代のガベージ・コレクタとして使用する場合、ヒープ・サイズを計算するときに、DBキャッシュによって占有されるサイズ(またはヒープの割合)と整合がとれるよう、
|
|
ヒープ領域全体は、古い世代と若い世代に分かれます。このパラメータによって、若い世代のサイズが設定されます。残りのメモリー(古い世代)に対しては、DBキャッシュに加えて、若干のオーバーヘッドを保持できるだけのサイズを確保する必要があります。 |
|
並行Mark Sweep (CMS)ガベージ・コレクタを使用します。このオプションを使用すると、JVMにおけるLDAP操作のレスポンス時間を最小化できますが、サーバーの全体的なパフォーマンス(スループット)に若干の影響を与える可能性があります。一時停止時間が長くなることを許容できない場合は、このオプションを使用してください。 |
|
CMSガベージ・コレクションが開始されるレベルを指定します。デフォルト値は約68%です。デフォルト値以外の割合を設定する場合は、この値を使用してください。 |
|
競合があまり発生しないことが予想される場合に、サーバー内で発生するロックのパフォーマンスを向上させます。 |
|
メモリー内に格納する情報に対して、サイズの大きいページを使用します。この引数は主に、UltraSPARC T1プロセッサを使用するシステムに適用されます。 |
|
多数のCPUを持つシステムにおいて特に便利なパラレル・ガベージ・コレクションをシステムが使用する必要があることを指定します。 |
|
JVMが古い世代に対してパラレル・ガベージ・コレクションを使用する必要があることを指定します。 |
|
パラレル・ガベージ・コレクション実行時にJVMが8個のスレッドを使用する必要があることを指定します。デフォルトではスレッド数はCPU数と同じですが、非常に多数のCPUがあるシステムまたはCMTベースのシステム(UltraSPARC T1プロセッサを使用するシステムなど)ではこれが不適切である可能性があります。 |
36.4 dstune
ユーティリティを使用したJava仮想マシン設定のチューニング
dstune
コマンド行ユーティリティでは、ディレクトリに含まれているデータや使用するシステム・メモリー量などの条件を使用して、Oracle Unified Directoryサーバーおよびツール(import-ldif
、export-ldif
、rebuild-index
およびverify-index
)をチューニングできます。
dstune
ユーティリティを使用して加えられた変更は、サーバーの再起動時に反映されます。
この項には次のトピックが含まれます:
ノート:
「dstuneユーティリティで提供されるチューニング・オプションの理解」で説明されている様々なチューニング・オプションは、Java HotSpot (Oracle Java Standard Editionなど)を使用するJava仮想マシンを実行する場合にのみ使用可能です。Java Hotspotを使用しないJVMを実行する場合は、dstune
のメモリーベースおよびデータベースのオプションを使用できません。
36.4.1 dstune
ユーティリティの使用
dstune
ユーティリティには複数のチューニング・オプションがあります。メモリー制限またはLDAPデータ情報に基づいて、または実行時オプションを指定することによってOracle Unified Directoryサーバーをチューニングできます。
次の各トピックでは、dstune
ユーティリティを使用した様々な使用可能なチューニング・オプションについて説明します。
36.4.1.1 dstune
ユーティリティで提供されるチューニング・オプションの理解
ノート:
Oracle Unified Directory11g リリース2 (11.1.2.3)から、dstune automatic
サブコマンドは使用できなくなりました(ただし、automatic
は、下位互換性のために引き続き使用可能です)。
以前のバージョンのOracle Unified Directoryと同様の自動チューニングを指定するには、--value autotune
サブオプションを指定してdstune
set-runtime-options
サブコマンドを使用します。「実行時チューニングについて」を参照してください。
dstune
サブコマンドおよびオプションの詳細は、「dstune」を参照してください
dstune
ユーティリティでは、次のチューニング・オプションに基づいてサーバーおよびツールをチューニングできます。
36.4.1.1.1 データベース・チューニングについて
データベース・チューニング・モード(dstune
data-based
サブコマンド)では、データベースのコンテンツにこれから含まれる、または現在含まれているデータに基づいてOracle Unified Directoryサーバーをチューニングできます。
データベースにこれから含まれるデータに関する情報を指定するには、エントリの数(--entryNumber
サブオプション)およびエントリのKB単位の平均サイズ(--entrySize
サブオプション)を指定します。
サーバーをチューニングするデータを含むLDIFファイルへのパスを指定することもできます(-l
または--ldifFile
サブオプション)。
オプションまたはデータベースにこれから含まれるデータに関する情報を指定しない場合、data-based
サブコマンドは現在のデータベースのコンテンツを分析し、そのデータについて推奨される最小および最適なメモリー値を決定します。
非対話モードでは、dstune
はデフォルトのメモリー値を使用してサーバーをチューニング(および使用したメモリー値を表示)します。
対話モードでは、dstune
はメモリー値を入力するよう求めますが、複数の推奨値も提示します。
36.4.1.1.2 メモリーベース・チューニングについて
メモリーベース・チューニング・モード(dstune
mem-based
サブコマンド)では、使用するヒープ・サイズに基づいてOracle Unified Directoryサーバーおよびツールをチューニングできます。
サーバーまたはツールに使用するメモリーを指定するには、--memory heap-size
サブオプションを使用します。
サーバーをチューニングする場合は、システム・メモリーを量または割合として指定できます(systemMemory
オプション):
-
量: たとえば、2 GBを使用するには、
systemMemory:2g
を指定します。dstune
ユーティリティは、指定された値を次の2つの部分に分割します。サーバーのJava仮想マシンが使用するヒープ・サイズと、必要なファイルシステム・キャッシュの見積りの2つです。 -
割合: たとえば、サーバーにシステム・メモリーの50%を割り当てる場合は、
systemMemory:50.0%
を指定します。サーバーにマシンを完全に割り当てるには、systemMemory:100%
を指定します。
デフォルトでは、dstune
はサーバーをチューニングしますが、--targetTool
オプションを使用して、チューニングする他のツールを指定できます。
36.4.1.1.3 実行時チューニングについて
実行時チューニング・モード(dstune
set-runtime-options
サブコマンド)では、システムのJVMデフォルト値を使用するか、またはJVM引数を直接指定して、Oracle Unified Directoryサーバーおよびツールをチューニングできます。
自動チューニング・モード(--value autotune
サブオプション)では、サーバーおよび各ツールを起動するたびに自動的にチューニングすることもできます。
デフォルトでは、dstune
はサーバーをチューニングしますが、--targetTool
オプションを使用して、チューニングするツールを指定できます。
36.4.1.2 現在のチューニング・モードの表示
Oracle Unified Directoryサーバーおよびツールの現在のチューニング設定を表示するには、dstune list
サブコマンドを使用します。
たとえば、次のコマンドでは、Oracle Directory Serverインスタンスおよびツールの現在のチューニング設定が表示されます。
$ dstune list Tool : Tuning Value --------------:------------------------------------------------------------------- server : -Xms853m -Xmx853m -d32 -server -XX:MaxTenuringThreshold=1 : -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=55 import-ldif : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA export-ldif : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA rebuild-index : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA verify-index : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA
36.4.2 dstune
ユーティリティの対話モードの実行
dstuneユーティリティの対話モードでは、メモリー制限またはLDAPデータ情報に基づいて、または実行時オプションを指定することによってOracle Unified Directoryおよびツール・サーバーをチューニングする機能が提供されます。
ノート:
チューニング・オプションの詳細は、「dstuneユーティリティで提供されるチューニング・オプションの理解」を参照してください。
36.4.2.1 メモリーベース・チューニング・オプションの設定
dstune
ユーティリティの対話モードを使用し、メモリーベース・チューニング・オプションを使用してOracle Unified Directoryサーバーをチューニングします。
この項では、次の項目について説明します。
36.4.2.1.1 ヒープ・サイズの指定によるOracle Unified Directoryサーバーのチューニング
この項の例では、dstune
ユーティリティを対話モードで実行し、ヒープ・サイズに2GBを指定してOracle Unified Directoryサーバーをチューニングする方法について説明します。
dstune
ユーティリティを次のように実行します。
$ dstune What do you want to do? 1) Tune based on memory limits 2) Tune based on LDAP data information 3) Tune providing runtime options 4) List the current tuning settings q) quit Enter choice: 1 You must provide the tools the runtime options will apply to. If you want to use the settings for the server, provide the value 'server'. If you want to use the settings for all the tools, provide the value 'all'. The other allowed values are import-ldif, export-ldif, rebuild-index, verify-index. You can provide several values separated with a comma (for instance 'export-ldif,rebuild-index'). Tools [server]: You have chosen to tune the server. To tune the server you can provide directly the Java heap size to be used by the server, you can specify the amount of system memory to be used providing a percentage (use 100 % to dedicate the machine to the OUD server) or you can specify the amount of system memory (the sum of the Java Heap and an estimation of the required File System Cache). 1) Provide the heap size 2) Provide the percentage of system memory to be used by the server 3) Provide the size of system memory to be used by the server Enter choice [1]: You must provide the heap size to be used by the tools. To specify a value in megabytes, use 'm' after the value (for instance 768m). For gigabytes, use 'g' (for instance 2.5g). If no unit is specified after the value, megabytes will be used. Heap Size [2.27g]: 2g Calculating Tuning Settings ..... Done. Updating the tuning properties ..... Done. Updating scripts ..... Done.
36.4.2.1.2 システム・メモリーの割合の指定によるOracle Unified Directoryサーバーのチューニング
この項の例では、dstune
ユーティリティを対話モードで実行し、サーバーによって50パーセントのシステム・メモリーが使用されることを指定してOracle Unified Directoryサーバーをチューニングする方法について説明します。サーバーには100,000のエントリがあります。
dstune
ユーティリティを次のように実行します。
$ dstune What do you want to do? 1) Tune based on memory limits 2) Tune based on LDAP data information 3) Tune providing runtime options 4) List the current tuning settings q) quit Enter choice: 1 You must provide the tools the runtime options will apply to. If you want to use the settings for the server, provide the value 'server'. If you want to use the settings for all the tools, provide the value 'all'. The other allowed values are import-ldif, export-ldif, rebuild-index, verify-index. You can provide several values separated with a comma (for instance 'export-ldif,rebuild-index'). Tools [server]: You have chosen to tune the server. To tune the server you can provide directly the Java heap size to be used by the server, you can specify the amount of system memory to be used providing a percentage (use 100 % to dedicate the machine to the OUD server) or you can specify the amount of system memory (the sum of the Java Heap and an estimation of the required File System Cache). 1) Provide the heap size 2) Provide the percentage of system memory to be used by the server 3) Provide the size of system memory to be used by the server Enter choice [1]: 2 To be able to properly calculate the Java heap size for a given percentage, the contents of the database will be analyzed. Reading the Server Configuration ..... Done. Reading the Database Contents ..... Done. The memory you assign for OUD will be divided in two parts: the Java heap size of the OUD process and the estimated memory that will be required for the file system cache. Provide the percentage of the memory that should be assigned to OUD (use 100% if you want to have a dedicated machine for this OUD server). Memory Percentage [25.73]: 50 The specified percentage corresponds to the following memory values: 2.83 GB: 1.59 GB (OUD Java Heap Size) + 1.25 GB (Estimated File System Cache) Do you want to use this value? (yes / no) [yes]: Calculating Tuning Settings ..... Done. Updating the tuning properties ..... Done. Updating scripts ..... Done.
36.4.2.2 データベース・チューニング・オプションの設定
dstune
ユーティリティの対話モードを使用し、データベースベース・チューニングを使用してOracle Unified Directoryサーバーをチューニングします。
この項では、次の項目について説明します。
36.4.2.2.1 データベースのコンテンツを使用したOracle Unified Directoryサーバーのチューニング
この項の例では、dstune
ユーティリティを対話モードで実行し、サーバーに現在含まれているデータ(データベースの現在のコンテンツ)を使用してOracle Unified Directoryサーバーをチューニングする方法について説明します。
dstune
ユーティリティを次のように実行します。
$ dstune What do you want to do? 1) Tune based on memory limits 2) Tune based on LDAP data information 3) Tune providing runtime options 4) List the current tuning settings q) quit Enter choice: 2 Provide information about the LDAP data that will be used to tune the server. You can choose to tune the server based on its current contents, you can provide an LDIF File with the data, or directly the number and average size of your entries. 1) Use the data that the server contains currently 2) Use the contents of an LDIF file 3) Use the number of entries c) cancel Enter choice [1]: To calculate the tuning options, the contents of the database will be analyzed. Reading the Server Configuration ..... Done. Reading the Database Contents ..... Done. Memory Requirements Information for the Data in the Server: System Memory: 5.66 GB Recommended Min. Memory: 444.76 MB (7.67 % of System Memory) 288.73 MB (Java Heap) + 156.04 MB (Estimated File System Cache) Memory for Optimal Performance: 1.46 GB (25.73 % of System Memory) 1.30 GB (Java Heap) + 0.15 GB (Estimated File System Cache) ================================================================================ Recommended Memory: 1.46 GB (25.73 % of System Memory) 1.30 GB (Java Heap) + 0.15 GB (Estimated File System Cache) You must provide the memory you want to use. You can provide the Java heap, the amount of system memory or the percentage of the system memory that you want the OUD server to use. 1) Provide the heap size 2) Provide the percentage of system memory to be used by the server 3) Provide the size of system memory to be used by the server Enter choice [1]: You must provide the heap size to be used by the tools. To specify a value in megabytes, use 'm' after the value (for instance 768m). For gigabytes, use 'g' (for instance 2.5g). If no unit is specified after the value, megabytes will be used. Heap Size [1.30g]: Updating the tuning properties ..... Done. Updating scripts ..... Done.
36.4.2.2.2 LDIFファイルの指定によるOracle Unified Directoryサーバーのチューニング
この項の例では、dstune
ユーティリティを対話モードで実行し、200,000エントリを含むLDIFファイルを指定してOracle Unified Directoryサーバーをチューニングする方法について説明します。
dstune
ユーティリティを次のように実行します。
$ dstune What do you want to do? 1) Tune based on memory limits 2) Tune based on LDAP data information 3) Tune providing runtime options 4) List the current tuning settings q) quit Enter choice: 2 Provide information about the LDAP data that will be used to tune the server. You can choose to tune the server based on its current contents, you can provide an LDIF File with the data, or directly the number and average size of your entries. 1) Use the data that the server contains currently 2) Use the contents of an LDIF file 3) Use the number of entries c) cancel Enter choice [1]: 2 LDIF File Path: /tmp/example.ldif Calculating tuning settings based on the contents of the LDIF file ..... Done. Analyzing file /scratch/joverga/servers/example.ldif (around 2 seconds remaining) ..... Done. Memory Requirements Information for the LDIF File: System Memory: 5.66 GB Recommended Min. Memory: 550.79 MB (9.50 % of System Memory) 321.46 MB (Java Heap) + 229.33 MB (Estimated File System Cache) Memory for Optimal Performance: 1.67 GB (29.52 % of System Memory) 1.45 GB (Java Heap) + 0.22 GB (Estimated File System Cache) ================================================================================ Recommended Memory: 1.67 GB (29.52 % of System Memory) 1.45 GB (Java Heap) + 0.22 GB (Estimated File System Cache) You must provide the memory you want to use. You can provide the Java heap, the amount of system memory or the percentage of the system memory that you want the OUD server to use. 1) Provide the heap size 2) Provide the percentage of system memory to be used by the server 3) Provide the size of system memory to be used by the server Enter choice [1]: You must provide the heap size to be used by the tools. To specify a value in megabytes, use 'm' after the value (for instance 768m). For gigabytes, use 'g' (for instance 2.5g). If no unit is specified after the value, megabytes will be used. Heap Size [1.45g]: Updating the tuning properties ..... Done. Updating scripts ..... Done.
36.4.2.3 実行時チューニング・オプションの設定
dstune
ユーティリティの対話モードを使用して、サーバーおよびツールの実行時チューニング・オプションを設定します。
この項の例では、サーバーのJVMオプションおよびexport-ldif
ツールを設定します。
JVMオプションを使用してOracle Unified Directoryサーバーをチューニングするには、dstune
ユーティリティを次のように実行します。
$ dstune What do you want to do? 1) Tune based on memory limits 2) Tune based on LDAP data information 3) Tune providing runtime options 4) List the current tuning settings q) quit Enter choice: 3 You must provide the tools the runtime options will apply to. If you want to use the settings for the server, provide the value 'server'. If you want to use the settings for all the tools, provide the value 'all'. The other allowed values are import-ldif, export-ldif, rebuild-index, verify-index. You can provide several values separated with a comma (for instance 'export-ldif,rebuild-index'). Tools [server]: server,export-ldif You must provide the runtime options you want to use. If you want to use automatic tune, provide the value 'autotune'. If you want to use the default settings of the Java Virtual Machine on your system, provide the value 'jvm-default'. You can also provide directly the Java arguments that the tools must use. Runtime Options [autotune]: -server -Xmx2048m Updating the tuning properties ..... Done. Updating scripts ..... Done.
36.4.2.4 現在のチューニング設定の表示
この項の例では、dstune
ユーティリティを対話モードで実行してOracle Unified Directoryサーバーおよびツールの現在のチューニング設定を表示します。
dstune
ユーティリティを次のように実行します。
$ dstune What do you want to do? 1) Tune based on memory limits 2) Tune based on LDAP data information 3) Tune providing runtime options 4) List the current tuning settings q) quit Enter choice: 4 Tool : Tuning Value --------------:------------------------------------------------------------------- server : -Xms853m -Xmx853m -d32 -server -XX:MaxTenuringThreshold=1 : -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=55 import-ldif : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA export-ldif : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA rebuild-index : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA verify-index : -Xms715m -Xmx715m -d32 -server -XX:+UseParallelGC -XX:+UseNUMA
36.5 データベース・キャッシュ・サイズの決定
Oracle Unified Directoryインスタンスをインストールまたは構成して初期化した場合、<OUD_INSTANCE_DIR>/OUD/db/userRoot
ディレクトリのサイズを測定することによって、データベース・キャッシュ・サイズの要件を決定できます(Oracle Unified DirectoryインスタンスのデータベースがuserRoot
というデータベース1つのみであることが前提)。
Oracle Unified Directoryインスタンスが構成または初期化されていない場合、DbCacheSizeユーティリティ(com.sleepycat.je.util
)を使用して、1つの索引ファイルまたはユーザー・データを含むファイルの内部ノードを格納するために必要なメモリーを決定できます。
DbCacheSizeユーティリティの使用方法の詳細は、このJavadocページ(http://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/je/util/DbCacheSize.html
)を参照してください。
たとえば、10バイトの索引および平均キー・サイズを備えた4KBの1000万エントリは次のようになります:
[oud@oel5 bin]$ java -jar -XX:+UseCompressedOops /space/Middleware/ Oracle_OUD1/lib/je.jar DbCacheSize -records 10000000 -key 10 -data 4000 === Database Cache Size === Minimum Bytes Maximum Bytes Description --------------- --------------- ----------- 259,725,752 317,907,896 Internal nodes only 40,721,011,192 40,779,193,336 Internal nodes and leaf nodes === Internal Node Usage by Btree Level === Minimum Bytes Maximum Bytes Nodes Level --------------- --------------- ---------- ----- 256,180,800 313,709,120 112,360 1 3,503,312 4,149,456 1,262 2 38,864 46,032 14 3 2,776 3,288 1 4
4KBの1000万エントリのデプロイでは、データベース・キャッシュにフル・ユーザー・データを格納するために37GBが必要です(4KBエントリおよびデータベースのBツリーの内部ノード)。データベース・キャッシュに内部ノードのみを格納する場合、索引ごとに303MBが必要です(10索引では3GB)。
36.6 サーバー構成のチューニング
サーバーの様々なコンポーネントをチューニングして、特定のシナリオにおけるパフォーマンスを改善できます。パフォーマンスのチューニングに関する推奨事項のほとんどは、予想されるワークロード、格納されるデータのタイプ、使用可能なハードウェアとリソースなど、いくつかの可変要素に依存します。
次の各トピックでは、特定のデプロイメントにおいてパフォーマンスを改善するための一般的なチューニングの推奨事項を示します。
36.6.1 バックエンドのチューニング・パラメータ
Berkeleyデータベースのパフォーマンスをチューニングして改善する様々なBerkeley DB JEパラメータについては、このトピックを確認してください。
次の表に、パフォーマンスをチューニングするためのパラメータを示します。
パラメータ | 説明 |
---|---|
|
trueの場合、チェックポインタでは、短い間隔でチェックポイントを完了するために、より多くのリソースが使用されます。Bツリーのラッチは保持され、他のスレッドはより長い期間ブロックされます。ログ・クリーナ・レコードの移行は、削除中およびチェックポイント中にゆっくり実行される(CLEANER_LAZY_MIGRATIONを参照)のではなく、クリーナ・スレッドによって実行されます。trueに設定された場合、チェックポイント中のアプリケーションのレスポンス時間が長くなり、構成済ログの使用率を維持するために、より多くのクリーナ・スレッドが必要になる場合があります。 このプロパティをfalseに設定すると、スループットが向上し、レスポンス時間が短縮されます。 |
|
起動時にデータベースの内容をメモリー内に事前ロードするようにサーバーを構成できます。データベースのサイズが大きい場合、データベース・キャッシュを事前ロードすることによって、サーバー起動後のウォームアップ時間を短縮できます。詳細は、『Oracle Unified Directory構成リファレンス』のローカルDBバックエンドの構成に関する項を参照してください。 |
|
これらのプロパティを使用して、データベース・キャッシュが使用するメモリー量を構成します。最高のパフォーマンスを得るためには、データベース全体がデータベース・キャッシュに収まるようにサーバーを構成することを考慮します。 インポート後にデータベースのおよそのサイズを判定します。たとえば、 $ cd INSTANCE_DIR/OUD/db
$ du -sk userRoot/
910616 userRoot/
Windowsシステム上では、同等の手順を使用してデータベースのサイズを確認します。データベースのサイズは静的ではなく、変更が加えられたときの最初のインポート後に増加する場合があります。 JVMヒープを2GBに設定し(
レプリケーション・メタデータ、ユーザーおよびアプリケーションのために、データベースは時間の経過とともに非常に大きくなります。これは、インポート後のパフォーマンスに影響する場合があります。Oracle Unified DirectoryのJVMヒープ・サイズ(主に古い世代)をチューニングすることをお薦めします。 |
|
十分なサイズのストレージを備えた高速なファイル・システム上でデータベースを保持します。このファイル・システムとは異なる場所にアクセス・ログを配置する必要があります。デフォルトでは、データベースのサイズは元の2倍になります。たとえば、インポート後のデータベースのサイズが1GBである場合、ファイル・システムでは2GB以上が使用可能になっている必要があります。 |
|
このプロパティを使用して、データベース・キャッシュによる情報の保持方法を制御できます。この値を |
|
このプロパティを使用して、書込み操作の永続性を構成します。永続性が低下すると、書込みのパフォーマンスは向上する場合がありますが、JVMやシステムのクラッシュ時にデータが失われる可能性が高くなります。このプロパティの値は、次のいずれかです:
|
|
このプロパティを使用して、JEログ・ファイルのサイズを制御します。ファイル・サイズを増やすと書込みのパフォーマンスが向上する場合がありますが、目標とする使用率の維持がより難しくなる可能性があります。 |
|
これらのプロパティは、クリーナの動作を制御することによって、データベース・サイズの増加を抑え、書込みの高いスループットを維持します。 |
|
多くのCPUを搭載したシステムでは、このプロパティによってデータベース・ロック・マネージャ内の同時実行性が向上する場合があります。 |
36.6.2 コア・サーバーのチューニング・パラメータ
コア・サーバーのパフォーマンスをチューニングして改善する様々なパラメータについては、このトピックを確認してください。
次の表に、パフォーマンスをチューニングするためのコア・サーバーのチューニング・パラメータを示します。
パラメータ | 説明 |
---|---|
num-request-handlers |
このプロパティを構成して、LDAP接続ハンドラで(有効になっている場合はLDAPS接続ハンドラでも)クライアント・リクエストのデコードに複数のスレッドを使用できます。多くのCPUを搭載したシステムでスレッド数を増やすと、パフォーマンスが向上する場合があります。大まかに言えば、このプロパティはCPU数の4分の1(最大値は12)に設定します。
|
num-worker-threads |
このプロパティのデフォルト値はCPU数の2倍で、ほとんどのデプロイメントはこれで十分です。 |
log-file |
アクセス・ログのパブリッシャを高速ファイル・システム上に配置するか、 |
36.6.3 静的グループを含むサーバーのチューニング
サーバーに静的グループが含まれている場合は、これらのトピックでパフォーマンス改善の推奨事項を確認してください。
36.6.3.1 FIFOグループ・エントリ・キャッシュの有効化
FIFOグループ・エントリ・キャッシュに静的グループを格納することによって、サーバーの全体的なパフォーマンスを向上させることができます。静的グループをこのキャッシュに格納することにより、ACIの評価などで必要になるグループ・メンバーシップ参照の実行時間が短縮されます。
ノート:
詳細は、『Oracle Unified Directory構成リファレンス』のFIFOグループ・エントリ・キャッシュの構成に関する項を参照してください。
たとえば、dsconfig
を使用して新しいFIFOグループ・エントリ・キャッシュを作成するには、次のコマンドを実行します。
$ ./dsconfig create-entry-cache -t fifo-group --cache-name myGroupCache \ --set cache-level:1 --set enabled:true -n
dsconfig
を使用してこのFIFOグループ・エントリ・キャッシュのプロパティをリストするには、次のコマンドを実行します。
$ ./dsconfig get-entry-cache-prop --cache-name myGroupCache Property : Value(s) -------------------:----------------------------------------------------------- cache-level : 1 enabled : true exclude-filter : (objectClass=ds-virtual-static-group) include-filter : (|(objectClass=groupOfNames)(objectClass=groupOfUniqueName : s)(objectClass=groupOfEntries)) max-entries : 2147483647 max-memory-percent : 5
36.6.3.2 FIFOグループ・エントリ・キャッシュのプロパティの構成
Oracle Unified Directoryでは、特にデータベース・キャッシュおよびファイル・システム・キャッシュのパフォーマンスを向上するために数種類のキャッシュをサポートしています。FIFOグループ・エントリ・キャッシュは、FIFOキューを使用して、キャッシュされたエントリをトラッキングします。これらは大規模な静的グループ・エントリをキャッシュするように設計されています。
大規模な静的グループが関係しているデプロイメント・シナリオでは、グループ・メンバーシップおよびグループ・ベースのACIの評価を促進するために、グループ・エントリを含むようにエントリ・キャッシュを構成できます。そのためには、次のプロパティを構成します。
-
include-filter: エントリ・キャッシュに置くエントリを決定するための基準を定義する一連のフィルタを指定します。フィルタ・リストが指定されている場合は、指定されたフィルタのうち少なくとも1つと一致するエントリのみがキャッシュに格納されます。
たとえば、次のLDAP基準に一致するエントリがエントリ・キャッシュに格納されます。
“(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=groupOfEntries))”
また、前述のフィルタを次のように分割することもできます。
デフォルト:
(|(objectClass=groupOfNames)(objectClass=groupOfUniqueNames)(objectClass=groupOfEntries))
分割後:
ds-cfg-include-filter: (objectClass=groupOfNames) ds-cfg-include-filter: (objectClass=groupOfUniqueNames) ds-cfg-include-filter: (objectClass=groupOfEntries)
デフォルトと分割後の動作は同じです。どちらのシナリオでも、フィルタのいずれかが一致した場合、そのエントリをグループ・キャッシュに追加します。
ds-cfg-include-filter
プロパティが指定されていない場合は、すべての静的グループを返します。 -
cache-level: キャッシュのインスタンスが複数構成されている場合、キャッシュを構成または処理するキャッシュ順でキャッシュ・レベルを指定します。
デフォルトでは、FIFOグループ・キャッシュの
cache-level
は1
に設定されます。ただし、別のキャッシュ・タイプを定義する場合(たとえば、ソフト参照やファイル・システム・エントリ・キャッシュ)、cache-level
プロパティに別の値を指定する必要があります。つまり、cache-level
は、1
に定義されているFIFOグループ・キャッシュと同じにはしないでください。キャッシュ・レベルは1より大きい値に定義する必要があります。
36.6.3.3 memberまたはuniquemember
索引の評価
グループ・メンバーシップ(ismemberof
属性、ACI)の評価では、member
およびuniquemember
索引を使用します。サーバーのパフォーマンスを向上させるには、これらの索引のindex-entry-limit
プロパティを、ユーザーが所属できるグループの最大数より大きい値に設定することをお薦めします。
ノート:
詳細は、『Oracle Unified Directory構成リファレンス』のローカルDB索引に関する項を参照してください。
たとえば、dsconfig
を使用してmember
索引のindex-entry-limit
プロパティを5,000に設定するには、次のコマンドを実行します。
$ ./dsconfig set-local-db-index-prop --element-name userRoot --index-name member --set index-entry-limit:5000
index-entry-limit
プロパティを設定した後、索引を再構築することをお薦めします。たとえば、
$ rebuild-index -b dc=example,dc=com -i member
ノート:
詳細は、「索引の管理」を参照してください。
dsconfig
を使用してmember索引のプロパティをリストするには、次のコマンドを実行します。
$ ./dsconfig get-local-db-index-prop --element-name userRoot --index-name member Property : Value(s) -------------------------------:--------- attribute : member index-entry-limit : 5000 index-extensible-matching-rule : - index-type : equality
36.6.3.4 100,000を超えるメンバーを含む静的グループの管理
次の操作に対する制限を定義することによって、静的グループを管理できます。
-
静的グループに対する
MOD
、MODDN
およびDEL
操作:administrative limit exceeded
エラーのある操作が存在する場合は、サーバーのmember-lookthrough-limit
プロパティ値を大きくできます。 -
グループに対する
SEARCH
操作:SEARCH
操作が100,000を超えるメンバーを含む静的グループ・エントリを返す場合、ASN.1
エラーが発生します。サーバーのreturned-attribute-value-limit
プロパティを変更して、返されるメンバーの最大数を大きくできます。
これらの各種制限を大きくするには、それに応じてJava仮想マシンに割り当てられているメモリーをチューニングする必要があります。
ノート:
前述の操作の詳細は、『Oracle Unified Directory構成リファレンス』のグローバル構成に関する項を参照してください。
たとえば、次のように指定します。
-
dsconfig
を使用してmember-lookthrough-limit
プロパティを200,000に設定するには、次のコマンドを実行します。$ ./dsconfig set-global-configuration-prop --advanced --set member-lookthrough-limit:200000
-
dsconfig
を使用してreturned-attribute-value-limit
プロパティを150,000に設定するには、次のコマンドを実行します。$ ./dsconfig set-global-configuration-prop --advanced --set returned-attribute-value-limit:150000
-
dsconfig
を使用してこれらのプロパティの値を取得するには、次のコマンドを実行します。$ ./dsconfig get-global-configuration-prop --advanced --property returned-attribute-value-limit --property member-lookthrough-limit Property : Value(s) -------------------------------:--------- member-lookthrough-limit : 200000 returned-attribute-value-limit : 150000
36.6.3.5 静的グループのインポート
Oracle Unified Directoryには、大きいグループ・エントリなどの大きいエントリをインポートできるように、新しいサーバー全体にわたる構成パラメータのimport-big-entries-memory-percent
が導入されています。
次の各トピックでは、静的グループをインポートする方法について説明します。
36.6.3.5.1 静的グループのインポートの概要
インポートをオンラインで実行する場合も、オフラインで実行する場合も、インポートされたLDIFファイルから大きいグループ・エントリなどの大きいエントリを読み込んだ後、メモリーにロードし、メモリーに収めるためにJVMが割り当てるメモリーの量がimport-big-entries-memory-percent
によって示されます。
-
オフライン・インポートの場合、インポートを実行するJVMは
import-ldif
コマンドJVMです。 -
オンライン・インポートの場合、Oracle Unified DirectoryがサーバーのJVMで管理インポート・タスクを作成し、インポートはサーバーのJVM内で実行されます。
インポートが開始されると、考慮されるプロセスで一定量のメモリーが使用可能になります。(一部のメモリーは、DBキャッシュなどの他のコンポーネント用にすでに予約されています。)import-big-entries-memory-percent
により、LDIFファイルから大きいエントリをロードするために予約されるこの空きメモリーの割合が示されます。残りのメモリーはインポートの機能で使用されます。
デフォルトのimport-big-entries-memory-percent
値は10%です。大きいグループ・エントリ(たとえば、数百万のメンバー)を含むLDIFファイルをインポートする際に、JVMのメモリーが不足した場合、この割合を80-90%などの値に引き上げることは適切ではありません。
大きいグループ・エントリのインポート時にメモリーが不足した場合は、import-big-entries-memory-percent
パラメータをチューニングする必要がありますが、JVMヒープ・サイズの増大、java.properties
のチューニング、および後でdsjavaproperties
コマンドを実行することも検討する必要があります。
ノート:
詳細は、『Oracle Unified Directory構成リファレンス』のグローバル構成に関する項を参照してください。
36.6.3.5.2 静的グループをインポートするための構成パラメータの設定
大規模な静的グループの構成パラメータを設定するには、import-big-entries-memory-percent
プロパティを使用します。
たとえば、dsconfig
を使用してimport-big-entries-memory-percent
プロパティを20%に設定するには、次のコマンドを実行します。
$ ./dsconfig set-global-configuration-prop --set import-big-entries-memory-percent:20
dsconfig
を使用してimport-big-entries-memory-percent
プロパティの値を取得するには、次のコマンドを実行します。
$ ./dsconfig get-global-configuration-prop --property import-big-entries-memory-percent Property : Value(s) ----------------------------------:--------- import-big-entries-memory-percent : 20
36.6.4 追加のチューニング推奨事項
次の推奨事項を参照して、特定のシナリオにおけるサーバーのパフォーマンスをさらに改善できます。
次の点に注意してください。
-
エントリ・キャッシュの有効化。エントリ・キャッシュの有効化は、特にディレクトリのサイズが比較的小さい場合(たとえば、数十万エントリまで)に役立ちます。通常は、ソフト参照のエントリ・キャッシュよりもFIFOのエントリ・キャッシュの方が優れた結果を提供します。詳細は、『Oracle Unified Directory構成リファレンス』のエントリ・キャッシュの構成に関する項を参照してください。
大規模なデータベースの場合は、
include-filter
プロパティを使用して、特定のデータ・セットのみをキャッシュ内に格納することをお薦めします。 -
使用されていない仮想属性の無効化。1つ以上の仮想属性によって使用される機能が不要な場合、それらを無効にすると、エントリのデコード時のパフォーマンスが若干向上する可能性があります。詳細は、『Oracle Unified Directory構成リファレンス』の仮想属性の構成に関する項を参照してください。
-
使用されていないアクセス・ロギングの無効化。アクセス・ロギングが不要な場合、サーバーのアクセス・ロガーを無効にすると、パフォーマンスが向上する可能性があります。詳細は、『Oracle Unified Directory構成リファレンス』のログ・パブリッシャの構成に関する項を参照してください。
-
使用されていないアクセス制御ハンドラの無効化。サーバー内のアクセス制御処理が不要な場合は、アクセス制御ハンドラの
enabled
構成プロパティをfalse
に設定することによって、ハンドラを無効にできます。このプロパティはdsconfig
を使用して設定できます。 -
ロック競合の削減。多くのCPUが搭載されたシステム(たとえば、コアごとにいくつかのハードウェア・スレッドを提供するチップマルチスレッド化(CMT)システム)では、
org.opends.server.LockManagerConcurrencyLevel
システム・プロパティを、使用するワーカー・スレッドと同じ数に設定することによって、ロック競合を削減できます。ノート:
このプロパティは、サーバー起動プロセスの非常に早い段階(サーバー構成へのアクセスよりも前)で必要になるため、JVMシステム・プロパティとして設定する必要があります。
-
オペレーティング・システムの接続のクローズの最適化。ビジーのLDAPサーバーで、クライアント・アプリケーションが接続を高い頻度でオープンおよびクローズすると、UNIXカーネルで接続ポートが不足する場合があり、クライアント・アプリケーションはOracle Unified Directory構成リファレンスサーバーに接続できなくなります。このような状況で、次のプロパティを設定すると、オペレーティング・システムは接続ポートをより速くリサイクルできます。
Linux
sysctl -w net.ipv4.tcp_tw_recycle=1
Solaris
/usr/sbin/ndd -set /dev/tcp tcp_time_wait_interval 30000
-
仮想メモリーのスワップ率の最適化。これにより、データはファイルシステム・キャッシュにより長く留まれるようになります。
sysctl -w vm.swappiness=0