diff options
-rw-r--r-- | mysql-test/include/analyze-format.inc | 3 | ||||
-rw-r--r-- | sql/sql_analyze_stmt.h | 23 | ||||
-rw-r--r-- | sql/sql_explain.cc | 11 |
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()); } } |