summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorOleksandr Byelkin <sanja@mariadb.com>2015-03-26 10:48:56 +0100
committerOleksandr Byelkin <sanja@mariadb.com>2015-03-29 15:33:15 +0200
commitb2a1187307b7f7f79138cf87a21f84a836fca2a0 (patch)
tree359a7f8ab14e69ebce6927b58f4432fdff1b6139 /sql
parent9b8f86f8958116030de5a4e6ab75011cca251dfc (diff)
downloadmariadb-git-b2a1187307b7f7f79138cf87a21f84a836fca2a0.tar.gz
MDEV-7812: ANALYZE FORMAT=JSON UPDATE/DELETE doesnt print the r_total_time_ms
Tracking total time added in UPDATE/DELETE Fixed selectivity calculation in UPDATE/DELETE Macro definitions of time tracting fixed.
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_delete.cc2
-rw-r--r--sql/sql_explain.cc6
-rw-r--r--sql/sql_explain.h5
-rw-r--r--sql/sql_update.cc2
4 files changed, 12 insertions, 3 deletions
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 8fd9b0b2ada..d0c304fc14f 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -542,6 +542,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
explain= (Explain_delete*)thd->lex->explain->get_upd_del_plan();
explain->tracker.on_scan_init();
+ ANALYZE_START_TRACKING(&explain->time_tracker);
while (!(error=info.read_record(&info)) && !thd->killed &&
! thd->is_error())
@@ -619,6 +620,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
end_read_record(&info);
if (options & OPTION_QUICK)
(void) table->file->extra(HA_EXTRA_NORMAL);
+ ANALYZE_STOP_TRACKING(&explain->time_tracker);
cleanup:
/*
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index 9d82f4fe19f..6c353185cb1 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -1892,7 +1892,7 @@ void Explain_update::print_explain_json(Explain_query *query,
/* `r_filtered` */
if (is_analyze)
{
- double r_filtered= tracker.get_filtered_after_where();
+ double r_filtered= tracker.get_filtered_after_where() * 100.0;
writer->add_member("r_filtered").add_double(r_filtered);
}
@@ -1905,6 +1905,10 @@ void Explain_update::print_explain_json(Explain_query *query,
if (using_io_buffer)
writer->add_member("using_io_buffer").add_ll(1);
+ if (is_analyze && time_tracker.get_loops())
+ writer->
+ add_member("r_total_time_ms").add_double(time_tracker.get_time_ms());
+
if (where_cond)
{
writer->add_member("attached_condition");
diff --git a/sql/sql_explain.h b/sql/sql_explain.h
index e3b41eeb4f8..65027bdc907 100644
--- a/sql/sql_explain.h
+++ b/sql/sql_explain.h
@@ -131,11 +131,11 @@ public:
#define ANALYZE_START_TRACKING(tracker) \
if (tracker) \
- { tracker->start_tracking(); }
+ { (tracker)->start_tracking(); }
#define ANALYZE_STOP_TRACKING(tracker) \
if (tracker) \
- { tracker->stop_tracking(); }
+ { (tracker)->stop_tracking(); }
/**************************************************************************************
@@ -809,6 +809,7 @@ public:
/* ANALYZE members and methods */
Table_access_tracker tracker;
+ Exec_time_tracker time_tracker;
//psergey-todo: io-tracker here.
virtual int print_explain(Explain_query *query, select_result_sink *output,
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index be4038ea23d..680d3d7bd79 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -731,6 +731,7 @@ int mysql_update(THD *thd,
*/
can_compare_record= records_are_comparable(table);
explain->tracker.on_scan_init();
+ ANALYZE_START_TRACKING(&explain->time_tracker);
while (!(error=info.read_record(&info)) && !thd->killed)
{
@@ -907,6 +908,7 @@ int mysql_update(THD *thd,
break;
}
}
+ ANALYZE_STOP_TRACKING(&explain->time_tracker);
table->auto_increment_field_not_null= FALSE;
dup_key_found= 0;
/*