rocksdb/db
sdong 6115254416 Fix A Bug Where Concurrent Compactions Cause Further Slowing Down (#10270)
Summary:
Currently, when installing a new super version, when stalling condition triggers, we compare estimated compaction bytes to previously, and if the new value is larger or equal to the previous one, we reduce the slowdown write rate. However, if concurrent compactions happen, the same value might be used. The result is that, although some compactions reduce estimated compaction bytes, we treat them as a signal for further slowing down. In some cases, it causes slowdown rate drops all the way to the minimum, far lower than needed.

Fix the bug by not triggering a re-calculation if a new super version doesn't have Version or a memtable change. With this fix, number of compaction finishes are still undercounted in this algorithm, but it is still better than the current bug where they are negatively counted.

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

Test Plan: Run a benchmark where the slowdown rate is dropped to minimal unnessarily and see it is back to a normal value.

Reviewed By: ajkr

Differential Revision: D37497327

fbshipit-source-id: 9bca961cc38fed965c3af0fa6c9ca0efaa7637c4
2022-06-29 11:20:36 -07:00
..
blob Add blob cache tickers, perf context statistics, and DB properties (#10203) 2022-06-28 13:52:35 -07:00
compaction Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
db_impl Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
wide Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
arena_wrapped_db_iter.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
arena_wrapped_db_iter.h
builder.cc Consolidate manual_compaction_paused_ check (#10070) 2022-06-06 18:32:26 -07:00
builder.h CompactionIterator sees consistent view of which keys are committed (#9830) 2022-04-14 11:11:04 -07:00
c.cc Expose LRU cache num_shard_bits paramater in C api (#10222) 2022-06-29 11:12:25 -07:00
c_test.c Add suggest_compact_range() and suggest_compact_range_cf() to C API. (#10175) 2022-06-23 16:25:25 -07:00
column_family.cc Fix A Bug Where Concurrent Compactions Cause Further Slowing Down (#10270) 2022-06-29 11:20:36 -07:00
column_family.h Dynamically changeable MemPurge option (#10011) 2022-06-23 09:42:18 -07:00
column_family_test.cc Deflake column_family_test to avoid hang (#10060) 2022-05-30 12:31:46 -07:00
compact_files_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
comparator_db_test.cc Document design/specification bugs with auto_prefix_mode (#10144) 2022-06-13 11:08:50 -07:00
convenience.cc Specify largest_seqno in VerifyChecksum (#9919) 2022-05-02 10:22:08 -07:00
corruption_test.cc Persist the new MANIFEST after successfully syncing the new WAL during recovery (#9922) 2022-06-01 10:52:26 -07:00
cuckoo_table_db_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_basic_test.cc Don't count no prefix as Bloom hit (#10244) 2022-06-23 11:00:27 -07:00
db_block_cache_test.cc Remove deprecated block-based filter (#10184) 2022-06-16 15:51:33 -07:00
db_bloom_filter_test.cc Update/clarify required properties for prefix extractors (#10245) 2022-06-28 16:08:30 -07:00
db_compaction_filter_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_compaction_test.cc Fix the flaky cursor persist test (#10250) 2022-06-24 14:02:33 -07:00
db_dynamic_level_test.cc
db_encryption_test.cc
db_filesnapshot.cc Reduce risk of backup or checkpoint missing a WAL file (#10083) 2022-06-01 11:02:27 -07:00
db_flush_test.cc Dynamically changeable MemPurge option (#10011) 2022-06-23 09:42:18 -07:00
db_info_dumper.cc Printing IO Error in DumpDBFileSummary (#9940) 2022-05-04 10:19:53 -07:00
db_info_dumper.h
db_inplace_update_test.cc Fix in-place updates for value types other than kTypeValue (#10254) 2022-06-27 16:37:09 -07:00
db_io_failure_test.cc
db_iter.cc Support iter_start_ts for backward iteration (#10200) 2022-06-28 19:51:05 -07:00
db_iter.h Support iter_start_ts for backward iteration (#10200) 2022-06-28 19:51:05 -07:00
db_iter_stress_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_iter_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_iterator_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_kv_checksum_test.cc Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
db_log_iter_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_logical_block_size_cache_test.cc
db_memtable_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_merge_operand_test.cc Fix GetMergeOperands() heap-use-after-free on flushed memtable (#9805) 2022-04-05 12:26:36 -07:00
db_merge_operator_test.cc
db_options_test.cc Fix typo in comments and code (#10233) 2022-06-22 15:45:21 -07:00
db_properties_test.cc Add blob cache tickers, perf context statistics, and DB properties (#10203) 2022-06-28 13:52:35 -07:00
db_range_del_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_rate_limiter_test.cc Add rate-limiting support to batched MultiGet() (#10159) 2022-06-17 16:40:47 -07:00
db_readonly_with_timestamp_test.cc Add timestamp support to CompactedDBImpl (#10030) 2022-05-24 12:14:10 -07:00
db_secondary_test.cc Fail DB::Open() if logger cannot be created (#9984) 2022-05-27 07:23:31 -07:00
db_sst_test.cc Pass the size of blob files to SstFileManager during DB open (#10062) 2022-05-27 05:58:43 -07:00
db_statistics_test.cc
db_table_properties_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_tailing_iter_test.cc
db_test.cc Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
db_test2.cc Document design/specification bugs with auto_prefix_mode (#10144) 2022-06-13 11:08:50 -07:00
db_test_util.cc Account memory of FileMetaData in global memory limit (#9924) 2022-06-14 13:06:40 -07:00
db_test_util.h Explicitly closing all directory file descriptors (#10049) 2022-06-01 18:03:34 -07:00
db_universal_compaction_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
db_wal_test.cc Destroy iniital db dir for a test in DBWALTest (#10221) 2022-06-21 11:27:10 -07:00
db_with_timestamp_basic_test.cc Support iter_start_ts for backward iteration (#10200) 2022-06-28 19:51:05 -07:00
db_with_timestamp_compaction_test.cc
db_with_timestamp_test_util.cc Add timestamp support to DBImplReadOnly (#10004) 2022-05-19 18:39:41 -07:00
db_with_timestamp_test_util.h Add timestamp support to DBImplReadOnly (#10004) 2022-05-19 18:39:41 -07:00
db_write_buffer_manager_test.cc
db_write_test.cc Fix race condition with WAL tracking and FlushWAL(true /* sync */) (#10185) 2022-06-17 16:45:28 -07:00
dbformat.cc Add new value value type for wide-column entities (#10211) 2022-06-20 18:04:08 -07:00
dbformat.h Add new value value type for wide-column entities (#10211) 2022-06-20 18:04:08 -07:00
dbformat_test.cc
deletefile_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
error_handler.cc
error_handler.h
error_handler_fs_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
event_helpers.cc
event_helpers.h
experimental.cc Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
external_sst_file_basic_test.cc Fix unittest ExternalSSTFileBasicTest.StableSnapshotWhileLoggingToManifest (#10066) 2022-05-31 08:48:57 -07:00
external_sst_file_ingestion_job.cc Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
external_sst_file_ingestion_job.h Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
external_sst_file_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
fault_injection_test.cc
file_indexer.cc
file_indexer.h Use std::numeric_limits<> (#9954) 2022-05-05 13:08:21 -07:00
file_indexer_test.cc
filename_test.cc
flush_job.cc Dynamically changeable MemPurge option (#10011) 2022-06-23 09:42:18 -07:00
flush_job.h Dynamically changeable MemPurge option (#10011) 2022-06-23 09:42:18 -07:00
flush_job_test.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
flush_scheduler.cc
flush_scheduler.h
forward_iterator.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
forward_iterator.h
forward_iterator_bench.cc
history_trimming_iterator.h
import_column_family_job.cc Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
import_column_family_job.h
import_column_family_test.cc Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
internal_stats.cc Add blob cache tickers, perf context statistics, and DB properties (#10203) 2022-06-28 13:52:35 -07:00
internal_stats.h Add blob cache tickers, perf context statistics, and DB properties (#10203) 2022-06-28 13:52:35 -07:00
job_context.h CompactionIterator sees consistent view of which keys are committed (#9830) 2022-04-14 11:11:04 -07:00
kv_checksum.h
listener_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
log_format.h
log_reader.cc Support read rate-limiting in SequentialFileReader (#9973) 2022-05-24 10:28:57 -07:00
log_reader.h Fix bug for WalManager with compressed WAL (#10130) 2022-06-08 14:16:43 -07:00
log_test.cc
log_writer.cc
log_writer.h Fix typo in comments and code (#10233) 2022-06-22 15:45:21 -07:00
logs_with_prep_tracker.cc
logs_with_prep_tracker.h
lookup_key.h
malloc_stats.cc
malloc_stats.h
manual_compaction_test.cc
memtable.cc Fix in-place updates for value types other than kTypeValue (#10254) 2022-06-27 16:37:09 -07:00
memtable.h Fix in-place updates for value types other than kTypeValue (#10254) 2022-06-27 16:37:09 -07:00
memtable_list.cc Encode min_log_number_to_keep and delete_wals_before in one version edit (#9766) 2022-03-31 20:00:52 -07:00
memtable_list.h Fix various spelling errors still found in code (#9653) 2022-05-05 19:45:32 -07:00
memtable_list_test.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
merge_context.h
merge_helper.cc Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
merge_helper.h
merge_helper_test.cc
merge_operator.cc
merge_test.cc
obsolete_files_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
options_file_test.cc
output_validator.cc
output_validator.h
perf_context_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
periodic_work_scheduler.cc
periodic_work_scheduler.h
periodic_work_scheduler_test.cc
pinned_iterators_manager.h
plain_table_db_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
post_memtable_callback.h Snapshots with user-specified timestamps (#9879) 2022-06-10 16:07:03 -07:00
pre_release_callback.h
prefix_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
range_del_aggregator.cc
range_del_aggregator.h
range_del_aggregator_bench.cc
range_del_aggregator_test.cc
range_tombstone_fragmenter.cc
range_tombstone_fragmenter.h
range_tombstone_fragmenter_test.cc
read_callback.h
repair.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
repair_test.cc Fix failed VerifySstUniqueIds unittests (#10043) 2022-05-24 09:00:06 -07:00
snapshot_checker.h Use STATIC_AVOID_DESTRUCTION for static objects with non-trivial destructors (#9958) 2022-05-17 09:39:22 -07:00
snapshot_impl.cc
snapshot_impl.h Snapshots with user-specified timestamps (#9879) 2022-06-10 16:07:03 -07:00
table_cache.cc Fix crash due to MultiGet async IO and direct IO (#10024) 2022-05-20 12:38:21 -07:00
table_cache.h Multi file concurrency in MultiGet using coroutines and async IO (#9968) 2022-05-19 15:36:27 -07:00
table_cache_sync_and_async.h Multi file concurrency in MultiGet using coroutines and async IO (#9968) 2022-05-19 15:36:27 -07:00
table_properties_collector.cc
table_properties_collector.h
table_properties_collector_test.cc
transaction_log_impl.cc Support read rate-limiting in SequentialFileReader (#9973) 2022-05-24 10:28:57 -07:00
transaction_log_impl.h Add checks to GetUpdatesSince (#9459) 2022-04-14 17:12:16 -07:00
trim_history_scheduler.cc
trim_history_scheduler.h
version_builder.cc Add basic kRoundRobin compaction policy (#10107) 2022-06-21 11:56:53 -07:00
version_builder.h Account memory of FileMetaData in global memory limit (#9924) 2022-06-14 13:06:40 -07:00
version_builder_test.cc Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
version_edit.cc Add basic kRoundRobin compaction policy (#10107) 2022-06-21 11:56:53 -07:00
version_edit.h Fix typo in comments and code (#10233) 2022-06-22 15:45:21 -07:00
version_edit_handler.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
version_edit_handler.h
version_edit_test.cc Track SST unique id in MANIFEST and verify (#9990) 2022-05-19 11:04:21 -07:00
version_set.cc Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
version_set.h Add basic kRoundRobin compaction policy (#10107) 2022-06-21 11:56:53 -07:00
version_set_sync_and_async.h Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
version_set_test.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
version_util.h Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
wal_edit.cc
wal_edit.h Use std::numeric_limits<> (#9954) 2022-05-05 13:08:21 -07:00
wal_edit_test.cc
wal_manager.cc Fix bug for WalManager with compressed WAL (#10130) 2022-06-08 14:16:43 -07:00
wal_manager.h Fix bug for WalManager with compressed WAL (#10130) 2022-06-08 14:16:43 -07:00
wal_manager_test.cc Add blob source to retrieve blobs in RocksDB (#10198) 2022-06-20 20:58:11 -07:00
write_batch.cc Fix in-place updates for value types other than kTypeValue (#10254) 2022-06-27 16:37:09 -07:00
write_batch_base.cc
write_batch_internal.h Add API for writing wide-column entities (#10242) 2022-06-25 15:30:47 -07:00
write_batch_test.cc Remove own ToString() (#9955) 2022-05-06 13:03:58 -07:00
write_callback.h
write_callback_test.cc Add WriteOptions::protection_bytes_per_key (#10037) 2022-06-16 23:10:07 -07:00
write_controller.cc
write_controller.h Set Write rate limiter priority dynamically and pass it to FS (#9988) 2022-05-18 00:41:41 -07:00
write_controller_test.cc
write_thread.cc Verify write batch checksum before WAL (#10114) 2022-06-15 13:43:58 -07:00
write_thread.h Snapshots with user-specified timestamps (#9879) 2022-06-10 16:07:03 -07:00