For some reasons when we delete a MergeTree Part in atomic way something may go wrong - and leave the `delete_tmp_*` folder or it's part on disk. This may lead to a disk space consumption over time.

It's suggested to delete this folders at least at server start-up. Current solution with `clearOldTemporaryDirectories()` doesn't work because this method is called periodically from a thread without any locks or advisory on folders - it may cause the race conditions.
{
    const auto settings = getSettings();
    if (parts_to_remove.size() > 1 && settings->max_part_removal_threads > 1 && parts_to_remove.size() > settings->concurrent_part_removal_threshold)
    {
        
        size_t num_threads = std::min<size_t>(settings->max_part_removal_threads, parts_to_remove.size());
        std::mutex part_names_mutex;
        ThreadPool pool(num_threads);
        
        for (const DataPartPtr & part : parts_to_remove)
        {
            pool.scheduleOrThrowOnError([&, thread_group = CurrentThread::getGroup()]
            {
                if (thread_group)
                    CurrentThread::attachToIfDetached(thread_group);
                LOG_DEBUG(log, "Removing part from filesystem {}", part->name);
                part->remove();
                if (part_names_successed)
                {
                    std::lock_guard lock(part_names_mutex);
                    part_names_successed->insert(part->name);
                }
            });
        }
        pool.wait();
    }
    else
    {
        for (const DataPartPtr & part : parts_to_remove)
        {