mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
dbms: human readable sizes logged in MemoryTracker. [#METR-11015]
This commit is contained in:
parent
6232f3e9b4
commit
8ea2b0f7a7
@ -2,13 +2,29 @@
|
||||
#include <Yandex/logger_useful.h>
|
||||
#include <DB/Core/Exception.h>
|
||||
#include <DB/IO/WriteHelpers.h>
|
||||
#include <iomanip>
|
||||
|
||||
#include <DB/Common/MemoryTracker.h>
|
||||
|
||||
|
||||
static std::string formatReadableSize(double size)
|
||||
{
|
||||
const char* units[] = {"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"};
|
||||
size_t i = 0;
|
||||
while (i + 1 < sizeof(units) / sizeof(units[0]) &&
|
||||
fabs(size) >= 1024)
|
||||
{
|
||||
size /= 1024;
|
||||
++i;
|
||||
}
|
||||
std::stringstream ss;
|
||||
ss << std::fixed << std::setprecision(i) << size << units[i];
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
MemoryTracker::~MemoryTracker()
|
||||
{
|
||||
LOG_DEBUG(&Logger::get("MemoryTracker"), "Peak memory usage for query: " << peak << " bytes.");
|
||||
LOG_DEBUG(&Logger::get("MemoryTracker"), "Peak memory usage for query: " << formatReadableSize(peak) << ".");
|
||||
}
|
||||
|
||||
void MemoryTracker::alloc(Int32 size)
|
||||
@ -18,9 +34,9 @@ void MemoryTracker::alloc(Int32 size)
|
||||
if (unlikely(limit && will_be > limit))
|
||||
{
|
||||
free(size);
|
||||
throw DB::Exception("Memory limit exceeded: would use " + DB::toString(will_be) + " bytes"
|
||||
throw DB::Exception("Memory limit exceeded: would use " + formatReadableSize(will_be) + ""
|
||||
" (attempt to allocate chunk of " + DB::toString(size) + " bytes)"
|
||||
", maximum: " + DB::toString(limit) + " bytes", DB::ErrorCodes::MEMORY_LIMIT_EXCEEDED);
|
||||
", maximum: " + formatReadableSize(limit), DB::ErrorCodes::MEMORY_LIMIT_EXCEEDED);
|
||||
}
|
||||
|
||||
if (will_be > peak)
|
||||
|
Loading…
Reference in New Issue
Block a user