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

bool is_custom_partitioned = false;
    
    Int64 minmax_idx_date_column_pos = -1; 
    Int64 minmax_idx_time_column_pos = -1; 
    
    static ExpressionActionsPtr getMinMaxExpr(const KeyDescription & partition_key, const ExpressionActionsSettings & settings);
    
    static Names getMinMaxColumnsNames(const KeyDescription & partition_key);
    
    static DataTypes getMinMaxColumnsTypes(const KeyDescription & partition_key);
    ExpressionActionsPtr getPrimaryKeyAndSkipIndicesExpression(const StorageMetadataPtr & metadata_snapshot) const;
    ExpressionActionsPtr getSortingKeyAndSkipIndicesExpression(const StorageMetadataPtr & metadata_snapshot) const;
    
    
    CompressionCodecPtr getCompressionCodecForPart(size_t part_size_compressed, const IMergeTreeDataPart::TTLInfos & ttl_infos, time_t current_time) const;
    
    void insertQueryIdOrThrow(const String & query_id, size_t max_queries) const;
    
    void removeQueryId(const String & query_id) const;
    
    DataTypePtr getPartitionValueType() const;
    
    
    Block getBlockWithVirtualPartColumns(const MergeTreeData::DataPartsVector & parts, bool one_part) const;
    
    std::atomic_uint current_table_sends {0};
    
    SimpleIncrement insert_increment;
    bool has_non_adaptive_index_granularity_parts = false;