Files
scylladb/docs/kb/garbage-collection-ics.rst
Kefu Chai e51b2075da docs/kb: correct referenced git sha1 and version number
in 047ce136, we cherry-picked the change adding
garbage-collection-ics.rst to the document. but it was still
referencing the git sha1 and version number in enterprise.

this change updates kb/garbage-collection-ics.rst, so that it

* references the git commit sha1 in this repo
* do not reference the version introducing this feature, as
  per Anna Stuchlik

  > As a rule, we should avoid documenting when something was
  > introduced or set as a default because our documentation
  > was versioned. Per-version information should be listed in
  > the release notes.

Signed-off-by: Kefu Chai <kefu.chai@scylladb.com>

Closes scylladb/scylladb#22195
2025-01-08 07:08:15 +02:00

62 lines
3.5 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
==============================================
Efficient Tombstone Garbage Collection in ICS
==============================================
Background
------------
Accumulating droppable tombstones is a known problem in LSM-tree, which can severely impact read latency.
To avoid accumulating droppable tombstones, the compaction process must purge them in a timely manner. However, a droppable
tombstone cannot be purged unless it's compacted with the data it shadows. For example, let's assume that a droppable
tombstone sits on level 1, whereas its shadowed data is on level 2. You'll only be able to purge that tombstone once compaction
promotes it to level 2.
Size-tiered compaction inefficiently handles this problem with a process known as tombstone compaction. The process works as follows:
#. First, it searches for an SSTable with droppable tombstone density higher than N% (estimates density using tombstone histogram, which lives in Statistics.db).
* The search starts from the highest level, as droppable tombstones in high levels are less likely to find shadowed data.
* The threshold can be configured through the ``tombstone_threshold`` option (the default is 0.2).
#. If it finds such an SSTable, it compacts that single file individually, hoping that the droppable tombstones can be purged.
* The ``tombstone_compaction_interval`` option prevents the data in an SSTable from going through the procedure multiple times in a short interval.
The process above has several drawbacks; for example:
* It doesn't take into account out-of-order writes, so shadowed data may be sitting in lower levels rather than higher ones.
* It can take an unpredictable amount of time for a droppable tombstone to reach the shadowed data counterpart in the LSM tree.
Making Garbage Collection Efficient in ICS
---------------------------------------------
As a remedy to the known problem described above, a new process was introduced to ScyllaDB with `this commit <https://github.com/scylladb/scylladb/commit/c97325436237516fcec97eeb1f283674ea1fef1c>`_.
The process inherits the cross-tier compaction idea from SAG, but instead of using a space-amplification-based trigger,
it uses a tombstone-density trigger instead. It can co-exist with SAG, if enabled.
The only similarity to STCS 'tombstone compaction' is the trigger, i.e., **when** to start the garbage collection procedure. The difference is **how** it is performed.
Instead of individually compacting an SSTable run (as it happens in STCS), ICS picks a tier where any of the runs meet
the tombstone density threshold and compacts that tier with the next bigger tier (or the next smaller one if the largest tier
was picked), resulting in cross-tier compaction.
When the cross-tier approach is used, its a matter of time for the droppable tombstones to reach the data they shadow in the LSM tree.
As a result, ICS can promptly purge droppable tombstones.
To maintain overall compaction efficiency, GC is only considered when same-tier compactions have been completed, as efficiency
is a function of # of files and their relative sizes. Thats also why ICS picks tiers closest in size for the cross-tier
procedure.
How to Use It
---------------
ICS garbage collection is enabled by default.
As in STCS, you can use the compaction options ``tombstone_threshold`` and ``tombstone_compaction_interval`` to tweak the behavior
of the GC process.
See the ScyllaDB documentation for a full description of :doc:`Compaction </cql/compaction>`.