Language and Page Formatting Options

Red Hat Directory Server のパフォーマンスチューニング

Red Hat Directory Server 12

サーバーおよびデータベースのパフォーマンスを改善するためのヒント

概要

本書では、Directory Server を手動で調整する方法を説明します。デフォルト設定を使用する際にパフォーマンスが最適でない場合は、この手順を適用します。

Red Hat ドキュメントへのフィードバック (英語のみ)

ご意見ご要望をお聞かせください。ドキュメントの改善点はございませんか。改善点を報告する場合は、以下のように行います。

  • 特定の文章に簡単なコメントを記入する場合は、以下の手順を行います。

    1. ドキュメントの表示が Multi-page HTML 形式になっていて、ドキュメントの右上隅に Feedback ボタンがあることを確認してください。
    2. マウスカーソルで、コメントを追加する部分を強調表示します。
    3. そのテキストの下に表示される Add Feedback ポップアップをクリックします。
    4. 表示される手順に従ってください。
  • より詳細なフィードバックを行う場合は、Bugzilla のチケットを作成します。

    1. Bugzilla の Web サイトに移動します。
    2. Component で Documentation を選択します。
    3. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも記入してください。
    4. Submit Bug をクリックします。

第1章 データベースアクティビティーの監視

管理者は、データベースアクティビティーを監視して、キャッシュなどのチューニング設定が適切に設定されていることを確認する必要があります。

1.1. コマンドラインを使用したデータベースアクティビティーの監視

コマンドラインを使用して監視アクティビティーを表示するには、cn=monitor,cn=database_name,cn=ldbm database,cn=plugins,cn=config に格納されている動的に更新された読み取り専用属性を表示します。

手順

  • データベースの現在のアクティビティーを表示するには、次のように入力します。

    # dsconf -D "cn=Directory Manager" ldap://server.example.com monitor backend userRoot

    このコマンドは、userRoot データベースのアクティビティーを表示します。

1.2. Web コンソールを使用したデータベースアクティビティーの監視

Web コンソールでは、Directory Server は、監視タブの cn=monitor,cn=database_name,cn=ldbm database,cn=plugins,cn=config から動的に更新された読み取り専用監視属性の値を表示します。

手順

  1. MonitoringDatabasedatabase name に移動します。
  2. Entry Cache タブと DN Cache タブにキャッシュ値を表示します。

1.3. データベース監視属性

表1.1 継承の設定

属性詳細

readonly

データベースが読み取り専用モード (1) であるか、読み取り/書き込みモード (0) であるかを示します。

entrycachehits

成功したエントリーキャッシュルックアップの合計数。この値は、サーバーがデータベースからエントリーをリロードせずにエントリーキャッシュからエントリーを取得できた合計回数です。

entrycachetries

インスタンスを開始してからのエントリーキャッシュルックアップの総数。値は総数です。インスタンスが開始されたため、Directory Server はエントリーキャッシュからエントリーを取得しようとしました。

entrycachehitratio

エントリーキャッシュの数は、エントリーキャッシュのルックアップを成功させようとします。この数は、インスタンスを最後に開始してからのルックアップとヒットの合計に基づいています。エントリーキャッシュのヒット率が 100% に近いほど、優れています。

操作がエントリーキャッシュに存在しないエントリーを見つけようとするときはいつでも、サーバーはエントリーを取得するためにデータベースにアクセスする必要があります。したがって、この比率がゼロに近づくと、ディスクアクセスの数が増え、ディレクトリ検索のパフォーマンスが低下します。この比率を改善するには、データベースのエントリーキャッシュのサイズを増やします。

この比率を改善するには、データベースの cn=database_name,cn=ldbm database,cn=plugins,cn=config エントリーの nsslapd-cachememsize 属性の値を増やして、エントリーキャッシュのサイズを増やします。

currententrycachesize

エントリーキャッシュに現在存在するディレクトリーエントリーの合計サイズ(バイト単位)。

キャッシュに存在するエントリーのサイズを増やすには、データベースの cn=database_name,cn=ldbm database,cn=plugins,cn=config エントリーの nsslapd-cachememsize 属性の値を増やします。

maxentrycachesize

Directory Server がエントリーキャッシュに保持できるディレクトリーエントリーの最大サイズ (バイト単位)。

