rocksdb/utilities
Yu Zhang 9c94559de7 Optimize compaction for standalone range deletion files (#13078)
Summary:
This PR adds some optimization for compacting standalone range deletion files. A standalone range deletion file is one with just a single range deletion. Currently, such a file is used in bulk loading to achieve something like atomically delete old version of all data with one big range deletion and adding new version of data. These are the changes included in the PR:

1) When a standalone range deletion file is ingested via bulk loading, it's marked for compaction.
2) When picking input files during compaction picking, we attempt to only pick a standalone range deletion file when oldest snapshot is at or above the file's seqno. To do this, `PickCompaction` API is updated to take existing snapshots as an input. This is only done for the universal compaction + UDT disabled combination, we save querying for existing snapshots and not pass it for all other cases.
3) At `Compaction` construction time, the input files will be filtered to examine if any of them can be skipped for compaction iterator. For example, if all the data of the file is deleted by a standalone range tombstone, and the oldest snapshot is at or above such range tombstone, this file will be filtered out.
4) Every time a snapshot is released, we examine if any column family has standalone range deletion files that becomes eligible to be scheduled for compaction. And schedule one for it.

Potential future improvements:
- Add some dedicated statistics for the filtered files.
- Extend this input filtering to L0 files' compactions cases when a newer L0 file could shadow an older L0 file

Pull Request resolved: https://github.com/facebook/rocksdb/pull/13078

Test Plan: Added unit tests and stress tested a few rounds

Reviewed By: cbi42

Differential Revision: D64879415

Pulled By: jowlyzhang

fbshipit-source-id: 02b8683fddbe11f093bcaa0a38406deb39f44d9e
2024-10-25 09:32:14 -07:00
..
agg_merge
backup Avoid unnecessary work in internal calls to GetSortedWalFiles (#12831) 2024-07-01 23:29:02 -07:00
blob_db Fix file deletions in DestroyDB not rate limited (#12891) 2024-08-02 19:31:55 -07:00
cassandra
checkpoint Fix failure to clean the temporary directory due to NotFound in crash test checkpoint creation (#12919) 2024-08-08 15:37:19 -07:00
compaction_filters
convenience
leveldb_options
memory Refactor table_factory into MutableCFOptions (#13077) 2024-10-17 14:13:20 -07:00
merge_operators
option_change_migration
options
persistent_cache
simulator_cache
table_properties_collectors Remove unreachable code (#12846) 2024-07-09 09:24:43 -07:00
trace
transactions Optimize compaction for standalone range deletion files (#13078) 2024-10-25 09:32:14 -07:00
ttl
write_batch_with_index Fix compile errors in C++23 (#12106) 2024-05-28 15:33:57 -07:00
cache_dump_load.cc
cache_dump_load_impl.cc Add dump all keys for cache dumper impl (#12500) 2024-04-12 10:47:13 -07:00
cache_dump_load_impl.h Add dump all keys for cache dumper impl (#12500) 2024-04-12 10:47:13 -07:00
compaction_filters.cc
counted_fs.cc
counted_fs.h
debug.cc Add timestamp support in dump_wal/dump/idump (#12690) 2024-05-23 20:26:57 -07:00
env_mirror.cc
env_mirror_test.cc
env_timed.cc
env_timed.h
env_timed_test.cc
fault_injection_env.cc
fault_injection_env.h
fault_injection_fs.cc Fix non-ASCII character (#12972) 2024-09-03 14:41:55 -07:00
fault_injection_fs.h Handle injected write error after successful WAL write in crash test + misc (#12838) 2024-07-29 13:51:49 -07:00
fault_injection_secondary_cache.cc
fault_injection_secondary_cache.h
memory_allocators.h
merge_operators.cc
merge_operators.h
object_registry.cc
object_registry_test.cc
types_util.cc
types_util_test.cc
util_merge_operators_test.cc
wal_filter.cc