Browse Source

MDEV-33309: for update|delete analyze format=json doesn't show r_other_time_ms

Single-table UPDATE/DELETEs only show r_total_time_ms in top-level query block.
Replace it with r_table_time_ms and r_other_time_ms.
pull/4302/head
bsrikanth-mariadb 4 weeks ago
parent
commit
573d3ad1c6
  1. 6
      mysql-test/main/analyze_engine_stats.result
  2. 118
      mysql-test/main/analyze_format_json.result
  3. 21
      mysql-test/main/analyze_format_json.test
  4. 9
      mysql-test/main/analyze_stmt_orderby.result
  5. 6
      mysql-test/main/explain_json_format_partitions.result
  6. 6
      mysql-test/main/subselect_mat.result
  7. 1
      sql/sql_delete.cc
  8. 4
      sql/sql_explain.cc
  9. 1
      sql/sql_explain.h

6
mysql-test/main/analyze_engine_stats.result

@ -68,7 +68,8 @@ X
"rows": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED",
"pages_updated": "REPLACED"
@ -101,7 +102,8 @@ X
"rows": 10000,
"r_rows": 10000,
"r_filtered": 50,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED",
"pages_updated": "REPLACED"

118
mysql-test/main/analyze_format_json.result

@ -388,7 +388,8 @@ ANALYZE
"rows": 1000,
"r_rows": 1000,
"r_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED
}
}
@ -449,7 +450,8 @@ ANALYZE
"rows": 10,
"r_rows": 10,
"r_filtered": 50,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.pk < 10 and t1.b > 4"
}
@ -1205,3 +1207,115 @@ ANALYZE
}
set join_cache_level=@tmp;
drop table t10, t11;
#
# MDEV-33309: ANALYZE FORMAT=JSON: UPDATE|DELETE don't show r_other_time_ms
#
create table t1 (pk int primary key, a int);
insert into t1 select seq, seq from seq_1_to_1000;
create table t2 like t1;
insert into t2 select * from t1;
# Top-level query block must have r_table_time_ms and r_other_time_ms
analyze format=json
update t1 set a=a+1
where t1.pk > (select max(a) from t2 where t2.pk+1 = t1.pk+1 ) - 10;
ANALYZE
{
"query_optimization": {
"r_total_time_ms": "REPLACED"
},
"query_block": {
"select_id": 1,
"r_total_time_ms": "REPLACED",
"table": {
"update": 1,
"table_name": "t1",
"access_type": "ALL",
"rows": 1000,
"r_rows": 1000,
"r_filtered": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.pk > (subquery#2) - 10"
},
"subqueries": [
{
"query_block": {
"select_id": 2,
"r_loops": 1000,
"r_total_time_ms": "REPLACED",
"nested_loop": [
{
"table": {
"table_name": "t2",
"access_type": "ALL",
"r_loops": 1000,
"rows": 1000,
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 0.1,
"attached_condition": "t2.pk + 1 = t1.pk + 1"
}
}
]
}
}
]
}
}
# Top-level query block must have r_table_time_ms and r_other_time_ms
analyze format=json
delete from t1
where t1.pk > (select max(a) from t2 where t2.pk+1 = t1.pk+1 ) - 10;
ANALYZE
{
"query_optimization": {
"r_total_time_ms": "REPLACED"
},
"query_block": {
"select_id": 1,
"r_total_time_ms": "REPLACED",
"table": {
"delete": 1,
"table_name": "t1",
"access_type": "ALL",
"rows": 1000,
"r_rows": 1000,
"r_filtered": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.pk > (subquery#2) - 10"
},
"subqueries": [
{
"query_block": {
"select_id": 2,
"r_loops": 1000,
"r_total_time_ms": "REPLACED",
"nested_loop": [
{
"table": {
"table_name": "t2",
"access_type": "ALL",
"r_loops": 1000,
"rows": 1000,
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 0.1,
"attached_condition": "t2.pk + 1 = t1.pk + 1"
}
}
]
}
}
]
}
}
drop table t1, t2;

21
mysql-test/main/analyze_format_json.test

@ -267,4 +267,25 @@ where
set join_cache_level=@tmp;
drop table t10, t11;
--echo #
--echo # MDEV-33309: ANALYZE FORMAT=JSON: UPDATE|DELETE don't show r_other_time_ms
--echo #
--source include/have_sequence.inc
create table t1 (pk int primary key, a int);
insert into t1 select seq, seq from seq_1_to_1000;
create table t2 like t1;
insert into t2 select * from t1;
--echo # Top-level query block must have r_table_time_ms and r_other_time_ms
--source include/analyze-format.inc
analyze format=json
update t1 set a=a+1
where t1.pk > (select max(a) from t2 where t2.pk+1 = t1.pk+1 ) - 10;
--echo # Top-level query block must have r_table_time_ms and r_other_time_ms
--source include/analyze-format.inc
analyze format=json
delete from t1
where t1.pk > (select max(a) from t2 where t2.pk+1 = t1.pk+1 ) - 10;
drop table t1, t2;

9
mysql-test/main/analyze_stmt_orderby.result

@ -55,7 +55,8 @@ ANALYZE
"rows": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED
}
}
@ -111,7 +112,8 @@ ANALYZE
"rows": 9,
"r_rows": 10,
"r_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t2.a < 10"
}
@ -165,7 +167,8 @@ ANALYZE
"rows": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED
}
}

6
mysql-test/main/explain_json_format_partitions.result

@ -74,7 +74,8 @@ ANALYZE
"rows": 10,
"r_rows": 10,
"r_filtered": 30,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.a in (2,3,4)"
}
@ -98,7 +99,8 @@ ANALYZE
"rows": 10,
"r_rows": 10,
"r_filtered": 0,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "t1.a in (20,30,40)"
}

6
mysql-test/main/subselect_mat.result

@ -3320,7 +3320,8 @@ ANALYZE
"rows": 4,
"r_rows": 4,
"r_filtered": 25,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "!(<in_optimizer>(t1.a,t1.a in (subquery#2)))"
},
@ -3395,7 +3396,8 @@ ANALYZE
"rows": 2,
"r_rows": 2,
"r_filtered": 0,
"r_total_time_ms": "REPLACED",
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"attached_condition": "!(<in_optimizer>(t1.a,t1.a in (subquery#2)))"
},

1
sql/sql_delete.cc

@ -125,6 +125,7 @@ bool Update_plan::save_explain_data_intern(THD *thd,
(thd->variables.log_slow_verbosity &
LOG_SLOW_VERBOSITY_ENGINE))
{
explain->table_tracker.set_gap_tracker(&explain->extra_time_tracker);
table->file->set_time_tracker(&explain->table_tracker);
if (table->file->handler_stats && table->s->tmp_table != INTERNAL_TMP_TABLE)

4
sql/sql_explain.cc

@ -2684,8 +2684,8 @@ void Explain_update::print_explain_json(Explain_query *query,
if (table_tracker.has_timed_statistics())
{
writer->add_member("r_total_time_ms").
add_double(table_tracker.get_time_ms());
writer->add_member("r_table_time_ms").add_double(table_tracker.get_time_ms());
writer->add_member("r_other_time_ms").add_double(extra_time_tracker.get_time_ms());
}
}

1
sql/sql_explain.h

@ -1007,6 +1007,7 @@ public:
/* TODO: This tracks time to read rows from the table */
Exec_time_tracker table_tracker;
Gap_time_tracker extra_time_tracker;
/* The same as Explain_table_access::handler_for_stats */
handler *handler_for_stats;

Loading…
Cancel
Save