キャッシュに存在するエントリーのサイズを増やすには、データベースの cn=database_name,cn=ldbm database,cn=plugins,cn=config エントリーの nsslapd-cachememsize 属性の値を増やします。

currententrycachecount

特定のバックエンドのエントリーキャッシュに保存されているエントリーの現在の数。

maxentrycachecount

データベースのエントリーキャッシュに保存されるエントリーの最大数。

この値を調整するには、cn=database_name,cn=ldbm database,cn=plugins,cn=config エントリーの nsslapd-cachesize 属性の値を増やします。

dncachehits

サーバーが、再度正規化するのではなく、DN キャッシュから正規化された識別名 (DN) を取得することにより、要求を処理できた回数。

dncachetries

インスタンスを開始してからの DN キャッシュアクセスの総数。

dncachehitratio

キャッシュの比率は、DN キャッシュヒットの成功を試みます。この値が 100% に近いほど、優れています。

currentdncachesize

DN キャッシュに現在存在する DN の合計サイズ(バイト単位)。

DN キャッシュに存在するエントリーのサイズを増やすには、データベースの cn=database_name,cn=ldbm database,cn=plugins,cn=config エントリーの nsslapd-dncachememsize 属性の値を増やします。

maxdncachesize

Directory Server が DN キャッシュに保持できる DN の最大サイズ (バイト単位)。

キャッシュに存在するエントリーのサイズを増やすには、データベースの cn=database_name,cn=ldbm database,cn=plugins,cn=config エントリーの nsslapd-dncachememsize 属性の値を増やします。

currentdncachecount

DN キャッシュに現在存在する DN の数。

maxdncachecount

DN キャッシュで許可される DN の最大数。

第2章 ビューのパフォーマンスの改善

ビューベースの階層のパフォーマンスは、階層自体の構造とディレクトリーツリー (DIT) のエントリー数に依存します。

一般的には、仮想 DIT ビューを使用する場合に、(標準の DIT での同等の検索に対して数パーセントポイント以内で) パフォーマンスに関して若干の変化が発生する可能性があります。検索でビューを呼び出さない場合は、パフォーマンスへの影響はありません。導入の前に、予想される検索パターンおよび負荷に対して仮想 DIT ビューをテストします。

組織内でビューを汎用ナビゲーションツールとして使用する場合は、ビューフィルターで使用される属性をインデックス化することが推奨されます。

さらに、ビューでサブフィルターの評価に使用する仮想リストビュー(VLV)インデックスを設定できます。

特にビュー用に、ディレクトリーの他の部分をチューニングする必要はありません。

2.1. コマンドラインを使用してビューのパフォーマンスを改善するためのインデックスの作成

ビューは指定のフィルターに基づいて検索結果から派生します。フィルターの一部は nsViewFilter で明示的に指定される属性です。フィルターの残りの部分はエントリー階層に基づいており、ビューに含まれる実際のエントリーの entryid および parentid 操作属性を検索します。

(|(parentid=search_base_id)(entryid=search_base_id)

検索された属性(entryidparentid、または nsViewFilterの属性)のいずれかにインデックスが付けられていない場合、検索は部分的にインデックスが解除され、Directory Server はディレクトリツリー全体で一致するエントリを検索します。

ビューのパフォーマンスを改善するには、以下のようにインデックスを作成します。

  • entryid等式インデックス (eq) を作成します。parentid 属性は、デフォルトでシステムインデックスでインデックス化されます。
  • nsViewFilter テストにフィルターがある場合(attribute=*)は、テスト中の属性について、存在インデックスpres)を作成します。このインデックスタイプは、少数のディレクトリエントリに表示される属性でのみ使用する必要があります。
  • nsViewFilter テスト等価(attribute=value)のフィルターの場合、テストする属性に対して 等価インデックス (eq) を作成します。
  • nsViewFilter のフィルターがサブ文字列をテストする場合(attribute=value*)は、テストする属性の substring index (sub)を作成します。
  • nsViewFilterでフィルタが近似値をテストする場合(attribute~=value)、テストされている属性のapproximate index (approximate)を作成します。

たとえば、以下の view フィルターを使用する場合は、以下を実行します。

nsViewFilter: (&(objectClass=inetOrgPerson)(roomNumber=*66))

