配置 SAI 索引
为存储附加索引 (SAI) 配置 Apache Cassandra 环境需要对 cassandra.yaml
文件进行一些重要的自定义。
将文件缓存增加到默认值以上
默认情况下,文件缓存的 file_cache_size 值计算为 MaxDirectMemorySize
设置的 50%。file_cache_size
的此默认值可能会导致性能不佳,因为 Cassandra 无法充分利用可用内存。
文件缓存也称为块缓存。 |
可以在 cassandra.yaml
中显式定义 file_cache_size
值。建议
-
增加
--XX:MaxDirectMemorySize
,为操作系统和其他内存中结构保留大约 15-20% 的内存。 -
在
cassandra.yaml
中,将file_cache_size
显式设置为该值的 75%。
在测试中,此配置在读取、写入和混合读取/写入场景中提高了索引性能。
压缩策略
使用生成较少 SSTable 的压缩策略可以提高读取查询的性能。
对于大多数包含 SAI 索引的环境,建议使用默认的 SizeTieredCompactionStrategy
(STCS)。此策略在磁盘上存在多个大小相似的 SSTable 时触发次要压缩,如表子属性 min_threshold
所配置。次要压缩不涉及键空间中的所有表。有关详细信息,请参阅 配置压缩。
对于时间序列数据,另一种选择是 TimeWindowCompactionStrategy
(TWCS)。TWCS 使用一系列时间窗口压缩 SSTable。在时间窗口内,TWCS 使用 STCS 将从内存中刷新到磁盘的所有 SSTable 压缩成更大的 SSTable。在时间窗口结束时,所有这些 SSTable 都将压缩成单个 SSTable。然后下一个时间窗口开始,该过程重复。时间窗口的持续时间是唯一需要的设置。请参阅 TimeWindowCompactionStrategy。有关 TWCS 的更多信息,请参阅 时间窗口压缩策略。
一般情况下,除非您的索引查询直接或通过对分区键进行限制来限制令牌范围,否则不要使用 LeveledCompactionStrategy
(LCS)。但是,如果您决定使用 LCS,请使用以下指南
-
CREATE TABLE
命令的sstable_size_in_mb
选项的默认值为 160 MB,如本 主题 中所述,这可能会导致对未限制令牌范围或分区键的索引查询的性能不佳。 -
虽然根据您的硬件,甚至更高的值可能更合适,但 DataStax 建议至少将
sstable_size_in_mb
的默认值翻倍。
示例
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 上的查询性能下降,请考虑使用统一压缩策略 (UCS)。