我们正在运行Cassandra 2.1.14并在几个月之前在我们的一个CF上迁移到TWCS,从那时起,虽然获得了更好的性能,并且每个查询的平均读取量大幅减少,但我们注意到旧的SSTables永远不会被驱逐。 / p>
运行Cassandra的sstableexpiredblockers实用程序我们看到原因是旧的SSTabes的最大时间戳高于甚至新的SSTable的最小时间戳,这意味着即使实际的SSTable完全被墓碑化,Cassandra也不会试图驱逐(我们写了一个小的Java应用程序,直接通过SSTable来确保)。
所以问题是 - 为什么甚至非常新的SSTable都有旧行? 只是为了澄清:我们的代码库永远不会更新行,所有行都有TTL。
另一个问题,鉴于这是我们目前的情况,是否有一种简单的方法可以迫使Cassandra对旧的SSTable进行驱逐?
附件是SSTables及其最小\最大时间戳:
答案 0 :(得分:0)
因此我们发现问题的根本原因是读取修复和启用推测重试。禁用它们并运行主要压缩一次以删除过时的SSTable并且一切都按预期工作。