Symptoms: all threads in BackgroundScheduledPool busy, lot of tasks in replication queue, none of the tasks is executing. 

![Screenshot from 2021-04-16 16-21-44_](https://user-images.githubusercontent.com/1549571/115193796-e767d600-a0ec-11eb-887c-5c9c2412e50c.png)

Related to #16895

Possible workarounds (poor options): increasing the background_schedule_pool_size to huge values, or restart server every time when that happens etc. - 

{
            if (drop_range.min_block <= part->info.max_block)
            {
                
                throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected merged part {} intersecting drop range {}",
                                part->name, drop_range.getPartName());
            }
            continue;
        }
        
        if (part->info.min_block > drop_range.max_block)
            break;
        if (part->info.min_block <= drop_range.max_block && drop_range.max_block < part->info.max_block)
        {
            
            throw Exception(ErrorCodes::LOGICAL_ERROR, "Unexpected merged part {} intersecting drop range {}",
                            part->name, drop_range.getPartName());
        }
        if (part->getState() != DataPartState::Deleting)
            parts_to_remove.emplace_back(part);
    }
    removePartsFromWorkingSet(parts_to_remove, clear_without_timeout, lock);
    return parts_to_remove;
}
void MergeTreeData::forgetPartAndMoveToDetached(const MergeTreeData::DataPartPtr & part_to_detach, const String & prefix, bool
restore_covered)
{
    LOG_INFO(log, "Renaming {} to {}{} and forgetting it.", part_to_detach->relative_path, prefix, part_to_detach->name);
    auto lock = lockParts();
    auto it_part = data_parts_by_info.find(part_to_detach->info);