And waits for them. That's pointless.
{
    const auto data_settings = data.getSettings();
    size_t busy_threads_in_pool = CurrentMetrics::values[CurrentMetrics::BackgroundPoolTask].load(std::memory_order_relaxed);
    
    UInt64 disk_space = data.getStoragePolicy()->getMaxUnreservedFreeSpace();
    
    if (busy_threads_in_pool <= 1
        || background_pool_size - busy_threads_in_pool >= data_settings->number_of_free_entries_in_pool_to_execute_mutation)
        return static_cast<UInt64>(disk_space / DISK_USAGE_COEFFICIENT_TO_RESERVE);
    return 0;
}
SelectPartsDecision MergeTreeDataMergerMutator::selectPartsToMerge(