ClickHouse/dbms/include/DB/Common/ProfileEvents.h

70 lines
2.0 KiB
C
Raw Normal View History

#pragma once
#include <stddef.h>
/** Позволяет считать количество различных событий, произошедших в программе
* - для высокоуровневого профайлинга.
*/
#define APPLY_FOR_EVENTS(M) \
M(Query, "Queries") \
M(SelectQuery, "Select queries") \
M(InsertQuery, "Insert queries") \
M(FileOpen, "File opens") \
M(Seek, "Seeks") \
M(ReadBufferFromFileDescriptorRead, "ReadBufferFromFileDescriptor reads") \
M(ReadCompressedBytes, "Read compressed bytes") \
M(CompressedReadBufferBlocks, "Read decompressed blocks") \
M(CompressedReadBufferBytes, "Read decompressed bytes") \
M(UncompressedCacheHits, "Uncompressed cache hits") \
M(UncompressedCacheMisses, "Uncompressed cache misses") \
M(IOBufferAllocs, "IO buffers allocations") \
M(IOBufferAllocBytes, "IO buffers allocated bytes") \
M(ArenaAllocChunks, "Arena allocated chunks") \
M(ArenaAllocBytes, "Arena allocated bytes") \
M(FunctionExecute, "Function executes") \
2014-02-11 13:30:42 +00:00
M(MarkCacheHits, "Mark cache hits") \
M(MarkCacheMisses, "Mark cache misses") \
\
M(END, "")
namespace ProfileEvents
{
/// Виды событий.
enum Event
{
#define M(NAME, DESCRIPTION) NAME,
APPLY_FOR_EVENTS(M)
#undef M
};
/// Получить текстовое описание события по его enum-у.
inline const char * getDescription(Event event)
{
static const char * descriptions[] =
{
#define M(NAME, DESCRIPTION) DESCRIPTION,
APPLY_FOR_EVENTS(M)
#undef M
};
return descriptions[event];
}
/// Счётчики - сколько раз каждое из событий произошло.
2014-01-04 11:43:16 +00:00
extern size_t counters[END];
/// Увеличить счётчик события. Потокобезопасно.
inline void increment(Event event, size_t amount = 1)
{
__sync_fetch_and_add(&counters[event], amount);
}
}
#undef APPLY_FOR_EVENTS