我有一个表X
,其中包含二进制列a
作为我的密钥。
这是一个非常大的表,包含大于10M的记录。当我运行此查询时,我看到以下响应:
Received warning (1 of 1) "Read 5000 live rows and 2004 tombstone cells for query SELECT * FROM db.X WHERE a = 086eb4bd16043dbb6bab843cf5c06895 LIMIT 5000 (see tombstone_warn_threshold)" for query "SELECT b AS col_b, c, d AS col_d, e AS col_e, f, g FROM X WHERE a > 0x086EB4BD16043DBB6BAB843CF5C06895"
我有非常严重的性能问题和我目前的猜测,因为Cassandra的这种误解(希望因为我的配置错误)
答案 0 :(得分:0)
你会收到一个警告,因为你周围有太多的墓碑。
tombstone_warn_threshold (默认值:1000)查询在警告之前可以扫描的最大墓碑数。
http://docs.datastax.com/en/cassandra/2.1/cassandra/configuration/configCassandra_yaml_r.html
如果更多的墓碑累积并且不会很快压缩,那么也会出现failure_threshold。
如果你删除了大量数据,就会发生这种情况 - 实际上一次删除就是写一个墓碑。您的查询限制为5000可能会从已删除的行中读取许多逻辑删除,这是一个严重的性能问题。
你可以发表你的表定义吗?还有你的用例?
当我尝试将cassanda用作队列或使用带有短ttl的ttl数据时,我看到了这种模式。第一个可能是cassandra的反模式,后者值得一看TimeWindowCompactionStrategy。