設定 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)。