在重写和删除期间发生Cassandra rpc超时

时间:2013-12-31 01:48:37

标签: timeout cassandra cassandra-2.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的可记忆数据大小超过3 mb时,往往会发生超时。
  5. 执行nodetool flush后,挂起的突变变为零,rpc时间消失,直到memble大小再次爬升到3 mb以上。
  6. 我的问题是,我可以调整配置吗?例如,解决方案是每隔5分钟简单地强制在该列族上进行记忆刷新吗?减少此表上的写入负载?一种更快写入和减少挂起阶段的方法?或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

如果您遇到GC压力(您可以通过日志中的GCInspector行告知),您可以通过调整memtable_total_space_in_mb中的cassandra.yaml来减少memtables使用的内存量。您可能还需要reduce the key or row cache settings来代替。