Commit f60aa1fb authored by Michael Widenius's avatar Michael Widenius

Added THD::utime_after_query to avoid calling current_utime() twice for every end-of-query

Increment long_query_count also if thd->variables.log_slow_rate_limit is used
Added new state "Writing to binlog"


sql/sql_class.h:
  Added THD::utime_after_query to avoid calling current_utime() twice for every end-of-query
sql/sql_parse.cc:
  Increment long_query_count also if thd->variables.log_slow_rate_limit is used
  Removed extra calls to thd_proc_info(thd, "logging slow query") and thd->current_utime();
sql/sql_table.cc:
  Added new state "Writing to binlog"
parent 3cdcfcd7
...@@ -1685,7 +1685,7 @@ class THD :public Statement, ...@@ -1685,7 +1685,7 @@ class THD :public Statement,
my_hrtime_t user_time; my_hrtime_t user_time;
// track down slow pthread_create // track down slow pthread_create
ulonglong prior_thr_create_utime, thr_create_utime; ulonglong prior_thr_create_utime, thr_create_utime;
ulonglong start_utime, utime_after_lock; ulonglong start_utime, utime_after_lock, utime_after_query;
// Process indicator // Process indicator
struct { struct {
...@@ -2488,8 +2488,8 @@ class THD :public Statement, ...@@ -2488,8 +2488,8 @@ class THD :public Statement,
*/ */
void update_server_status() void update_server_status()
{ {
ulonglong end_utime_of_query= current_utime(); utime_after_query= current_utime();
if (end_utime_of_query > utime_after_lock + variables.long_query_time) if (utime_after_query > utime_after_lock + variables.long_query_time)
server_status|= SERVER_QUERY_WAS_SLOW; server_status|= SERVER_QUERY_WAS_SLOW;
} }
inline ulonglong found_rows(void) inline ulonglong found_rows(void)
......
...@@ -1483,38 +1483,30 @@ void log_slow_statement(THD *thd) ...@@ -1483,38 +1483,30 @@ void log_slow_statement(THD *thd)
DBUG_VOID_RETURN; // Don't set time for sub stmt DBUG_VOID_RETURN; // Don't set time for sub stmt
/* Follow the slow log filter configuration. */ /* Follow the slow log filter configuration. */
if (!(thd->variables.log_slow_filter & thd->query_plan_flags)) if (!thd->enable_slow_log ||
!(thd->variables.log_slow_filter & thd->query_plan_flags))
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
/* if (((thd->server_status & SERVER_QUERY_WAS_SLOW) ||
If rate limiting of slow log writes is enabled, decide whether to log ((thd->server_status &
this query to the log or not. (SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
*/ opt_log_queries_not_using_indexes &&
if (thd->variables.log_slow_rate_limit > 1 && !(sql_command_flags[thd->lex->sql_command] & CF_STATUS_COMMAND))) &&
(global_query_id % thd->variables.log_slow_rate_limit) != 0) thd->examined_row_count >= thd->variables.min_examined_row_limit)
DBUG_VOID_RETURN; {
thd->status_var.long_query_count++;
/*
If rate limiting of slow log writes is enabled, decide whether to log
this query to the log or not.
*/
if (thd->variables.log_slow_rate_limit > 1 &&
(global_query_id % thd->variables.log_slow_rate_limit) != 0)
DBUG_VOID_RETURN;
/*
Do not log administrative statements unless the appropriate option is
set.
*/
if (thd->enable_slow_log)
{
ulonglong end_utime_of_query= thd->current_utime();
thd_proc_info(thd, "logging slow query"); thd_proc_info(thd, "logging slow query");
slow_log_print(thd, thd->query(), thd->query_length(),
if (((thd->server_status & SERVER_QUERY_WAS_SLOW) || thd->utime_after_query);
((thd->server_status & thd_proc_info(thd, 0);
(SERVER_QUERY_NO_INDEX_USED | SERVER_QUERY_NO_GOOD_INDEX_USED)) &&
opt_log_queries_not_using_indexes &&
!(sql_command_flags[thd->lex->sql_command] & CF_STATUS_COMMAND))) &&
thd->examined_row_count >= thd->variables.min_examined_row_limit)
{
thd_proc_info(thd, "logging slow query");
thd->status_var.long_query_count++;
slow_log_print(thd, thd->query(), thd->query_length(),
end_utime_of_query);
}
} }
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
...@@ -1828,6 +1828,7 @@ int write_bin_log(THD *thd, bool clear_error, ...@@ -1828,6 +1828,7 @@ int write_bin_log(THD *thd, bool clear_error,
if (mysql_bin_log.is_open()) if (mysql_bin_log.is_open())
{ {
int errcode= 0; int errcode= 0;
thd_proc_info(thd, "Writing to binlog");
if (clear_error) if (clear_error)
thd->clear_error(); thd->clear_error();
else else
...@@ -1835,6 +1836,7 @@ int write_bin_log(THD *thd, bool clear_error, ...@@ -1835,6 +1836,7 @@ int write_bin_log(THD *thd, bool clear_error,
error= thd->binlog_query(THD::STMT_QUERY_TYPE, error= thd->binlog_query(THD::STMT_QUERY_TYPE,
query, query_length, is_trans, FALSE, FALSE, query, query_length, is_trans, FALSE, FALSE,
errcode); errcode);
thd_proc_info(thd, 0);
} }
return error; return error;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment