SAIインデックスの設定
Storage-Attached Indexing (SAI) のためにApache Cassandra環境を設定するには、cassandra.yaml
ファイルの重要なカスタマイズが必要です。
ファイルキャッシュをデフォルト値より大きくする
デフォルトでは、ファイルキャッシュのfile_cache_sizeの値は、MaxDirectMemorySize
設定の50%として計算されます。このfile_cache_size
のデフォルトでは、Cassandraが利用可能なメモリを最大限に活用できないため、パフォーマンスが最適にならない可能性があります。
ファイルキャッシュはチャンクキャッシュとも呼ばれます。 |
file_cache_size
の値はcassandra.yaml
で明示的に定義できます。推奨されるのは、
-
--XX:MaxDirectMemorySize
を大きくし、OSやその他のインメモリ構造のために約15〜20%のメモリを残すことです。 -
cassandra.yaml
で、file_cache_size
をその値の75%に明示的に設定します。
テストでは、この設定により、読み取り、書き込み、および混合読み取り/書き込みシナリオ全体でインデックス作成のパフォーマンスが向上します。
コンパクション戦略
読み取りクエリは、生成されるSSTableが少ないコンパクション戦略の方がパフォーマンスが高くなります。
SAIインデックスを含むほとんどの環境では、デフォルトのSizeTieredCompactionStrategy
(STCS) を使用することをお勧めします。この戦略は、テーブルのサブプロパティmin_threshold
で設定された、ディスク上の同様のサイズのSSTableの数が一定数に達すると、マイナーコンパクションをトリガーします。マイナーコンパクションには、キースペース内のすべてのテーブルが含まれるわけではありません。詳細については、コンパクションの設定を参照してください。
時系列データの場合、代替手段はTimeWindowCompactionStrategy
(TWCS) です。TWCSは、一連のタイムウィンドウを使用してSSTableをコンパクションします。タイムウィンドウ内では、TWCSはメモリからフラッシュされたすべてのSSTableをSTCSを使用してより大きなSSTableにコンパクションします。タイムウィンドウの終わりには、これらのSSTableすべてが単一のSSTableにコンパクションされます。その後、次のタイムウィンドウが開始され、プロセスが繰り返されます。タイムウィンドウの期間のみ設定が必要です。TimeWindowCompactionStrategyを参照してください。TWCSの詳細については、Time Window Compaction Strategyを参照してください。
一般的に、インデックスクエリがトークン範囲を直接またはパーティションキーの制限によって制限しない限り、LeveledCompactionStrategy
(LCS) は使用しないでください。ただし、LCSを使用する場合は、次のガイドラインに従ってください。
-
このトピックで説明されている
CREATE TABLE
コマンドのsstable_size_in_mb
オプションのデフォルトである160
MBは、トークン範囲またはパーティションキーを制限しないインデックスクエリでは、パフォーマンスが最適にならない可能性があります。 -
ハードウェアによっては、さらに高い値が適切な場合もありますが、DataStaxは
sstable_size_in_mb
のデフォルト値を少なくとも2倍にすることを推奨しています。
例
CREATE TABLE IF NOT EXISTS my_keyspace.my_table
.
.
.
WITH compaction = {
'class' : 'LeveledCompactionStrategy',
'sstable_size_in_mb' : '320' };
MB値を大きくした後、SAIインデックスを持つテーブルでクエリのパフォーマンスが向上するかどうかを確認します。クエリごとのパフォーマンスの変化を観察するには、CassandraクエリメトリクスのQueryLatency
とSSTableIndexesHit
のデータを確認してください。
SSTableが大きくなるため、より大きな値を使用するとより多くのディスクスペースが予約され、交換される予定のSSTableはコンパクション中に多くのスペースを使用します。ただし、より大きな値を使用すると、SSTableの数が減り、クエリのレイテンシーが低下します。各SAIインデックスは、より大きなインデックスによる長期的な圧縮が向上するため、最終的にはディスク上の消費スペースが少なくなります。
ワークロードが読み取りに支配されておらず、書き込み増幅が増加しているときに、大きな(sstable_max_size
〜2GB)SAIインデックス付きSSTableでクエリのパフォーマンスが低下する場合は、Unified Compaction Strategy (UCS) の使用を検討してください。