Would love to have an event that tracks the number of times this happens so that we can adjust resources accordingly.

Example log:
```
Memory limit (for query) exceeded: would use 3.47 GiB (attempt to allocate chunk of 1073758016 bytes), maximum: 2.79 GiB
```
{
    Int64 old_value = profiler_limit.load(std::memory_order_relaxed);
    while (old_value < value && !profiler_limit.compare_exchange_weak(old_value, value))
        ;
}
namespace CurrentMemoryTracker
{
    using DB::current_thread;
    void alloc(Int64 size)
    {
        if (auto * memory_tracker = DB::CurrentThread::getMemoryTracker())
        {
            current_thread->untracked_memory += size;
            if (current_thread->untracked_memory > current_thread->untracked_memory_limit)
            {
                
                
                Int64 tmp = current_thread->untracked_memory;
                current_thread->untracked_memory = 0;
                memory_tracker->alloc(tmp);
            }
        }
    }
    void realloc(Int64 old_size, Int64 new_size)