36 パフォーマンスのチューニング

Oracle Unified Directoryの目標は、高いパフォーマンスおよびスケーラビリティを実現することです。デフォルトのサーバー構成およびJVM設定でも、サーバーで優れた結果を実現できる可能性はありますが、若干の基本的なチューニングを行うことで、多くの場合、パフォーマンスが大幅に向上します。

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チューニング可能オプションについて説明します。

パラメータ 説明

-server

常にクライアントJVMではなくサーバーJVMを使用します。クライアントVMは、実行時間が短いプロセス用に最適化されているため、できるかぎり迅速に起動する必要があります。サーバーVMはウォームアップに時間がかかりますが、長い目で見れば高速です。

-d32または-d64

次のように、32ビットまたは64ビット・バージョンのJVMを選択します。

  • -d32を指定すると、JVMヒープのサイズが3.5GBよりも小さい場合、パフォーマンスが向上します。

  • -XX:+UseCompressedOopsは、JVMヒープのサイズが3.5GBから31GBの場合に指定します。

  • -d64は、JVMヒープのサイズが32GBを超える場合に指定します。

-XX:+UseCompressedOops

このオプションは、64ビットのJVMを使用し、ヒープ・サイズが32GB未満の場合に使用します。

-Xms2gおよび-Xmx2g

このパラメータによって、JVMで使用できる初期ヒープ・サイズおよび最大ヒープ・サイズが設定されます。ヒープ・サイズを増やすとパフォーマンスが向上する場合がありますが、設定した値が大きすぎる場合、フル・ガベージ・コレクションを実行するための一時停止時間が長くなるという悪影響が生じる可能性があります。通常、初期サイズおよび最大サイズは同じ値に設定する必要があります。

パフォーマンスを最大にするには、DB全体をメモリー内にキャッシュできるようにヒープのサイズを設定します。通常は、サーバーの実行に必要なヒープを割り当て、残りをDBキャッシュに割り当てます。

たとえば、Oracle Unified Directoryインスタンスのヒープ・サイズをuserRootという1つのみのJEバックエンドを使用して変更する場合です。新しい世代、古い世代および永続世代に必要な領域を決定する必要があります。異なる世代のサイズを設定するには、次のことを考慮する必要があります:

  • 古い世代に影響を与えるデータベースのサイズ

  • 古い世代に影響を与えるエントリ・キャッシュを使用する必要性の判断。

  • 古い世代に影響を与える、使用されるGCのタイプ。

  • 新しい世代に影響を与える使用量のタイプ。

CMSを古い世代のガベージ・コレクタとして使用する場合、ヒープ・サイズを計算するときに、DBキャッシュによって占有されるサイズ(またはヒープの割合)と整合がとれるよう、-XX:CMSInitiatingOccupancyFractionプロパティを考慮する必要があります。

CMSInitiatingOccupancyFractionを55に設定する場合、DBキャッシュの割合は50に設定する必要があります。また、10GBのディスク上にデータベースがある場合、データベース全体をDBキャッシュ内に収めるには、22GB以上のヒープが必要になります。

-XX:NewSize=512M

ヒープ領域全体は、古い世代と若い世代に分かれます。このパラメータによって、若い世代のサイズが設定されます。残りのメモリー(古い世代)に対しては、DBキャッシュに加えて、若干のオーバーヘッドを保持できるだけのサイズを確保する必要があります。

-XX:+UseConcMarkSweepGC

並行Mark Sweep (CMS)ガベージ・コレクタを使用します。このオプションを使用すると、JVMにおけるLDAP操作のレスポンス時間を最小化できますが、サーバーの全体的なパフォーマンス(スループット)に若干の影響を与える可能性があります。一時停止時間が長くなることを許容できない場合は、このオプションを使用してください。

-XX:CMSInitiatingOccupancyFraction= <percentage>

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プロセッサを使用するシステムなど)ではこれが不適切である可能性があります。

36.4 dstuneユーティリティを使用したJava仮想マシン設定のチューニング

