This commit is contained in:
Alexey Milovidov 2018-10-08 08:30:03 +03:00
parent 80faec76e8
commit 64c7e357e8
4 changed files with 18 additions and 11 deletions

View File

@ -73,7 +73,7 @@ void MemoryTracker::alloc(Int64 size)
*/
Int64 will_be = size + amount.fetch_add(size, std::memory_order_relaxed);
if (!parent.load(std::memory_order_relaxed))
if (metric != CurrentMetrics::end())
CurrentMetrics::add(metric, size);
Int64 current_limit = limit.load(std::memory_order_relaxed);
@ -153,7 +153,8 @@ void MemoryTracker::free(Int64 size)
if (auto loaded_next = parent.load(std::memory_order_relaxed))
loaded_next->free(size);
else
if (metric != CurrentMetrics::end())
CurrentMetrics::sub(metric, size);
}

View File

@ -7,12 +7,6 @@
#include <Common/VariableContext.h>
namespace CurrentMetrics
{
extern const Metric MemoryTracking;
}
/** Tracks memory consumption.
* It throws an exception if amount of consumed memory become greater than certain limit.
* The same memory tracker could be simultaneously used in different threads.
@ -31,7 +25,7 @@ class MemoryTracker
std::atomic<MemoryTracker *> parent {};
/// You could specify custom metric to track memory usage.
CurrentMetrics::Metric metric = CurrentMetrics::MemoryTracking;
CurrentMetrics::Metric metric = CurrentMetrics::end();
/// This description will be used as prefix into log messages (if isn't nullptr)
const char * description = nullptr;

View File

@ -14,6 +14,11 @@
#include <chrono>
namespace CurrentMetrics
{
extern const Metric MemoryTracking;
}
namespace DB
{
@ -74,6 +79,13 @@ static bool isUnlimitedQuery(const IAST * ast)
}
ProcessList::ProcessList(size_t max_size_)
: max_size(max_size_)
{
total_memory_tracker.setMetric(CurrentMetrics::MemoryTracking);
}
ProcessList::EntryPtr ProcessList::insert(const String & query_, const IAST * ast, Context & query_context)
{
EntryPtr res;
@ -207,7 +219,7 @@ ProcessListEntry::~ProcessListEntry()
/// Destroy all streams to avoid long lock of ProcessList
it->releaseQueryStreams();
std::lock_guard<std::mutex> lock(parent.mutex);
std::lock_guard lock(parent.mutex);
String user = it->getClientInfo().current_user;
String query_id = it->getClientInfo().current_query_id;

View File

@ -287,7 +287,7 @@ protected:
QueryStatus * tryGetProcessListElement(const String & current_query_id, const String & current_user);
public:
ProcessList(size_t max_size_ = 0) : max_size(max_size_) {}
ProcessList(size_t max_size_ = 0);
using EntryPtr = std::shared_ptr<ProcessListEntry>;