rocksdb/db
Andrew Kryczka cc01985db0 Introduce bottom-pri thread pool for large universal compactions
Summary:
When we had a single thread pool for compactions, a thread could be busy for a long time (minutes) executing a compaction involving the bottom level. In multi-instance setups, the entire thread pool could be consumed by such bottom-level compactions. Then, top-level compactions (e.g., a few L0 files) would be blocked for a long time ("head-of-line blocking"). Such top-level compactions are critical to prevent compaction stalls as they can quickly reduce number of L0 files / sorted runs.

This diff introduces a bottom-priority queue for universal compactions including the bottom level. This alleviates the head-of-line blocking situation for fast, top-level compactions.

- Added `Env::Priority::BOTTOM` thread pool. This feature is only enabled if user explicitly configures it to have a positive number of threads.
- Changed `ThreadPoolImpl`'s default thread limit from one to zero. This change is invisible to users as we call `IncBackgroundThreadsIfNeeded` on the low-pri/high-pri pools during `DB::Open` with values of at least one. It is necessary, though, for bottom-pri to start with zero threads so the feature is disabled by default.
- Separated `ManualCompaction` into two parts in `PrepickedCompaction`. `PrepickedCompaction` is used for any compaction that's picked outside of its execution thread, either manual or automatic.
- Forward universal compactions involving last level to the bottom pool (worker thread's entry point is `BGWorkBottomCompaction`).
- Track `bg_bottom_compaction_scheduled_` so we can wait for bottom-level compactions to finish. We don't count them against the background jobs limits. So users of this feature will get an extra compaction for free.
Closes https://github.com/facebook/rocksdb/pull/2580

Differential Revision: D5422916

Pulled By: ajkr

fbshipit-source-id: a74bd11f1ea4933df3739b16808bb21fcd512333
2017-08-03 15:43:29 -07:00
..
builder.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
builder.h Change RocksDB License 2017-07-15 16:11:23 -07:00
c.cc Added db paths to c 2017-07-24 11:58:02 -07:00
c_test.c Added db paths to c 2017-07-24 11:58:02 -07:00
column_family.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
column_family.h Change RocksDB License 2017-07-15 16:11:23 -07:00
column_family_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compact_files_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compacted_db_impl.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
compacted_db_impl.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compaction.cc Fix universal compaction bug 2017-07-31 14:27:45 -07:00
compaction.h Change RocksDB License 2017-07-15 16:11:23 -07:00
compaction_iteration_stats.h Change RocksDB License 2017-07-15 16:11:23 -07:00
compaction_iterator.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compaction_iterator.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compaction_iterator_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compaction_job.cc Fix compaction div by zero logging 2017-07-24 11:58:02 -07:00
compaction_job.h Change RocksDB License 2017-07-15 16:11:23 -07:00
compaction_job_stats_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compaction_job_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
compaction_picker.cc Fix caching of compaction picker's next index 2017-07-21 20:57:15 -07:00
compaction_picker.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
compaction_picker_test.cc Fix FIFO compaction picker test 2017-07-26 12:12:26 -07:00
compaction_picker_universal.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
compaction_picker_universal.h Change RocksDB License 2017-07-15 16:11:23 -07:00
comparator_db_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
convenience.cc Replace dynamic_cast<> 2017-07-28 16:27:16 -07:00
corruption_test.cc CodeMod: Prefer ADD_FAILURE() over EXPECT_TRUE(false), et cetera 2017-07-16 21:26:02 -07:00
cuckoo_table_db_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_basic_test.cc Build fewer tests in Travis platform_dependent tests 2017-07-27 17:29:01 -07:00
db_block_cache_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_bloom_filter_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_compaction_filter_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_compaction_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_dynamic_level_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_encryption_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_filesnapshot.cc Remove some left-over BSD headers 2017-07-18 11:56:57 -07:00
db_flush_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_impl.cc Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
db_impl.h Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
db_impl_compaction_flush.cc Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
db_impl_debug.cc Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
db_impl_experimental.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_impl_files.cc move TableCache::EraseHandle outside of db mutex 2017-07-27 12:14:41 -07:00
db_impl_open.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_impl_readonly.cc Add Iterator::Refresh() 2017-07-24 10:54:37 -07:00
db_impl_readonly.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_impl_write.cc Remove the orphan assert on !need_log_sync 2017-07-25 18:41:52 -07:00
db_info_dumper.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_info_dumper.h Change RocksDB License 2017-07-15 16:11:23 -07:00
db_inplace_update_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_io_failure_test.cc Fix LITE unit tests 2017-07-26 21:11:47 -07:00
db_iter.cc Add Iterator::Refresh() 2017-07-24 10:54:37 -07:00
db_iter.h Add Iterator::Refresh() 2017-07-24 10:54:37 -07:00
db_iter_test.cc Add Iterator::Refresh() 2017-07-24 10:54:37 -07:00
db_iterator_test.cc Add Iterator::Refresh() 2017-07-24 10:54:37 -07:00
db_log_iter_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_memtable_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_merge_operator_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_options_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_properties_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_range_del_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_sst_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_statistics_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_table_properties_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_tailing_iter_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_test.cc Fix FIFO Compaction with TTL tests 2017-07-28 14:42:59 -07:00
db_test2.cc Fix LITE unit tests 2017-07-26 21:11:47 -07:00
db_test_util.cc Fix LITE unit tests 2017-07-26 21:11:47 -07:00
db_test_util.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
db_universal_compaction_test.cc Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
db_wal_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
db_write_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
dbformat.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
dbformat.h Replace dynamic_cast<> 2017-07-28 16:27:16 -07:00
dbformat_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
deletefile_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
event_helpers.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
event_helpers.h Change RocksDB License 2017-07-15 16:11:23 -07:00
experimental.cc Replace dynamic_cast<> 2017-07-28 16:27:16 -07:00
external_sst_file_basic_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
external_sst_file_ingestion_job.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
external_sst_file_ingestion_job.h Change RocksDB License 2017-07-15 16:11:23 -07:00
external_sst_file_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
fault_injection_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
file_indexer.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
file_indexer.h Change RocksDB License 2017-07-15 16:11:23 -07:00
file_indexer_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
filename_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
flush_job.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
flush_job.h Change RocksDB License 2017-07-15 16:11:23 -07:00
flush_job_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
flush_scheduler.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
flush_scheduler.h Change RocksDB License 2017-07-15 16:11:23 -07:00
forward_iterator.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
forward_iterator.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
forward_iterator_bench.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
internal_stats.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
internal_stats.h Change RocksDB License 2017-07-15 16:11:23 -07:00
job_context.h Change RocksDB License 2017-07-15 16:11:23 -07:00
listener_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
log_format.h Change RocksDB License 2017-07-15 16:11:23 -07:00
log_reader.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
log_reader.h Change RocksDB License 2017-07-15 16:11:23 -07:00
log_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
log_writer.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
log_writer.h Change RocksDB License 2017-07-15 16:11:23 -07:00
malloc_stats.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
malloc_stats.h Change RocksDB License 2017-07-15 16:11:23 -07:00
managed_iterator.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
managed_iterator.h Change RocksDB License 2017-07-15 16:11:23 -07:00
manual_compaction_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
memtable.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
memtable.h Change RocksDB License 2017-07-15 16:11:23 -07:00
memtable_list.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
memtable_list.h Change RocksDB License 2017-07-15 16:11:23 -07:00
memtable_list_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
merge_context.h Change RocksDB License 2017-07-15 16:11:23 -07:00
merge_helper.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
merge_helper.h Change RocksDB License 2017-07-15 16:11:23 -07:00
merge_helper_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
merge_operator.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
merge_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
options_file_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
perf_context_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
pinned_iterators_manager.h Change RocksDB License 2017-07-15 16:11:23 -07:00
plain_table_db_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
prefix_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
range_del_aggregator.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
range_del_aggregator.h Change RocksDB License 2017-07-15 16:11:23 -07:00
range_del_aggregator_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
repair.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
repair_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
snapshot_impl.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
snapshot_impl.h Change RocksDB License 2017-07-15 16:11:23 -07:00
table_cache.cc fix db get/write stats 2017-07-31 12:12:03 -07:00
table_cache.h Change RocksDB License 2017-07-15 16:11:23 -07:00
table_properties_collector.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
table_properties_collector.h Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
table_properties_collector_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
transaction_log_impl.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
transaction_log_impl.h Change RocksDB License 2017-07-15 16:11:23 -07:00
version_builder.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
version_builder.h Change RocksDB License 2017-07-15 16:11:23 -07:00
version_builder_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
version_edit.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
version_edit.h Change RocksDB License 2017-07-15 16:11:23 -07:00
version_edit_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
version_set.cc Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
version_set.h Introduce bottom-pri thread pool for large universal compactions 2017-08-03 15:43:29 -07:00
version_set_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
wal_manager.cc Replace dynamic_cast<> 2017-07-28 16:27:16 -07:00
wal_manager.h Change RocksDB License 2017-07-15 16:11:23 -07:00
wal_manager_test.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
write_batch.cc Revert "comment out unused parameters" 2017-07-21 18:26:26 -07:00
write_batch_base.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
write_batch_internal.h Change RocksDB License 2017-07-15 16:11:23 -07:00
write_batch_test.cc Gcc 7 ParsedInternalKey replace memset with clear function. 2017-07-24 11:31:15 -07:00
write_callback.h Change RocksDB License 2017-07-15 16:11:23 -07:00
write_callback_test.cc Fix flaky write_callback_test 2017-07-25 16:42:11 -07:00
write_controller.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
write_controller.h Change RocksDB License 2017-07-15 16:11:23 -07:00
write_controller_test.cc Change RocksDB License 2017-07-15 16:11:23 -07:00
write_thread.cc Fix the overflow bug in AwaitState 2017-08-03 10:43:28 -07:00
write_thread.h Change RocksDB License 2017-07-15 16:11:23 -07:00