How much free space do you have, and how big is the table? Switching to LCS is another option.
-- Jeff Jirsa > On Sep 10, 2018, at 12:09 PM, Oleksandr Shulgin > <oleksandr.shul...@zalando.de> wrote: > >> On Mon, 10 Sep 2018, 19:40 Jeff Jirsa, <jji...@gmail.com> wrote: >> I think it's important to describe exactly what's going on for people who >> just read the list but who don't have context. This blog does a really good >> job: >> http://thelastpickle.com/blog/2016/07/27/about-deletes-and-tombstones.html , >> but briefly: >> >> - When a TTL expires, we treat it as a tombstone, because it may have been >> written ON TOP of another piece of live data, so we need to get that >> deletion marker to all hosts, just like a manual explicit delete >> - Tombstones in sstable A may shadow data in sstable B, so doing anything on >> just one sstable MAY NOT remove the tombstone - we can't get rid of the >> tombstone if sstable A overlaps another sstable with the same partition >> (which we identify via bloom filter) that has any data with a lower >> timestamp (we don't check the sstable for a shadowed value, we just look at >> the minimum live timestamp of the table) >> >> "nodetool garbagecollect" looks for sstables that overlap (partition keys) >> and combine them together, which makes tombstones past GCGS purgable and >> should remove them (and data shadowed by them). >> >> If you're on a version without nodetool garbagecollection, you can >> approximate it using user defined compaction ( >> http://thelastpickle.com/blog/2016/10/18/user-defined-compaction.html ) - >> it's a JMX endpoint that let's you tell cassandra to compact one or more >> sstables together based on parameters you choose. This is somewhat like >> upgradesstables or scrub, but you can combine sstables as well. If you >> choose candidates intelligently (notably, oldest sstables first, or sstables >> you know overlap), you can likely manually clean things up pretty quickly. >> At one point, I had a jar that would do single sstable at a time, oldest >> sstable first, and it pretty much worked for this purpose most of the time. >> >> If you have room, a "nodetool compact" on stcs will also work, but it'll >> give you one huge sstable, which will be unfortunate long term (probably >> less of a problem if you're no longer writing to this table). > > > That's a really nice refresher, thanks Jeff! > > From the nature of the data at hand and because of the SizeTiered compaction, > I would expect that more or less all tables do overlap with each other. > > Even if we would be able to identify the overlapping ones (how?), I expect > that we would have to do an equivalent of the major compaction, but (maybe) > in multiple stages. Not sure that's really worth the trouble for us. > > Thanks, > -- > Alex > >>> On Mon, Sep 10, 2018 at 10:29 AM Charulata Sharma (charshar) >>> <chars...@cisco.com.invalid> wrote: >>> Scrub takes a very long time and does not remove the tombstones. You should >>> do garbage cleaning. It immediately removes the tombstones. >>> >>> >>> >>> Thaks, >>> >>> Charu >>> >>> >>> >>> From: Oleksandr Shulgin <oleksandr.shul...@zalando.de> >>> Reply-To: "user@cassandra.apache.org" <user@cassandra.apache.org> >>> Date: Monday, September 10, 2018 at 6:53 AM >>> To: "user@cassandra.apache.org" <user@cassandra.apache.org> >>> Subject: Drop TTLd rows: upgradesstables -a or scrub? >>> >>> >>> >>> Hello, >>> >>> >>> >>> We have some tables with significant amount of TTLd rows that have expired >>> by now (and more gc_grace_seconds have passed since the TTL). We have >>> stopped writing more data to these tables quite a while ago, so background >>> compaction isn't running. The compaction strategy is the default >>> SizeTiered one. >>> >>> >>> >>> Now we would like to get rid of all the droppable tombstones in these >>> tables. What would be the approach that puts the least stress on the >>> cluster? >>> >>> >>> >>> We've considered a few, but the most promising ones seem to be these two: >>> `nodetool scrub` or `nodetool upgradesstables -a`. We are using Cassandra >>> version 3.0. >>> >>> >>> >>> Now, this docs page recommends to use upgradesstables wherever possible: >>> https://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsScrub.html >>> >>> What is the reason behind it? >>> >>> >>> >>> From source code I can see that Scrubber the class which is going to drop >>> the tombstones (and report the total number in the logs): >>> https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/db/compaction/Scrubber.java#L308 >>> >>> >>> >>> I couldn't find similar handling in the upgradesstables code path. Is the >>> assumption correct that this one will not drop the tombstone as a side >>> effect of rewriting the files? >>> >>> >>> >>> Any drawbacks of using scrub for this task? >>> >>> >>> >>> Thanks, >>> -- >>> >>> Oleksandr "Alex" Shulgin | Senior Software Engineer | Team Flux | Data >>> Services | Zalando SE | Tel: +49 176 127-59-707 >>> >>>