When I queried `system.metrics` table, I found some negative values which hint to some potential internal overflows.

```
SELECT *
FROM system.metrics
FORMAT Vertical

...

Row 31:
───────
metric:      MemoryTrackingInBackgroundProcessingPool
value:       -580863171
description: Total amount of memory (bytes) allocated in background processing pool (that is dedicated for backround merges, mutations and fetches). Note that this value may include a drift when the memory was allocated in a context of background processing pool and freed in other context or vice-versa. This happens naturally due to caches for tables indexes and doesn't indicate memory leaks.

Row 32:
───────
metric:      MemoryTrackingInBackgroundMoveProcessingPool
value:       0
description: Total amount of memory (bytes) allocated in background processing pool (that is dedicated for backround moves). Note that this value may include a drift when the memory was allocated in a context of background processing pool and freed in other context or vice-versa. This happens naturally due to caches for tables indexes and doesn't indicate memory leaks.

Row 33:
───────
metric:      MemoryTrackingInBackgroundSchedulePool
value:       -4461308831
description: Total amount of memory (bytes) allocated in background schedule pool (that is dedicated for bookkeeping tasks of Replicated tables).

...

56 rows in set. Elapsed: 0.003 sec.
```

Server version: 20.8.2.3.
{
        return size;
    }
    
    TaskHandle addTask(const Task & task);
    
    
    TaskHandle createTask(const Task & task);
    
    void startTask(const TaskHandle & task, bool allow_execute_in_parallel = true);
    
    void removeTask(const TaskHandle & task);
    ~BackgroundProcessingPool();
protected:
    friend class BackgroundProcessingPoolTaskInfo;
    using Tasks = std::multimap<Poco::Timestamp, TaskHandle>;    
    using Threads = std::vector<ThreadFromGlobalPool>;
    const size_t size;
    const char * thread_name;
    Poco::Logger * logger;
    Tasks tasks;         
    std::mutex tasks_mutex;
    Threads threads;
    bool shutdown{false};
    std::condition_variable wake_event;
    
    ThreadGroupStatusPtr thread_group;
    void workLoopFunc();
    void rescheduleTask(Tasks::iterator & task_it, const Poco::Timestamp & new_scheduled_ts)