dstuneコマンド行ユーティリティでは、ディレクトリに含まれているデータや使用するシステム・メモリー量などの条件を使用して、Oracle Unified Directoryサーバーおよびツール(import-ldifexport-ldifrebuild-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パラメータについては、このトピックを確認してください。

次の表に、パフォーマンスをチューニングするためのパラメータを示します。

パラメータ 説明

je.checkpointer.highPriority

trueの場合、チェックポインタでは、短い間隔でチェックポイントを完了するために、より多くのリソースが使用されます。Bツリーのラッチは保持され、他のスレッドはより長い期間ブロックされます。ログ・クリーナ・レコードの移行は、削除中およびチェックポイント中にゆっくり実行される(CLEANER_LAZY_MIGRATIONを参照)のではなく、クリーナ・スレッドによって実行されます。trueに設定された場合、チェックポイント中のアプリケーションのレスポンス時間が長くなり、構成済ログの使用率を維持するために、より多くのクリーナ・スレッドが必要になる場合があります。

このプロパティをfalseに設定すると、スループットが向上し、レスポンス時間が短縮されます。

preload-time-limit

起動時にデータベースの内容をメモリー内に事前ロードするようにサーバーを構成できます。データベースのサイズが大きい場合、データベース・キャッシュを事前ロードすることによって、サーバー起動後のウォームアップ時間を短縮できます。詳細は、『Oracle Unified Directory構成リファレンス』のローカルDBバックエンドの構成に関する項を参照してください。

db-cache-percentおよび

db-cache-size

これらのプロパティを使用して、データベース・キャッシュが使用するメモリー量を構成します。最高のパフォーマンスを得るためには、データベース全体がデータベース・キャッシュに収まるようにサーバーを構成することを考慮します。

インポート後にデータベースのおよそのサイズを判定します。たとえば、userRootバックエンドへのインポートを行った後、次のコマンドを(UNIXシステム上で)実行してデータベースのサイズを確認します。

$ cd INSTANCE_DIR/OUD/db
$ du -sk userRoot/
910616 userRoot/

Windowsシステム上では、同等の手順を使用してデータベースのサイズを確認します。データベースのサイズは静的ではなく、変更が加えられたときの最初のインポート後に増加する場合があります。

JVMヒープを2GBに設定し(-Xms2g -Xmx2g)、db-cache-percentを50に設定すると、DBキャッシュで1GBのメモリーが使用されます。DBキャッシュ・サイズをモニターするには、JtraceおよびJMXを使用して、"dn:cn=userRoot Database Environment,cn=monitor"エントリの下にある次のプロパティを確認します:

  • EnvironmentCacheDataBytesがDBキャッシュの予期されるサイズと整合性のある値になっていることを確認します。

  • EnvironmentNCacheMissが、サーバーをロードするときに予期しない増大が発生しないことを確認します。

レプリケーション・メタデータ、ユーザーおよびアプリケーションのために、データベースは時間の経過とともに非常に大きくなります。これは、インポート後のパフォーマンスに影響する場合があります。Oracle Unified DirectoryのJVMヒープ・サイズ(主に古い世代)をチューニングすることをお薦めします。

db-directory

十分なサイズのストレージを備えた高速なファイル・システム上でデータベースを保持します。このファイル・システムとは異なる場所にアクセス・ログを配置する必要があります。デフォルトでは、データベースのサイズは元の2倍になります。たとえば、インポート後のデータベースのサイズが1GBである場合、ファイル・システムでは2GB以上が使用可能になっている必要があります。

db-evictor-lru-only

このプロパティを使用して、データベース・キャッシュによる情報の保持方法を制御できます。この値をfalseに設定すると、内部ノードがキャッシュ内で保持されるため、JEキャッシュによって保持されるデータベースの内容の割合が低い場合のみ、パフォーマンスが向上します。

db-txn-durability

このプロパティを使用して、書込み操作の永続性を構成します。永続性が低下すると、書込みのパフォーマンスは向上する場合がありますが、JVMやシステムのクラッシュ時にデータが失われる可能性が高くなります。このプロパティの値は、次のいずれかです:

  • write-to-disk。すべてのデータが同期的にディスクに書き込まれます。

  • write-to-filesystem。データはすぐにファイル・システムに書き込まれますが、ディスクにフラッシュされるまでファイル・システム内に留まる場合があります。

  • write-to-cache。データは内部バッファに書き込まれ、ファイル・システムにフラッシュされた後、必要な場合はディスクにフラッシュされます。

db-log-file-max

このプロパティを使用して、JEログ・ファイルのサイズを制御します。ファイル・サイズを増やすと書込みのパフォーマンスが向上する場合がありますが、目標とする使用率の維持がより難しくなる可能性があります。

db-num-cleaner-threadsおよびdb-cleaner-min-utilization

これらのプロパティは、クリーナの動作を制御することによって、データベース・サイズの増加を抑え、書込みの高いスループットを維持します。

db-num-lock-tables

多くのCPUを搭載したシステムでは、このプロパティによってデータベース・ロック・マネージャ内の同時実行性が向上する場合があります。

36.6.2 コア・サーバーのチューニング・パラメータ

コア・サーバーのパフォーマンスをチューニングして改善する様々なパラメータについては、このトピックを確認してください。

次の表に、パフォーマンスをチューニングするためのコア・サーバーのチューニング・パラメータを示します。

パラメータ 説明

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構成リファレンス』のファイル・ベースのアクセス・ログ・パブリッシャの構成に関する項を参照してください。

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-level1に設定されます。ただし、別のキャッシュ・タイプを定義する場合(たとえば、ソフト参照やファイル・システム・エントリ・キャッシュ)、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を超えるメンバーを含む静的グループの管理

次の操作に対する制限を定義することによって、静的グループを管理できます。

  • 静的グループに対するMODMODDNおよび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