Add new trace type to system.trace_log table

This commit is contained in:
Ivan Lezhankin 2020-01-15 13:51:51 +03:00
parent e96021cefe
commit c566f406c5
5 changed files with 26 additions and 24 deletions

View File

@ -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);
} }
} }

View File

@ -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,
}; };
/** /**

View File

@ -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);
} }
} }

View File

@ -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);

View File

@ -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();