system.log 中的墓碑扫描
Tombstone scanning in system.log
我有一个删除用例较少的 cassandra 集群。我在 system.log 中发现“Read 10 live and 5645464 tombstones cells in keyspace.table”这是什么意思?请帮忙理解。
谢谢。
对于Cassandra来说,记录的所有信息都是immutable。这意味着当您进行删除操作时(使用删除语句或使用 Time To Live [TTL
] 子句显式),数据库将添加另一条带有名为 tombstone 的特殊标志的记录。所有这些记录将保留在数据库中,直到 gc_grace_seconds
期结束;默认为 10 天。
在您的情况下,引擎发现检索到的大部分记录已被删除,但它们仍在等待 gc_grace_seconds 通过,让压缩回收 space。解决此问题的一种可能选择是减少 gc_grace_seconds
的 table。
更多信息,请参考《最后的泡菜》中的this article。
在使用 Cassandra 时要牢记的另一件事是,逻辑删除单元与删除不直接相关。
当您在执行插入时向属性插入 null
值时,Cassandra 会在内部将 attribute/cell 标记为墓碑。因此,即使您没有进行大量删除操作,您最终也可能会得到大量的墓碑。简单易行的解决方案是在插入时不插入属性的 null
值。
按照此语句 Read 10 live and 5645464 tombstones cells in keyspace.table
的说法,可能会针对正在扫描 10
单元格和 5645464
数量的墓碑(单元格)的查询进行 table 扫描与 null
值)同时这样做是我的猜测。需要了解正在执行什么类型的查询才能更深入地了解它。
我有一个删除用例较少的 cassandra 集群。我在 system.log 中发现“Read 10 live and 5645464 tombstones cells in keyspace.table”这是什么意思?请帮忙理解。
谢谢。
对于Cassandra来说,记录的所有信息都是immutable。这意味着当您进行删除操作时(使用删除语句或使用 Time To Live [TTL
] 子句显式),数据库将添加另一条带有名为 tombstone 的特殊标志的记录。所有这些记录将保留在数据库中,直到 gc_grace_seconds
期结束;默认为 10 天。
在您的情况下,引擎发现检索到的大部分记录已被删除,但它们仍在等待 gc_grace_seconds 通过,让压缩回收 space。解决此问题的一种可能选择是减少 gc_grace_seconds
的 table。
更多信息,请参考《最后的泡菜》中的this article。
在使用 Cassandra 时要牢记的另一件事是,逻辑删除单元与删除不直接相关。
当您在执行插入时向属性插入 null
值时,Cassandra 会在内部将 attribute/cell 标记为墓碑。因此,即使您没有进行大量删除操作,您最终也可能会得到大量的墓碑。简单易行的解决方案是在插入时不插入属性的 null
值。
按照此语句 Read 10 live and 5645464 tombstones cells in keyspace.table
的说法,可能会针对正在扫描 10
单元格和 5645464
数量的墓碑(单元格)的查询进行 table 扫描与 null
值)同时这样做是我的猜测。需要了解正在执行什么类型的查询才能更深入地了解它。