この章では、使用する環境でOracle Unified Directoryをチューニングするために使用できる情報を提供します。
Oracle Unified Directoryの目標は、高いパフォーマンスおよびスケーラビリティを実現することです。デフォルトのサーバー構成およびJVM設定でも、サーバーで優れた結果を実現できる可能性はありますが、若干の基本的なチューニングを行うことで、多くの場合、パフォーマンスが大幅に向上します。
Oracle Unified Directoryのデフォルト設定は、制限されたリソースを使用して機器を稼働させる評価担当者および開発者を対象としています。Oracle Unified Directoryを本番環境にデプロイする場合、Java仮想マシン(JVM)およびサーバー構成に対して若干の初期チューニングを行うことによって、スケーラビリティおよびパフォーマンスを向上(特に書込み操作の場合)させることができます。
この章の構成は、次のとおりです。
パフォーマンスの問題がサーバーとクライアントのどちらに関連しているかを迅速に特定するには、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
エントリにあります。詳細は、第35章「Oracle Unified Directoryのモニタリング」を参照してください。Oracle Enterprise Managerを使用してOracle Unified Directoryのパフォーマンスをモニターすることもできます。詳細は、Oracle® Enterprise Manager Plug-in for Oracle Unified Directoryユーザーズ・ガイドを参照してください。
パフォーマンス・チューニングの戦略は、ディレクトリ・サーバーとプロキシ・サーバーのどちらを実行するかによって異なります。
特定のデプロイメント・シナリオでは、次の項目によってパフォーマンスが向上する場合があります。
Javaのバージョン。提供されているJava Runtime Environment (JRE)の最新リリースを使用します。Oracle Unified Directoryは、Java 7と連携して動作します。
環境変数。サーバーはOPENDS_JAVA_HOME環境変数を使用して、インストール済のJREを指します。複数のバージョンのJavaがシステムにインストールされている場合は、目的のインストールのルートを指すようにJAVA_HOME環境変数を設定します。これにより、Oracle Unified Directoryではない他のアプリケーションが、JAVA_HOME変数によって指定されたバージョンのJREを使用できるようになります。
サーバー用のJREインストールを指定するには、次のいずれかを実行します:
dsjavaproperties
コマンドを使用して、適切な環境変数を設定します。
詳細は、第A.2.5項「dsjavaproperties」を参照してください。
OPENDS_JAVA_BIN環境変数を(JAVAのバイナリ・パスを使用して)設定します。
OPENDS_JAVA_HOME環境変数を(JAVAのインストール・パスを使用して)設定します。
dsjavaproperties
ユーティリティを使用したJava仮想マシン設定のチューニングJAVA_ARGS
環境変数を使用して、JVMに渡すことができるグローバル構成引数を提供するか、java.properties
ファイルを使用できます。java
コマンドで使用できる引数はすべて、どちらの方法でも使用できます。
最適なパフォーマンスを実現するためにJVMをチューニングして、Oracle Unified Directoryアプリケーションを強固かつ応答を早くすることをお薦めします。ヒープ・サイズをチューニングすることによってJVMをチューニングできます。ヒープ・サイズは、次のように分割されます:
若い世代: PDUやローカル変数などの操作を含みます。
古い世代: JEデータベース・キャッシュやエントリ・キャッシュなどのOracle Unified Directoryキャッシュを含みます。
永続世代: 定数およびクラスを含みます。
Oracle Unified Directoryがディレクトリ・サーバー・モードの場合、次のデータベース・キャッシュ・オプションのいずれかを実行できます。
データベース・キャッシュのデータベース全体をキャッシュします。これによって最適なパフォーマンスが与えられますが、キャッシュ・ウォームアップが長くなり、ヒープ・サイズが大きくなります。
データベース・キャッシュでデータベースのBツリー(上位ノードおよび内部ノード)の内部ノードのみをキャッシュし、残りのRAMをファイル・システム・キャッシュ用に保持します。これによってパフォーマンスが向上し、ウォームアップが短くなり、ヒープ・サイズが小さくなります。非常に大きいデプロイ(50MBytesエントリ超)用にお薦めします。小規模および中規模のデプロイにお薦めします。
詳細は、第36.5項「データベース・キャッシュ・サイズの決定」を参照してください。
注意: プロキシ・モードでは、グローバル索引を使用した配布に大きい古い世代を使用します。 |
詳細は、第A.2.5項「dsjavaproperties」を参照してください。
JVMのチューニングに関する追加情報は、Javaパフォーマンスのドキュメント(http://java.sun.com/docs/performance/
)を参照してください。
http://www.oracle.com/technetwork/java/performance-138178.html
にあるJavaチューニングのホワイト・ペーパーおよびガベージ・コレクションのチューニングも特に役に立ちます。
次の表では、主なJVMチューニング可能オプションについて説明します。
パラメータ | 説明 |
---|---|
-server |
常にクライアントJVMではなくサーバーJVMを使用します。クライアントVMは、実行時間が短いプロセス用に最適化されているため、できるかぎり迅速に起動する必要があります。サーバーVMはウォームアップに時間がかかりますが、長い目で見れば高速です。 |
-d32 または-d64 |
次のように、32ビットまたは64ビット・バージョンのJVMを選択します:
|
-XX:+UseCompressedOops |
このオプションは、64ビットのJVMを使用し、ヒープ・サイズが32GB未満の場合に使用します。 |
-Xms2g および-Xmx2g |
このパラメータによって、JVMで使用できる初期ヒープ・サイズおよび最大ヒープ・サイズが設定されます。ヒープ・サイズを増やすとパフォーマンスが向上する場合がありますが、設定した値が大きすぎる場合、フル・ガベージ・コレクションを実行するための一時停止時間が長くなるという悪影響が生じる可能性があります。通常、初期サイズおよび最大サイズは同じ値に設定する必要があります。
パフォーマンスを最大化するには、DB全体をメモリー内にキャッシュできるようにヒープのサイズを設定します。通常は、サーバーの実行に必要なヒープを割り当て、残りをDBキャッシュに割り当てます。 たとえば、Oracle Unified Directoryインスタンスのヒープ・サイズを
CMSを古い世代のガベージ・コレクタとして使用する場合、ヒープ・サイズを計算するときに、DBキャッシュによって占有されるサイズ(またはヒープの割合)と整合がとれるよう、
|
-XX:NewSize=512M |
ヒープ領域全体は、古い世代と若い世代に分かれます。このパラメータによって、若い世代のサイズが設定されます。残りのメモリー(古い世代)に対しては、DBキャッシュに加えて、若干のオーバーヘッドを保持できるだけのサイズを確保する必要があります。 |
-XX:+UseConcMarkSweepGC |
並行Mark Sweep (CMS)ガベージ・コレクタを使用します。このオプションを使用すると、JVMにおけるLDAP操作のレスポンス時間を最小化できますが、サーバーの全体的なパフォーマンス(スループット)に若干の影響を与える可能性があります。一時停止時間が長くなることを許容できない場合は、このオプションを使用してください。 |
-XX:CMSInitiatingOccupancyFraction= |
CMSガベージ・コレクションが開始されるレベルを指定します。デフォルト値は約68%です。デフォルト値以外の割合を設定する場合は、この値を使用してください。 |
-XX:+UseBiasedLocking |
競合があまり発生しないことが予想される場合に、サーバー内で発生するロックのパフォーマンスを向上させます。 |
-XX:LargePageSizeInBytes=256m |
メモリー内に格納する情報に対して、サイズの大きいページを使用します。この引数は主に、UltraSPARC T1プロセッサを使用するシステムに適用されます。 |
-XX:+UseParallelGC |
多数のCPUを持つシステムにおいて特に便利なパラレル・ガベージ・コレクションをシステムが使用する必要があることを指定します。 |
-XX:+UseParallelOldGC |
JVMが古い世代に対してパラレル・ガベージ・コレクションを使用する必要があることを指定します。 |
-XX:ParallelGCThreads=8 |
パラレル・ガベージ・コレクション実行時にJVMが8個のスレッドを使用する必要があることを指定します。デフォルトではスレッド数はCPU数と同じですが、非常に多数のCPUがあるシステムまたはCMTベースのシステム(UltraSPARC T1プロセッサを使用するシステムなど)ではこれが不適切である可能性があります。 |
dstune
ユーティリティを使用したJava仮想マシン設定のチューニングdstune
コマンド行ユーティリティでは、ディレクトリに含まれているデータや使用するシステム・メモリー量などの条件を使用して、Oracle Unified Directoryサーバーおよびツール(import-ldif
、export-ldif
、rebuild-index
およびverify-index
)をチューニングできます。dstune
ユーティリティを使用して加えられた変更は、サーバーの再起動時に反映されます。
この節の内容は以下のとおりです。
注意: 第36.4.1.1項「dstune ユーティリティで提供されるチューニング・オプション」で説明されている様々なチューニング・オプションは、Java HotSpot (Oracle Java Standard Editionなど)を使用するJava仮想マシンを実行する場合にのみ使用可能です。Java Hotspotを使用しないJVMを実行する場合は、dstune のメモリーベースおよびデータベースのオプションを使用できません。 |
dstune
ユーティリティの使用次の項では、dstune
ユーティリティを使用した様々なチューニング・オプションについて説明します。
dstune
ユーティリティで提供されるチューニング・オプションdstune
ユーティリティでは、次のチューニング・オプションに基づいてサーバーおよびツールをチューニングできます。
dstune
サブコマンドおよびオプションの詳細は、付録A「dstune」を参照してください。
注意: Oracle Unified Directory 11gリリース2 (11.1.2.3)から、dstune automatic サブコマンドは使用できなくなりました(ただし、automatic は、下位互換性のために引き続き使用可能です)。
以前のバージョンのOracle Unified Directoryと同様の自動チューニングを指定するには、 |
データベース・チューニング・モード(dstune
data-based
サブコマンド)では、データベースのコンテンツにこれから含まれる、または現在含まれているデータに基づいてOracle Unified Directoryサーバーをチューニングできます。
データベースにこれから含まれるデータに関する情報を指定するには、エントリの数(--entryNumber
サブオプション)およびエントリのKB単位の平均サイズ(--entrySize
サブオプション)を指定します。
サーバーをチューニングするデータを含むLDIFファイルへのパスを指定することもできます(-l
または--ldifFile
サブオプション)。
オプションまたはデータベースにこれから含まれるデータに関する情報を指定しない場合、data-based
サブコマンドは現在のデータベースのコンテンツを分析し、そのデータについて推奨される最小および最適なメモリー値を決定します。
非対話モードでは、dstune
はデフォルトのメモリー値を使用してサーバーをチューニング(および使用したメモリー値を表示)します。
対話モードでは、dstune
はメモリー値を入力するよう求めますが、複数の推奨値も提示します。
メモリーベース・チューニング・モード(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
オプションを使用して、チューニングする他のツールを指定できます。
実行時チューニング・モード(dstune
set-runtime-options
サブコマンド)では、システムのJVMデフォルト値を使用するか、またはJVM引数を直接指定して、Oracle Unified Directoryサーバーおよびツールをチューニングできます。
自動チューニング・モード(--value autotune
サブオプション)では、サーバーおよび各ツールを起動するたびに自動的にチューニングすることもできます。
デフォルトでは、dstune
はサーバーをチューニングしますが、--targetTool
オプションを使用して、チューニングするツールを指定できます。
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
dstune
ユーティリティの対話モードの例この項では、dstune
ユーティリティの対話モードを使用して、Oracle Unified Directoryおよびツール・サーバーをチューニングする方法を説明します。この項の内容は次のとおりです。
この項では、対話モードでdstune
ユーティリティを実行し、メモリーベース・チューニングを使用してOracle Unified Directoryサーバーをチューニングする例を示します。
ヒープ・サイズの指定によるOracle Unified Directoryサーバーのチューニング
次の例では、dstune
ユーティリティを対話モードで実行し、ヒープ・サイズに2GBを指定してOracle Unified Directoryサーバーをチューニングします。
$ 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.
システム・メモリーの割合の指定によるOracle Unified Directoryサーバーのチューニング
次の例では、dstune
ユーティリティを対話モードで実行し、サーバーによって50パーセントのシステム・メモリーが使用されることを指定してOracle Unified Directoryサーバーをチューニングします。サーバーには100,000のエントリがあります。
$ 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.
この項では、対話モードでdstune
ユーティリティを実行し、データベースベース・チューニングを使用してOracle Unified Directoryサーバーをチューニングする例を示します。
データベースのコンテンツを使用したOracle Unified Directoryサーバーのチューニング
次の例では、dstune
ユーティリティを対話モードで実行し、サーバーに現在含まれているデータ(データベースの現在のコンテンツ)を使用してOracle Unified Directoryサーバーをチューニングします。
$ 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.
LDIFファイルの指定によるOracle Unified Directoryサーバーのチューニング
次の例では、dstune
ユーティリティを対話モードで実行し、200,000エントリを含むLDIFファイルを指定してOracle Unified Directoryサーバーをチューニングします。
$ 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.
次の例では、dstune
ユーティリティを対話モードで実行してサーバーおよびツールの実行時チューニング・オプションを設定します。この例では、サーバーのJVMオプションおよびexport-ldif
ツールを設定します。
$ 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.
次の例では、dstune
ユーティリティを対話モードで実行してOracle Unified Directoryサーバーおよびツールの現在のチューニング設定を表示します。
$ 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
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)。
サーバーの様々なコンポーネントをチューニングして、特定のシナリオにおけるパフォーマンスを改善できます。パフォーマンスのチューニングに関する推奨事項のほとんどは、予想されるワークロード、格納されるデータのタイプ、使用可能なハードウェアとリソースなど、いくつかの可変要素に依存します。
この項では、特定のデプロイメントにおいてパフォーマンスの改善が可能な一般的なチューニングの推奨事項を示します。内容は次のとおりです。
次のBerkeley DB JEチューニング・パラメータを使用して、パフォーマンスをチューニングできます。
パラメータ | 説明 |
---|---|
je.checkpointer.highPriority |
trueの場合、チェックポインタでは、短い間隔でチェックポイントを完了するために、より多くのリソースが使用されます。Bツリーのラッチは保持され、他のスレッドはより長い期間ブロックされます。ログ・クリーナ・レコードの移行は、削除中およびチェックポイント中にゆっくり実行される(CLEANER_LAZY_MIGRATIONを参照)のではなく、クリーナ・スレッドによって実行されます。trueに設定された場合、チェックポイント中のアプリケーションのレスポンス時間が長くなり、構成済ログの使用率を維持するために、より多くのクリーナ・スレッドが必要になる場合があります。
このプロパティをfalseに設定すると、スループットが向上し、レスポンス時間が短縮されます。 |
preload-time-limit |
起動時にデータベースの内容をメモリー内に事前ロードするようにサーバーを構成できます。データベースのサイズが大きい場合、データベース・キャッシュを事前ロードすることによって、サーバー起動後のウォームアップ時間を短縮できます。詳細は、Oracle Unified Directory構成リファレンスのローカルDBバックエンドの構成に関する項を参照してください。 |
db-cache-percent and
|
これらのプロパティを使用して、データベース・キャッシュが使用するメモリー量を構成します。最高のパフォーマンスを得るためには、データベース全体がデータベース・キャッシュに収まるようにサーバーを構成することを考慮します。
インポート後にデータベースのおよそのサイズを判定します。たとえば、
$ cd INSTANCE_DIR/OUD/db
$ du -sk userRoot/
910616 userRoot/
Windowsシステム上では、同等の手順を使用してデータベースのサイズを確認します。データベースのサイズは静的ではなく、変更が加えられたときの最初のインポート後に増加する場合があります。 JVMヒープを2GBに設定し(
レプリケーション・メタデータ、ユーザーおよびアプリケーションのために、データベースは時間の経過とともに非常に大きくなります。これは、インポート後のパフォーマンスに影響する場合があります。Oracle Unified DirectoryのJVMヒープ・サイズ(主に古い世代)をチューニングすることをお薦めします。 |
db-directory |
十分なサイズのストレージを備えた高速なファイル・システム上でデータベースを保持します。このファイル・システムとは異なる場所にアクセス・ログを配置する必要があります。デフォルトでは、データベースのサイズは元の2倍になります。たとえば、インポート後のデータベースのサイズが1GBである場合、ファイル・システムでは2GB以上が使用可能になっている必要があります。 |
db-evictor-lru-only |
このプロパティを使用して、データベース・キャッシュによる情報の保持方法を制御できます。この値をfalse に設定すると、内部ノードがキャッシュ内で保持されるため、JEキャッシュによって保持されるデータベースの内容の割合が低い場合のみ、パフォーマンスが向上します。 |
db-txn-durability |
このプロパティを使用して、書込み操作の永続性を構成します。永続性が低下すると、書込みのパフォーマンスは向上する場合がありますが、JVMやシステムのクラッシュ時にデータが失われる可能性が高くなります。このプロパティの値は、次のいずれかです:
|
db-log-file-max |
このプロパティを使用して、JEログ・ファイルのサイズを制御します。ファイル・サイズを増やすと書込みのパフォーマンスが向上する場合がありますが、目標とする使用率の維持がより難しくなる可能性があります。 |
db-num-cleaner-threads およびdb-cleaner-min-utilization |
これらのプロパティは、クリーナの動作を制御することによって、データベース・サイズの増加を抑え、書込みの高いスループットを維持します。 |
db-num-lock-tables |
多くのCPUを搭載したシステムでは、このプロパティによってデータベース・ロック・マネージャ内の同時実行性が向上する場合があります。 |
次に示すコア・サーバーのチューニング・パラメータを使用して、パフォーマンスをチューニングできます:
num-request-handlers
このプロパティを構成して、LDAP接続ハンドラで(有効になっている場合はLDAPS接続ハンドラでも)クライアント・リクエストのデコードに複数のスレッドを使用できます。多くのCPUを搭載したシステムでスレッド数を増やすと、パフォーマンスが向上する場合があります。大まかに言えば、このプロパティはCPU数の4分の1(最大値は12)に設定します。
keep-stats
プロパティを無効にすると、接続ハンドラのロック競合が減少する場合があります。詳細は、Oracle Unified Directory構成リファレンスのLDAP接続ハンドラの構成に関する項を参照してください。
num-worker-threads
このプロパティのデフォルト値はCPU数の2倍で、ほとんどのデプロイメントはこれで十分です。
log-file
アクセス・ログのパブリッシャを高速ファイル・システム上に配置するか、enabled
プロパティをfalse
に設定して完全に無効にします。詳細は、Oracle Unified Directory構成リファレンスのファイル・ベースのアクセス・ログ・パブリッシャの構成に関する項を参照してください。
この項では、サーバーに静的グループが含まれている場合にパフォーマンスを改善するための推奨事項を示します。
この項の内容は次のとおりです。
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
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より大きい値に定義する必要があります。
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
次の操作にはいくつかの制限が定義されています。
静的グループに対する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
Oracle Unified Directoryには、大きいグループ・エントリなどの大きいエントリをインポートできるように、新しいサーバー全体にわたる構成パラメータのimport-big-entries-memory-percent
が導入されています。
インポートをオンラインで実行する場合も、オフラインで実行する場合も、インポートされた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構成リファレンスのグローバル構成に関する項を参照してください。 |
たとえば、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
次に示す追加の推奨事項によって、特定のシナリオにおけるパフォーマンスが向上する場合があります。
エントリ・キャッシュの有効化。エントリ・キャッシュの有効化は、特にディレクトリのサイズが比較的小さい場合(たとえば、数十万エントリまで)に役立ちます。通常は、ソフト参照のエントリ・キャッシュよりも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