インデックス作成のパフォーマンスの構成と調整

インデックス作成のスループットを最大限に高めるようにDSE Searchを構成し、調整します。

cassandra.yaml

cassandra.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/cassandra/cassandra.yaml
tarボール・インストール installation_location/resources/cassandra/conf/cassandra.yaml

dse.yaml

dse.yamlファイルの場所は、インストールのタイプによって異なります。
パッケージ・インストール /etc/dse/dse.yaml
tarボール・インストール installation_location/resources/dse/conf/dse.yaml
DSE Searchには、以下の2つのインデックス作成モードがあります。
  • ニア・リアルタイム(NRT)インデックス作成は、Apache SolrとApache Lucene®のデフォルトのインデックス作成モードです。
  • ライブ・インデックス作成はリアルタイム(RT)インデックス作成とも呼ばれ、Lucene RAMバッファーに対する直接検索をサポートしており、より頻繁で安価なソフト・コミットが可能であり、新たにインデックスが作成されたデータをすばやく認識できるようになります。ただし、RTインデックス作成では、他の同等のNRT設定よりも大きいRAMバッファーとメモリー使用量が必要になります。

使用しているCPUの数

調整する前に、使用している物理CPUの数を特定してください。JVMは仮想CPUのハイパースレッディングをサポートしていません。

インデックス作成のパフォーマンスの調整

デフォルトのmergeScheduler設定は、自動的に設定されます。DSE 6.0以降では、これらの設定を調整しないでください。以前のバージョンでは、デフォルト設定が異なり、調整が必要な場合がありました。

RAMバッファーのサイズ変更

dse.yaml でのRAMバッファーのデフォルト設定は、次の場合に適しています。
  • ram_buffer_heap_space_in_mb: 1024
  • ram_buffer_offheap_space_in_mb: 1024

    NRTはオフヒープを使用しないため、RTにのみ適用されます。

これらの設定を調整して、セグメントをフラッシュする前に、すべてのSolrコアが更新を蓄積するために使用するグローバル・メモリーの量を構成します。この値の設定が低すぎると、進行中の書き込みアクティビティの期間中に一定のフラッシュ状態が発生する可能性があります。NRTの場合、これらの強制セグメント・フラッシュは、保留中の自動ソフト・コミットのスケジュールも解除し、潜在的に多くの小さなセグメントをフラッシュしないようにします。

JMX MBeanのパス: com.datastax.bdp.metrics.search.RamBufferSize

TPCコアの調整

DSE Searchワークロードは、書き込み(インデックス作成)用のハイパースレッディングの恩恵を受けません。両方のモード(NRTおよびRT)のインデックス作成スループットのDSE Searchを最適化するには、cassandra.yamltpc_coresをデフォルトから物理CPUの数に変更します。この設定は、検索ノードでのみ変更してください。この変更により、検索以外のワークロードのスループットが低下する可能性があるためです。

AIOの無効化

検索インデックス作成中や頻繁に使用されるデータセットの読み取りまたは書き込みクエリー中にパフォーマンスが低下している場合は、開発環境で次のことを試してください。
  1. 非同期I/O(AIO)を無効にします。
  2. file_cache_size_in_mb512に設定します。
パフォーマンスが向上する場合は、プロダクション環境でこれらの設定を使用することを検討してください。

デフォルトでは、DataStax Enterprise 6.0以降では、AIOと、SSTableデータのOSページ・キャッシュを置き換えるカスタム・チャンク・キャッシュを使用します。このチャンク・キャッシュは、マシンで使用可能なメモリーの3分の1、または明示的に構成されたJVM MaxDirectMemorySizeの半分を使用するように構成されています。DataStax Enterpriseの検索インデックスの更新はすべて、最初にインデックス作成されているパーティションまたは行に対してread-before-writeを実行します。この機能は、DataStax Enterpriseがコア・データベースの内部読み取りパスを使用し、AIO/チャンク・キャッシュ装置が使用されることを意味します。

AIOを無効にするには、起動時に-Ddse.io.aio.enabled=falseをDataStax Enterpriseに渡します。実行されると、SSTableとLuceneセグメント、およびその他のマイナーなオフヒープ要素がOSページ・キャッシュに常駐し、カーネルによって管理されます。AIOを無効にすると、system.logWARNエントリーが生成されます。例を次に示します。
WARN [main] 2019-05-01 21:37:16,563 StartupChecks.java:632 
        - Asynchronous I/O has been manually disabled (through the'dse.io.aio.enabled' 
        system property). This may result in subpar performance.

データセットが利用可能なメモリーよりも大きい場合、AIOを無効にすると潜在的にマイナスの影響として、DataStax Enterpriseがディスクにアクセスする際の読み取りレイテンシーがかなり長くなる可能性があります。

バック・プレッシャー

dse.yamlback_pressure_threshold_per_coreは、インデックスの再構築/インデックス再作成にのみ影響します。以前のバージョンからDSE 6.0にアップグレードした場合、1024の新しいデフォルト値を使用するようにしてください。

NRTのインデックス再作成の調整

DSE Searchは、メモリー不足を回避し安定したパフォーマンスを維持するため、バック・プレッシャー・メカニズムによるマルチスレッドの非同期インデックス作成機能を備えています。マルチスレッドのインデックス作成により、複数のCPUコアを持つマシンのパフォーマンスが向上します。

インデックス再作成のみの場合は、IndexPool MBeanを使用することで、運用上の可視性が得られ、JMXを使用した調整が可能です。

NRTに限り、手動でインデックスを再作成した際にNRTスループットを最大限に高めるには検索インデックス構成を調整します。
  • デフォルトで10秒(10000 ms)に設定されているソフト・コミット時間を増やします。たとえば、時間を60秒に増やしてから、検索インデックスを再読み込みします。
    ALTER SEARCH INDEX CONFIG ON demo.health_data SET autoCommitTime = 60000;
    保留中の変更をアクティブにするには:
    RELOAD SEARCH INDEX ON demo.health_data;
autoSoftCommit属性を変更することのマイナス面は、新たに更新された行が検索結果に表示されるようになるまでの時間が通常(10000 ms)より長くなることです。

RTのインデックス作成の調整

ライブ・インデックス作成により、ドキュメントが検索可能になるまでの時間が短縮されます。
  1. ライブ・インデックス作成(RTとも呼ばれます)を有効にするには:
    ALTER SEARCH INDEX CONFIG ON demo.health_data SET realtime = true;
  2. ライブ・インデックス作成を構成するには、autoCommitTimeを100~1000 msの値に設定します。
    ALTER SEARCH INDEX CONFIG ON demo.health_data SET autoCommitTime = 1000;

    100~1000 msの調整値でテストします。この範囲で最適な設定は、ハードウェアと環境によって異なります。ライブ・インデックス作成(RT)の場合、この更新間隔の上限は1000 msです。1000 msを超える値は認識されません。

  3. 検索ノードに少なくとも14 GBのヒープがあることを確認してください。
  4. ヒープを変更する場合は、DataStax Enterpriseを再起動して、変更されたヒープ・サイズでライブ・インデックス作成を使用します。