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. - 

}
    auto actions_settings = ExpressionActionsSettings::fromSettings(settings);
    /
    /
    /
    auto rewrite_before_where =
        [&](ProjectionCandidate & candidate, const ProjectionDescription & projection,
            NameSet & required_columns, const Block & source_block, const Block & aggregates)
    {
        if (analysis_result.before_where)
        {
            candidate.where_column_name = analysis_result.where_column_name;
            candidate.remove_where_filter = analysis_result.remove_where_filter;
            candidate.before_where = analysis_result.before_where->clone();
            /
            required_columns = candidate.before_where->foldActionsByProjection(
                required_columns,
                projection.sample_block_for_keys,
                candidate.where_column_name);
            /
            /
            if (required_columns.empty())
                return false;
            candidate.before_where->addAggregatesViaProjection(aggregates);
        }
        if (analysis_result.prewhere_info)
        {
            const auto & prewhere_info = analysis_result.prewhere_info;
            candidate.prewhere_info = std::make_shared<PrewhereInfo>();
            candidate.prewhere_info->prewhere_column_name = prewhere_info->prewhere_column_name;