diff --git a/include/Log.h b/include/Log.h index 557051c077..f5818fece7 100644 --- a/include/Log.h +++ b/include/Log.h @@ -58,6 +58,28 @@ public: zone_id = zid; } + // ------------------------------------------------------------------------- + // Profiler Interface + // ------------------------------------------------------------------------- + static void start_timer(struct timespec * estart) + { + clock_gettime(CLOCK_MONOTONIC, estart); + } + + static double stop_timer(struct timespec * estart) + { + double sec; + + struct timespec eend; + + clock_gettime(CLOCK_MONOTONIC, &eend); + + sec = (eend.tv_sec + (eend.tv_nsec * 1e-9)) - (estart->tv_sec + + (estart->tv_nsec * 1e-9)); + + return sec; + } + // ------------------------------------------------------------------------- // Logger interface // ------------------------------------------------------------------------- diff --git a/src/sql/MySqlDB.cc b/src/sql/MySqlDB.cc index bc9b23b96a..767cf563c2 100644 --- a/src/sql/MySqlDB.cc +++ b/src/sql/MySqlDB.cc @@ -169,6 +169,10 @@ int MySqlDB::exec(ostringstream& cmd, Callbackable* obj, bool quiet) Log::MessageType error_level = quiet ? Log::DDEBUG : Log::ERROR; + struct timespec timer; + + Log::start_timer(&timer); + MYSQL * db = get_db_connection(); int rc = mysql_query(db, c_str); @@ -272,6 +276,18 @@ int MySqlDB::exec(ostringstream& cmd, Callbackable* obj, bool quiet) free_db_connection(db); + double sec = Log::stop_timer(&timer); + + if ( sec > 0.5 ) + { + std::ostringstream oss; + + oss << "Slow query (" << one_util::float_to_str(sec) << "s) detected: " + << str; + + NebulaLog::log("SQL", Log::WARNING, oss); + } + return rc; }