Cassandra 墓碑与诺德托尔之争与修复
我在Cassandra中的一个表中插入了10K个条目,该表在单个分区下的TTL为1分钟 在成功插入之后,我尝试从单个分区读取所有数据,但它抛出如下错误Cassandra 墓碑与诺德托尔之争与修复,cassandra,cassandra-3.0,Cassandra,Cassandra 3.0,我在Cassandra中的一个表中插入了10K个条目,该表在单个分区下的TTL为1分钟 在成功插入之后,我尝试从单个分区读取所有数据,但它抛出如下错误 WARN [ReadStage-2] 2018-04-04 11:39:44,833 ReadCommand.java:533 - Read 0 live rows and 100001 tombstone cells for query SELECT * FROM qcs.job LIMIT 100 (see tombstone_warn_t
WARN [ReadStage-2] 2018-04-04 11:39:44,833 ReadCommand.java:533 - Read 0 live rows and 100001 tombstone cells for query SELECT * FROM qcs.job LIMIT 100 (see tombstone_warn_threshold)
DEBUG [Native-Transport-Requests-1] 2018-04-04 11:39:44,834 ReadCallback.java:132 - Failed; received 0 of 1 responses
ERROR [ReadStage-2] 2018-04-04 11:39:44,836 StorageProxy.java:1906 - Scanned over 100001 tombstones during query 'SELECT * FROM qcs.job LIMIT 100' (last scanned row partion key was ((job), 2018-04-04 11:19+0530, 1, jobType1522820944168, jobId1522820944168)); query aborted
我理解墓碑是sstable中的一个标记,而不是实际的删除
因此,我使用nodetool执行了压实和修复
即使在这之后,当我从表中读取数据时,它也会在日志文件中抛出相同的错误
1) 如何处理这种情况
2) 有人能解释为什么会发生这种情况,为什么压实和修复没有解决这个问题 在表的
gc\u grace\u seconds
设置指定的时间段(默认为10天)之后,墓碑确实会被删除。这样做是为了确保在删除时关闭的任何节点在恢复后都会拾取这些更改。以下是详细讨论此问题的博客帖子:、和或
您可以将单个表上的
gc\u grace\u seconds
选项设置为较低的值,以更快地删除删除的数据,但这仅适用于具有TTED数据的表。您可能还需要调整tombstone\u阈值
&tombstone\u压缩间隔
表格选项,以更快地执行压缩。有关这些选项的说明,请参阅或。新的cassandra支持
$ ./nodetool garbagecollect
在此命令“重新启动前将内存传输到磁盘”
关闭cassandra并重新启动。“您应该在排空后重新启动。”
**你不需要排水!但是,这要视情况而定。!这些是额外的信息 请检查这个:请检查这个:我试着用谷歌搜索它,得到了一些关于这个的信息:所以你能对此给出一些说明吗请检查这个:你不需要关机,但最好是你应该排空并重新启动它。brrrrr-重新启动节点的建议非常糟糕。你不应该需要它,这要看情况而定!大多数情况都不好。因此,您不需要重新启动,用户现在应该知道DRAIN命令的含义。如果您不知道drain命令,请不要使用它。
$ ./nodetool drain # "This closes connection after that, clients can not access. "