mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-26 01:22:04 +00:00
Add new trace type to system.trace_log table
This commit is contained in:
parent
e96021cefe
commit
c566f406c5
@ -34,7 +34,7 @@ namespace
|
|||||||
thread_local size_t write_trace_iteration = 0;
|
thread_local size_t write_trace_iteration = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void writeTraceInfo(TimerType timer_type, int /* sig */, siginfo_t * info, void * context)
|
void writeTraceInfo(TraceType trace_type, int /* sig */, siginfo_t * info, void * context)
|
||||||
{
|
{
|
||||||
#if defined(OS_LINUX)
|
#if defined(OS_LINUX)
|
||||||
/// Quickly drop if signal handler is called too frequently.
|
/// Quickly drop if signal handler is called too frequently.
|
||||||
@ -62,7 +62,7 @@ namespace
|
|||||||
QUERY_ID_MAX_LEN * sizeof(char) + // maximum query_id length
|
QUERY_ID_MAX_LEN * sizeof(char) + // maximum query_id length
|
||||||
sizeof(UInt8) + // number of stack frames
|
sizeof(UInt8) + // number of stack frames
|
||||||
sizeof(StackTrace::Frames) + // collected stack trace, maximum capacity
|
sizeof(StackTrace::Frames) + // collected stack trace, maximum capacity
|
||||||
sizeof(TimerType) + // timer type
|
sizeof(TraceType) + // timer type
|
||||||
sizeof(UInt32); // thread_number
|
sizeof(UInt32); // thread_number
|
||||||
char buffer[buf_size];
|
char buffer[buf_size];
|
||||||
WriteBufferFromFileDescriptorDiscardOnFailure out(trace_pipe.fds_rw[1], buf_size, buffer);
|
WriteBufferFromFileDescriptorDiscardOnFailure out(trace_pipe.fds_rw[1], buf_size, buffer);
|
||||||
@ -84,7 +84,7 @@ namespace
|
|||||||
for (size_t i = stack_trace_offset; i < stack_trace_size; ++i)
|
for (size_t i = stack_trace_offset; i < stack_trace_size; ++i)
|
||||||
writePODBinary(stack_trace.getFrames()[i], out);
|
writePODBinary(stack_trace.getFrames()[i], out);
|
||||||
|
|
||||||
writePODBinary(timer_type, out);
|
writePODBinary(trace_type, out);
|
||||||
writePODBinary(thread_number, out);
|
writePODBinary(thread_number, out);
|
||||||
out.next();
|
out.next();
|
||||||
}
|
}
|
||||||
@ -198,7 +198,7 @@ QueryProfilerReal::QueryProfilerReal(const Int32 thread_id, const UInt32 period)
|
|||||||
|
|
||||||
void QueryProfilerReal::signalHandler(int sig, siginfo_t * info, void * context)
|
void QueryProfilerReal::signalHandler(int sig, siginfo_t * info, void * context)
|
||||||
{
|
{
|
||||||
writeTraceInfo(TimerType::Real, sig, info, context);
|
writeTraceInfo(TraceType::REAL_TIME, sig, info, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryProfilerCpu::QueryProfilerCpu(const Int32 thread_id, const UInt32 period)
|
QueryProfilerCpu::QueryProfilerCpu(const Int32 thread_id, const UInt32 period)
|
||||||
@ -207,7 +207,7 @@ QueryProfilerCpu::QueryProfilerCpu(const Int32 thread_id, const UInt32 period)
|
|||||||
|
|
||||||
void QueryProfilerCpu::signalHandler(int sig, siginfo_t * info, void * context)
|
void QueryProfilerCpu::signalHandler(int sig, siginfo_t * info, void * context)
|
||||||
{
|
{
|
||||||
writeTraceInfo(TimerType::Cpu, sig, info, context);
|
writeTraceInfo(TraceType::CPU_TIME, sig, info, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,10 +15,11 @@ namespace Poco
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
enum class TimerType : UInt8
|
enum class TraceType : UInt8
|
||||||
{
|
{
|
||||||
Real,
|
REAL_TIME,
|
||||||
Cpu,
|
CPU_TIME,
|
||||||
|
MEMORY,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -102,13 +102,13 @@ void TraceCollector::run()
|
|||||||
trace.emplace_back(UInt64(addr));
|
trace.emplace_back(UInt64(addr));
|
||||||
}
|
}
|
||||||
|
|
||||||
TimerType timer_type;
|
TraceType trace_type;
|
||||||
readPODBinary(timer_type, in);
|
readPODBinary(trace_type, in);
|
||||||
|
|
||||||
UInt32 thread_number;
|
UInt32 thread_number;
|
||||||
readPODBinary(thread_number, in);
|
readPODBinary(thread_number, in);
|
||||||
|
|
||||||
TraceLogElement element{std::time(nullptr), timer_type, thread_number, query_id, trace};
|
TraceLogElement element{std::time(nullptr), trace_type, thread_number, query_id, trace};
|
||||||
trace_log->add(element);
|
trace_log->add(element);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,12 @@
|
|||||||
|
|
||||||
using namespace DB;
|
using namespace DB;
|
||||||
|
|
||||||
using TimerDataType = TraceLogElement::TimerDataType;
|
using TraceDataType = TraceLogElement::TraceDataType;
|
||||||
|
|
||||||
const TimerDataType::Values TraceLogElement::timer_values = {
|
const TraceDataType::Values TraceLogElement::trace_values = {
|
||||||
{"Real", static_cast<UInt8>(TimerType::Real)},
|
{"Real", static_cast<UInt8>(TraceType::REAL_TIME)},
|
||||||
{"CPU", static_cast<UInt8>(TimerType::Cpu)}
|
{"CPU", static_cast<UInt8>(TraceType::CPU_TIME)},
|
||||||
|
{"Memory", static_cast<UInt8>(TraceType::MEMORY)},
|
||||||
};
|
};
|
||||||
|
|
||||||
Block TraceLogElement::createBlock()
|
Block TraceLogElement::createBlock()
|
||||||
@ -23,7 +24,7 @@ Block TraceLogElement::createBlock()
|
|||||||
{std::make_shared<DataTypeDate>(), "event_date"},
|
{std::make_shared<DataTypeDate>(), "event_date"},
|
||||||
{std::make_shared<DataTypeDateTime>(), "event_time"},
|
{std::make_shared<DataTypeDateTime>(), "event_time"},
|
||||||
{std::make_shared<DataTypeUInt32>(), "revision"},
|
{std::make_shared<DataTypeUInt32>(), "revision"},
|
||||||
{std::make_shared<TimerDataType>(timer_values), "timer_type"},
|
{std::make_shared<TraceDataType>(trace_values), "trace_type"},
|
||||||
{std::make_shared<DataTypeUInt32>(), "thread_number"},
|
{std::make_shared<DataTypeUInt32>(), "thread_number"},
|
||||||
{std::make_shared<DataTypeString>(), "query_id"},
|
{std::make_shared<DataTypeString>(), "query_id"},
|
||||||
{std::make_shared<DataTypeArray>(std::make_shared<DataTypeUInt64>()), "trace"}
|
{std::make_shared<DataTypeArray>(std::make_shared<DataTypeUInt64>()), "trace"}
|
||||||
@ -39,7 +40,7 @@ void TraceLogElement::appendToBlock(Block & block) const
|
|||||||
columns[i++]->insert(DateLUT::instance().toDayNum(event_time));
|
columns[i++]->insert(DateLUT::instance().toDayNum(event_time));
|
||||||
columns[i++]->insert(event_time);
|
columns[i++]->insert(event_time);
|
||||||
columns[i++]->insert(ClickHouseRevision::get());
|
columns[i++]->insert(ClickHouseRevision::get());
|
||||||
columns[i++]->insert(static_cast<UInt8>(timer_type));
|
columns[i++]->insert(static_cast<UInt8>(trace_type));
|
||||||
columns[i++]->insert(thread_number);
|
columns[i++]->insert(thread_number);
|
||||||
columns[i++]->insertData(query_id.data(), query_id.size());
|
columns[i++]->insertData(query_id.data(), query_id.size());
|
||||||
columns[i++]->insert(trace);
|
columns[i++]->insert(trace);
|
||||||
|
@ -10,14 +10,14 @@ namespace DB
|
|||||||
|
|
||||||
struct TraceLogElement
|
struct TraceLogElement
|
||||||
{
|
{
|
||||||
using TimerDataType = DataTypeEnum8;
|
using TraceDataType = DataTypeEnum8;
|
||||||
static const TimerDataType::Values timer_values;
|
static const TraceDataType::Values trace_values;
|
||||||
|
|
||||||
time_t event_time{};
|
time_t event_time;
|
||||||
TimerType timer_type{};
|
TraceType trace_type;
|
||||||
UInt32 thread_number{};
|
UInt32 thread_number;
|
||||||
String query_id{};
|
String query_id;
|
||||||
Array trace{};
|
Array trace;
|
||||||
|
|
||||||
static std::string name() { return "TraceLog"; }
|
static std::string name() { return "TraceLog"; }
|
||||||
static Block createBlock();
|
static Block createBlock();
|
||||||
|
Loading…
Reference in New Issue
Block a user