#pragma once #include namespace DB { /** Allows to log information about queries execution: * - info about start of query execution; * - performance metrics (are set at the end of query execution); * - info about errors of query execution. */ /// A struct which will be inserted as row into query_log table struct QueryLogElement { enum Type { QUERY_START = 1, QUERY_FINISH = 2, EXCEPTION_BEFORE_START = 3, EXCEPTION_WHILE_PROCESSING = 4, }; Type type = QUERY_START; /// Depending on the type of query and type of stage, not all the fields may be filled. time_t event_time{}; time_t query_start_time{}; UInt64 query_duration_ms{}; UInt64 read_rows{}; UInt64 read_bytes{}; UInt64 written_rows{}; UInt64 written_bytes{}; /// NOTE: Not obvious metric. /// It always approximately equal to read_rows or written_rows at the end of query execution. UInt64 result_rows{}; UInt64 result_bytes{}; UInt64 memory_usage{}; String query; String exception; String stack_trace; ClientInfo client_info; static std::string name() { return "QueryLog"; } static Block createBlock(); void appendToBlock(Block & block) const; }; /// Instead of typedef - to allow forward declaration. class QueryLog : public SystemLog { using SystemLog::SystemLog; }; }