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
```
will_be = size + total_amount;
        }
    }
    std::bernoulli_distribution fault(fault_probability);
    if (unlikely(fault_probability && fault(thread_local_rng)))
    {
        free(size);
        
        auto untrack_lock = blocker.cancel(); 
        std::stringstream message;
        message << "Memory tracker";
        if (const auto * description = description_ptr.load(std::memory_order_relaxed))
            message << " " << description;
        message << ": fault injected. Would use " << formatReadableSizeWithBinarySuffix(will_be)
            << " (attempt to allocate chunk of " << size << " bytes)"
            << ", maximum: " << formatReadableSizeWithBinarySuffix(current_hard_limit);
        throw DB::Exception(message.str(), DB::ErrorCodes::MEMORY_LIMIT_EXCEEDED);
    }
    if (unlikely(current_profiler_limit && will_be > current_profiler_limit))
    {
        auto no_track = blocker.cancel();
        DB::TraceCollector::collect(DB::TraceType::Memory, StackTrace(), size);
        setOrRaiseProfilerLimit((will_be + profiler_step - 1) / profiler_step * profiler_step);
    }
    std::bernoulli_distribution sample(sample_probability);
    if (unlikely(sample_probability && sample(thread_local_rng)))
    {
        auto no_track = blocker.cancel();
        DB::TraceCollector::collect(DB::TraceType::MemorySample, StackTrace(), size);
    }