diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2015-08-07 17:41:35 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2015-08-07 17:41:35 +0300 |
commit | 3025c42605af4d3341d0df155525dc174fe10843 (patch) | |
tree | 1367846717f0f139787677080f2d21dbb154c251 /sql/sql_analyze_stmt.h | |
parent | afd59b575a75ebbc57f71ce2865fdff85e3e233b (diff) | |
download | mariadb-git-3025c42605af4d3341d0df155525dc174fe10843.tar.gz |
Make ANALYZE FORMAT=JSON show execution time for filesort element.
Diffstat (limited to 'sql/sql_analyze_stmt.h')
-rw-r--r-- | sql/sql_analyze_stmt.h | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/sql/sql_analyze_stmt.h b/sql/sql_analyze_stmt.h index 203948813b1..bf800fd1df6 100644 --- a/sql/sql_analyze_stmt.h +++ b/sql/sql_analyze_stmt.h @@ -63,8 +63,8 @@ public: } // interface for getting the time - ulonglong get_loops() { return count; } - double get_time_ms() + ulonglong get_loops() const { return count; } + double get_time_ms() const { // convert 'cycles' to milliseconds. return 1000 * ((double)cycles) / sys_timer_info.cycles.frequency; @@ -169,8 +169,8 @@ class Json_writer; class Filesort_tracker : public Sql_alloc { public: - Filesort_tracker() : - r_loops(0), r_limit(0), r_used_pq(0), + Filesort_tracker(bool do_timing) : + time_tracker(do_timing), r_limit(0), r_used_pq(0), r_examined_rows(0), r_sorted_rows(0), r_output_rows(0), sort_passes(0), sort_buffer_size(0) @@ -180,10 +180,12 @@ public: inline void report_use(ha_rows r_limit_arg) { - if (!r_loops++) + if (!time_tracker.get_loops()) r_limit= r_limit_arg; else r_limit= (r_limit != r_limit_arg)? 0: r_limit_arg; + + ANALYZE_START_TRACKING(&time_tracker); } inline void incr_pq_used() { r_used_pq++; } @@ -202,6 +204,7 @@ public: } inline void report_merge_passes_at_end(ulong passes) { + ANALYZE_STOP_TRACKING(&time_tracker); sort_passes += passes; } @@ -216,14 +219,14 @@ public: /* Functions to get the statistics */ void print_json_members(Json_writer *writer); - ulonglong get_r_loops() { return r_loops; } + ulonglong get_r_loops() const { return time_tracker.get_loops(); } double get_avg_examined_rows() { - return ((double)r_examined_rows) / r_loops; + return ((double)r_examined_rows) / get_r_loops(); } double get_avg_returned_rows() { - return ((double)r_output_rows) / r_loops; + return ((double)r_output_rows) / get_r_loops(); } double get_r_filtered() { @@ -233,7 +236,9 @@ public: return 1.0; } private: - ulonglong r_loops; /* How many times filesort was invoked */ + Time_and_counter_tracker time_tracker; + + //ulonglong r_loops; /* How many times filesort was invoked */ /* LIMIT is typically a constant. There is never "LIMIT 0". HA_POS_ERROR means we never had a limit @@ -366,11 +371,12 @@ class Sort_and_group_tracker : public Sql_alloc qep_actions_data[MAX_QEP_ACTIONS]; Filesort_tracker *dummy_fsort_tracker; - + bool is_analyze; public: - Sort_and_group_tracker() : + Sort_and_group_tracker(bool is_analyze_arg) : cur_action(0), total_actions(0), varied_executions(false), - dummy_fsort_tracker(NULL) + dummy_fsort_tracker(NULL), + is_analyze(is_analyze_arg) {} /*************** Reporting interface ***************/ |