summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/include/analyze-format.inc3
-rw-r--r--sql/sql_analyze_stmt.h23
-rw-r--r--sql/sql_explain.cc11
3 files changed, 34 insertions, 3 deletions
diff --git a/mysql-test/include/analyze-format.inc b/mysql-test/include/analyze-format.inc
index 7d1c48f3e6f..c49d9407360 100644
--- a/mysql-test/include/analyze-format.inc
+++ b/mysql-test/include/analyze-format.inc
@@ -1,3 +1,4 @@
# The time on ANALYSE FORMAT=JSON is rather variable
---replace_regex /("(r_total_time_ms|r_table_time_ms|r_other_time_ms|r_buffer_size|r_filling_time_ms|r_query_time_in_progress_ms)": )[^, \n]*/\1"REPLACED"/
+#--replace_regex /("(r_total_time_ms|r_table_time_ms|r_other_time_ms|r_buffer_size|r_filling_time_ms|r_query_time_in_progress_ms)": )[^, \n]*/\1"REPLACED"/
+--replace_regex /("(r_other_time_ms|r_buffer_size|r_filling_time_ms|r_query_time_in_progress_ms)": )[^, \n]*/\1"REPLACED"/
diff --git a/sql/sql_analyze_stmt.h b/sql/sql_analyze_stmt.h
index 2df92a66486..cf34b10dad8 100644
--- a/sql/sql_analyze_stmt.h
+++ b/sql/sql_analyze_stmt.h
@@ -49,8 +49,18 @@ class Exec_time_tracker
{
protected:
ulonglong count;
- ulonglong time_interval_in_ns;
ulonglong last_start;
+ ulonglong time_interval_in_ns;
+ ulonglong c_last_start;
+ ulonglong cycles;
+
+ void cycles_stop_tracking(THD *thd)
+ {
+ ulonglong end= my_timer_cycles();
+ cycles += end - c_last_start;
+ if (unlikely(end < c_last_start))
+ cycles += ULONGLONG_MAX;
+ }
void ns_stop_tracking(THD *thd)
{
@@ -64,7 +74,7 @@ protected:
attach_gap_time_tracker(thd, my_gap_tracker, end);
}
public:
- Exec_time_tracker() : count(0), time_interval_in_ns(0), my_gap_tracker(NULL) {}
+ Exec_time_tracker() : count(0), time_interval_in_ns(0), cycles(0), my_gap_tracker(NULL) {}
/*
The time spent between stop_tracking() call on this object and any
@@ -76,6 +86,7 @@ public:
void start_tracking(THD *thd)
{
last_start= my_interval_timer();
+ c_last_start= my_timer_cycles();
process_gap_time_tracker(thd, last_start);
}
@@ -83,6 +94,7 @@ public:
{
count++;
ns_stop_tracking(thd);
+ cycles_stop_tracking(thd);
}
// interface for getting the time
@@ -93,6 +105,13 @@ public:
return static_cast<double>(time_interval_in_ns) / 1000.0;
}
+ double cycles_get_time_ms() const
+ {
+ // convert 'cycles' to milliseconds.
+ return 1000.0 * static_cast<double>(cycles) /
+ static_cast<double>(sys_timer_info.cycles.frequency);
+ }
+
bool has_timed_statistics() const { return time_interval_in_ns > 0; }
};
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index 7c3e87d42e3..95a8ba48bcb 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -297,6 +297,8 @@ void Explain_query::print_query_optimization_json(Json_writer *writer)
writer->add_member("query_optimization").start_object();
writer->add_member("r_total_time_ms").
add_double(optimization_time_tracker.get_time_ms());
+ writer->add_member("r_total_time_ms_cycles").
+ add_double(optimization_time_tracker.cycles_get_time_ms());
writer->end_object();
}
}
@@ -1040,6 +1042,8 @@ void Explain_select::print_explain_json(Explain_query *query,
{
writer->add_member("r_total_time_ms").
add_double(time_tracker.get_time_ms());
+ writer->add_member("r_total_time_ms_cycles").
+ add_double(time_tracker.cycles_get_time_ms());
}
}
@@ -1947,7 +1951,10 @@ void Explain_table_access::print_explain_json(Explain_query *query,
if (rowid_filter)
total_time+= rowid_filter->tracker->get_time_fill_container_ms();
writer->add_member("r_table_time_ms").add_double(total_time);
+ writer->add_member("r_table_time_ms_cycles").
+ add_double(op_tracker.cycles_get_time_ms());
writer->add_member("r_other_time_ms").add_double(extra_time_tracker.get_time_ms());
+ //writer->add_member("r_other_time_ms_cycles").add_double(extra_time_tracker.cycles_get_time_ms());
}
}
@@ -2480,6 +2487,8 @@ void Explain_update::print_explain_json(Explain_query *query,
{
writer->add_member("r_total_time_ms").
add_double(command_tracker.get_time_ms());
+ writer->add_member("r_total_time_ms_cycles").
+ add_double(command_tracker.cycles_get_time_ms());
}
if (impossible_where || no_partitions)
@@ -2627,6 +2636,8 @@ void Explain_update::print_explain_json(Explain_query *query,
{
writer->add_member("r_total_time_ms").
add_double(table_tracker.get_time_ms());
+ writer->add_member("r_total_time_ms_cycles").
+ add_double(table_tracker.cycles_get_time_ms());
}
}