第5章 トランザクションログのチューニング

すべての Directory Server には、管理するすべてのデータベースの操作を書き込むトランザクションログが含まれています。変更などのディレクトリーデータベース操作が実行されるたびに、サーバーは LDAP 操作の結果として呼び出されるすべてのデータベース操作に対して単一のデータベーストランザクションを作成します。これには、エントリーインデックスファイルのエントリーデータの更新と、すべての属性インデックスの更新の両方が含まれます。すべての操作に成功すると、サーバーはトランザクションをコミットし、トランザクションログに操作を書き込み、トランザクション全体がディスクに書き込まれたことを確認します。操作のいずれか が失敗すると、サーバーはトランザクションをロールバックし、すべての操作は破棄されます。サーバーでのこのオールオアナッシングのアプローチは、更新操作が アトミック であることを保証します。操作全体が永続的かつ変更不可能で成功するか、失敗します。
定期的に、Directory Server(内部ハウスキーピングスレッドを介して) はトランザクションログの内容を実際のデータベースインデックスファイルにフラッシュし、トランザクションログにトリミングが必要であるかどうかを確認します。
サーバーで停電などの障害が発生し、異常にシャットダウンした場合でも、最近のディレクトリー変更に関する情報はトランザクションログに保存されます。サーバーを再起動すると、ディレクトリーはエラー状態を自動的に検出し、データベーストランザクションログを使用してデータベースを復元します。
データベーストランザクションのロギングやデータベースの復元は、介入を必要としない自動プロセスですが、パフォーマンスを最適化するためにデータベーストランザクションロギング属性の一部を調整することが推奨されます。
警告
トランザクションのロギング属性は、システムの変更や診断のためにのみ提供されます。これらの設定は、Red Hat テクニカルサポートのアドバイスでのみ変更する必要があります。これらの属性と他の設定属性の設定に一貫性がないと、ディレクトリーが不安定になる可能性があります。

5.1. データベースディレクトリーの別のディスクまたはパーティションへの移動

より高いパフォーマンスを実現するには、ディレクトリーサーバーデータベースとトランザクションログを、NVMe (不揮発性メモリーエクスプレス) ドライブや SSD などの高速ドライブに保存します。
たとえば、Directory Server インスタンスを実行し、/dev/nvme0n1p1 パーティションを /var/lib/dirsrv/slapd-instance_name/db/ ディレクトリーにマウントする場合は、以下を実行します。
  1. インスタンスを停止します。
    # systemctl stop dirsrv@instance_name
  2. /dev/nvme0n1p1 パーティションを一時ディレクトリーにマウントします。以下に例を示します。
    # mount /dev/nvme0n1p1 /mnt/
  3. /var/lib/dirsrv/slapd-instance_name/db/ ディレクトリーのコンテンツを一時的なマウントポイントにコピーします。
    # mv /var/lib/dirsrv/slapd-instance_name/db/* /mnt/
  4. 一時ディレクトリーをアンマウントします。
    # umount /mnt/
  5. /var/lib/dirsrv/slapd-instance_name/db/ も個別のマウントポイントである場合は、ディレクトリーをアンマウントします。
    # umount /var/lib/dirsrv/slapd-instance_name/db/
  6. /etc/fstab ファイルを更新して、システムの起動時に /dev/nvme0n1p1 パーティションを /var/lib/dirsrv/slapd-instance_name/db/ に自動的にマウントします。詳細は、Red Hat System Administrator's Guideの該当セクションを参照してください。
  7. ファイルシステムをマウントします。エントリーを /etc/fstab に追加した場合:
    # mount /var/lib/dirsrv/slapd-instance_name/db/
  8. SELinux が Enforcing モードで実行している場合は、SELinux コンテキストを復元します。
    # restorecon -Rv /var/lib/dirsrv/slapd-instance_name/db/
  9. インスタンスを起動します。
    # systemctl start dirsrv@instance_name