デフォルトで行われる等価インデックスobjectClassにインデックスを付け、部分文字列インデックスroomNumberにインデックスを付ける必要があります。

前提条件

  • ビューフィルターで使用する属性に注意してください。

手順

  1. オプション: バックエンドを一覧表示し、データベースをインデックス化します。

    # dsconf -D "cn=Directory Manager" instance_name backend suffix list
    dc=example,dc=com (userroot)

    (括弧で)選択したデータベース名を書き留めておきます。

  2. 選択したバックエンドのデータベースの dsconfig ユーティリティーを使用してインデックス設定を作成します。

    特に国際化されたインスタンスの場合、属性名、インデックスタイプと、任意で照合順序(OID)を設定するためのマッチングルールを指定します。

    # dsconf -D "cn=Directory Manager" instance_name backend index add --attr roomNumber --index-type sub userroot

    view フィルターで使用される属性ごとに、このステップを繰り返します。

  3. 新規インデックスを適用するためにデータベースを再インデックスします。

    # dsconf -D "cn=Directory Manager" instance_name backend index reindex userroot

検証

  1. ビューで使用するフィルターが同じ標準ディレクトリーツリーに基づく検索を実行します。

    # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com (&(objectClass=inetOrgPerson)(roomNumber=*66))
    # ldapsearch -D "cn=Directory Manager" -W -H ldap://server.example.com -x -b dc=example,dc=com "(&(objectClass=inetOrgPerson)(roomNumber=*66))"
  2. /var/log/dirsrv/slapd-instance_name/access.のアクセスログを見る。

    検索の RESULT には note=U または Partially Unindexed Filter が詳細に含まれていないはずです。

2.2. Web コンソールを使用してビューのパフォーマンスを改善するためのインデックスの作成

ビューは指定のフィルターに基づいて検索結果から派生します。フィルターの一部は nsViewFilter で明示的に指定される属性です。フィルターの残りの部分はエントリー階層に基づいており、ビューに含まれる実際のエントリーの entryid および parentid 操作属性を検索します。

(|(parentid=search_base_id)(entryid=search_base_id)

検索された属性(entryidparentid、または nsViewFilterの属性)のいずれかにインデックスが付けられていない場合、検索は部分的にインデックスが解除され、Directory Server はディレクトリツリー全体で一致するエントリを検索します。

ビューのパフォーマンスを改善するには、以下のようにインデックスを作成します。

  • entryid等式インデックス (eq) を作成します。parentid 属性は、デフォルトでシステムインデックスでインデックス化されます。
  • nsViewFilter テストにフィルターがある場合(attribute=*)は、テスト中の属性について、存在インデックスpres)を作成します。このインデックスタイプは、少数のディレクトリエントリに表示される属性でのみ使用する必要があります。
  • nsViewFilter テスト等価(attribute=value)のフィルターの場合、テストする属性に対して 等価インデックス (eq) を作成します。
  • nsViewFilter のフィルターがサブ文字列をテストする場合(attribute=value*)は、テストする属性の substring index (sub)を作成します。
  • nsViewFilterでフィルタが近似値をテストする場合(attribute~=value)、テストされている属性のapproximate index (approximate)を作成します。

たとえば、以下の view フィルターを使用する場合は、以下を実行します。

nsViewFilter: (&(objectClass=inetOrgPerson)(roomNumber=*66))

デフォルトで行われる等価インデックスobjectClassにインデックスを付け、部分文字列インデックスroomNumberにインデックスを付ける必要があります。

前提条件

  • Web コンソールでインスタンスにログインしている。
  • ビューフィルターで使用する属性に注意してください。

手順

  1. Database で、インデックスを作成する設定ツリーからサフィックスを選択します。
  2. Indexes および Database Indexes に移動します。
  3. Add Index ボタンをクリックします。
  4. 属性の名前を入力し、属性を選択します。
  5. この属性に対して作成する必要のある Index Types を選択します。
  6. 必要に応じて、特に国際化されたインスタンスの場合に、照合順序(OID)を指定するためのMatching Rulesを追加します。
  7. Index attribute after creation を選択し、後でインデックスを再ビルドします。
  8. Create Index をクリックします。
  9. インデックス化される各属性に対して手順を繰り返します。

検証

  • 追加された属性の名前を入力して、Filter Indexesします。
  • 新たにインデックス化された属性が結果に表示されるはずです。