diff options
author | cmiller@zippy.cornsilk.net <> | 2007-04-03 19:50:55 -0400 |
---|---|---|
committer | cmiller@zippy.cornsilk.net <> | 2007-04-03 19:50:55 -0400 |
commit | cd28612e4b08c2e4b17d215f0eb70fa0e69120f3 (patch) | |
tree | e6c1362669f4c28c5bf9ebb1dbdd9d638c117392 /sql/sql_profile.cc | |
parent | b7a27a6b96097fd3770ba137e9fbacb69f23711f (diff) | |
download | mariadb-git-cd28612e4b08c2e4b17d215f0eb70fa0e69120f3.tar.gz |
Backport:
B-g#27501: 5.0 significantly more sys ("kernel") time than 4.1 \
due to getrusage() calls
Even if profiling is turned off, the parser makes calls to reset
the state at the beginning of each query. That would eventually
instantiate a PROFILE_ENTRY, which does indeed capture resource
usage.
Instead, now check that profiling is active before progressing
far into the storage/expiration of old entries in the history.
This has the pleasant side-effect that queries to toggle profiling
are not recorded in the history.
Diffstat (limited to 'sql/sql_profile.cc')
-rw-r--r-- | sql/sql_profile.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/sql/sql_profile.cc b/sql/sql_profile.cc index 4ee8d1ba9c8..b17bb6daa0d 100644 --- a/sql/sql_profile.cc +++ b/sql/sql_profile.cc @@ -493,6 +493,9 @@ void PROFILING::store() while (history.elements > thd->variables.profiling_history_size) delete history.pop(); + if (likely(((thd)->options & OPTION_PROFILING) == 0)) + DBUG_VOID_RETURN; + if (current != NULL) { if (keeping && @@ -519,12 +522,20 @@ void PROFILING::store() DBUG_VOID_RETURN; } +/** + Store and clean up the old information and get ready to hold info about this + new query. This is called very often so it must be very lightweight if + profiling is not active. +*/ void PROFILING::reset() { DBUG_ENTER("PROFILING::reset"); store(); + if (likely(((thd)->options & OPTION_PROFILING) == 0)) + DBUG_VOID_RETURN; + if (current != NULL) current->reset(); keep(); |