为什么 nodetool status *keyspace* 在 TRUNCATE 后仍然显示数百 MB 的数据?

Why does nodetool status *keyspace* still show hundreds of MBs of data after TRUNCATE?

我已经为我的 table 在节点 .20 使用了来自 CQLSH 的 TRUNCATE 命令。

自从我发出命令以来已经过去了 20 分钟,nodetool status *myKeyspace* 的输出仍然在 6 个节点中的 4 个上显示大量数据。

我正在使用 Cassandra 3.0.8

192.168.178.20:/usr/share/cassandra$ nodetool status *myKeyspace*
Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address         Load       Tokens       Owns (effective)  Host ID                               Rack
UN  192.168.178.24  324,57 MB  256          32,7%             4d852aea-65c7-42e1-b2bd-f38a320ec827  rack1
UN  192.168.178.28  650,86 KB  256          35,7%             82b67dc5-9f4f-47e9-81d7-a93f28a3e9da  rack1
UN  192.168.178.30  155,68 MB  256          31,9%             28cf5138-7b61-42ca-8b0c-e4be1b5418ba  rack1
UN  192.168.178.32  321,62 MB  256          33,3%             64e106ed-770f-4654-936d-db5b80aa37dc  rack1
UN  192.168.178.36  640,91 KB  256          33,0%             76152b07-caa6-4214-8239-e8a51bbc4b62  rack1
UN  192.168.178.20  103,07 MB  256          33,3%             539a6333-c4ef-487a-b1e4-aac40949af4c  rack1

以下命令在 .24 节点上 运行。貌似还有snapshots/backups保存在某处?但是 Node.24 的数据量为 658 MB,与 nodetool status 报告的 324 MB 不符。那里发生了什么事?

192.168.178.24:/usr/share/cassandra$ nodetool cfstats *myKeyspace*
Keyspace: *myKeyspace*
        Read Count: 0
        Read Latency: NaN ms.
        Write Count: 0
        Write Latency: NaN ms.
        Pending Flushes: 0
                Table: data
                SSTable count: 0
                Space used (live): 0
                Space used (total): 0
                Space used by snapshots (total): 658570012
                Off heap memory used (total): 0
                SSTable Compression Ratio: 0.0
                Number of keys (estimate): 0
                Memtable cell count: 0
                Memtable data size: 0
                Memtable off heap memory used: 0
                Memtable switch count: 0
                Local read count: 0
                Local read latency: NaN ms
                Local write count: 0
                Local write latency: NaN ms
                Pending flushes: 0
                Bloom filter false positives: 0
                Bloom filter false ratio: 0,00000
                Bloom filter space used: 0
                Bloom filter off heap memory used: 0
                Index summary off heap memory used: 0
                Compression metadata off heap memory used: 0
                Compacted partition minimum bytes: 0
                Compacted partition maximum bytes: 0
                Compacted partition mean bytes: 0
                Average live cells per slice (last five minutes): 3.790273556231003
                Maximum live cells per slice (last five minutes): 103
                Average tombstones per slice (last five minutes): 1.0
                Maximum tombstones per slice (last five minutes): 1

请注意,除了我在键空间中清理的那个,没有其他 table。如果使用 TRUNCATE.

时未清除它们,则可能存在来自 cassandra-lucene-index 的一些索引数据

nodetool status 的键空间选项实际上仅用于了解计算所有权时要包括的复制因子和数据中心。负载实际上是针对所有 sstables,而不仅仅是一个键空间。就像 IP 地址、主机 ID 和令牌数量不受设置键空间选项的影响一样。 status 更像是一个全局检查。

Space used by snapshots 预计仍有旧数据。当您执行截断时,它会快照数据(可以通过将 cassandra.yaml 中的 auto_snapshot 设置为 false 来禁用)。要清除所有快照,您可以使用 nodetool clearsnapshot <keyspace>