0

我正在使用 cassandra 2.0,并且我创建了一个如下所示的列族:

CREATE TABLE user_id_timestamp_index (
  user_id int,
  timestamp text,
  PRIMARY KEY (user_id, timestamp)
) WITH
  bloom_filter_fp_chance=0.010000 AND
  caching='KEYS_ONLY' AND
  comment='' AND
  dclocal_read_repair_chance=0.000000 AND
  gc_grace_seconds=864000 AND
  index_interval=128 AND
  read_repair_chance=0.100000 AND
  replicate_on_write='true' AND
  populate_io_cache_on_flush='false' AND
  default_time_to_live=0 AND
  speculative_retry='NONE' AND
  memtable_flush_period_in_ms=0 AND
  compaction={'class': 'LeveledCompactionStrategy'} AND
  compression={'sstable_compression': 'LZ4Compressor'};

我已经向该表写入了超过 200 万行,没有任何问题,并且我还执行了许多删除操作。

在快速连续删除大约 10k 次左右后出现问题,并且我开始遇到大量 rpc_timeouts。在此期间,通过 cqlsh 进行的简单“从 user_id_timestamp_index 中删除 user_id = 5 AND timestamp = '12345'”失败。

我注意到并尝试过的事情:

  1. 在 rpc 超时期间,2 个节点(共 5 个)上的平均负载飙升至约 50。
  2. 在这些负载密集型写入和删除期间,几乎每 5 分钟进行一次压缩。
  3. 在 rpc_timeouts 期间,tpstats 显示待处理的突变阶段:MutationStage 64(活动)395(待处理)48182373(完成)0 0
  4. 当此 CF 的 memtable 数据大小超过 3 mb 时,往往会发生超时。
  5. 在我执行 nodetool 刷新后,待处理的突变变为零并且 rpc 时间消失,直到 memtable 大小再次爬升到超过 3 mb。

我的问题是,有我可以调整的配置吗?例如,是否可以简单地每 5 分钟在该列族上强制执行一次 memtable 刷新?减轻此表的写入负载?一种加快写入速度并减少待处理阶段的方法?还是有更好的解决方案?

4

1 回答 1

0

如果您遇到 GC 压力(您可以从日志中的 GCInspector 行看出),您可以通过调整memtable_total_space_in_mb. cassandra.yaml您可能还需要减少键或行缓存设置

于 2014-01-05T01:17:17.523 回答