Commit 6242a9e4 authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-31577: Make ANALYZE FORMAT=JSON print innodb stats

ANALYZE FORMAT=JSON output now includes table.r_engine_stats which
has the engine statistics. Only non-zero members are printed.

Internally: EXPLAIN data structure Explain_table_acccess now has
handler* handler_for_stats pointer.
It is used to read statistics from handler_for_stats->handler_stats.

Explain data structures exist after the tables are closed. We avoid
walking invalid pointers using this:
- SQL layer calls Explain_query::notify_tables_are_closed() before
  closing tables.
- After that call, printing of JSON output is disabled. Non-JSON output
  can be printed but we don't access handler_for_stats when doing that.
parent 94ce5cea
# The time on ANALYSE FORMAT=JSON is rather variable
# Remove non-deterministic parts of ANALYZE FORMAT=JSON output:
# - any timings
# - Buffer sizes (depend on pointer size)
# - r_engine_stats depends on buffer pool state and whether old record versions
# were purged.
--replace_regex /("(r_[a-z_]*_time(_in_progress)?_ms|r_buffer_size)": )[^, \n]*/\1"REPLACED"/
--replace_regex /("(r_[a-z_]*_time(_in_progress)?_ms|r_buffer_size)": )[^, \n]*/\1"REPLACED"/ /("r_engine_stats":) {[^}]*}/\1 REPLACED/
[slow_query_log_on]
slow_query_log=ON
[slow_query_log_off]
slow_query_log=OFF
create table t1 (
pk int not null,
a varchar(64),
b varchar(64),
c varchar(64)
) engine=innodb;
insert into t1 select
seq, seq, seq, seq
from
seq_1_to_10000;
# Note the r_engine_stats below. Only non-zero members are printed
select '$out' as X;
X
{
"query_optimization": {
"r_total_time_ms": "REPLACED"
},
"query_block": {
"select_id": 1,
"r_loops": 1,
"r_total_time_ms": "REPLACED",
"nested_loop": [
{
"table": {
"table_name": "t1",
"access_type": "ALL",
"r_loops": 1,
"rows": 10000,
"r_rows": 10000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED"
},
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.pk < 120000"
}
}
]
}
}
set @js='$out';
set @out=(select json_extract(@js,'$**.r_engine_stats.pages_accessed'));
select cast(json_extract(@out,'$[0]') as DOUBLE) > 0 as PAGES_ACCESSED_MORE_THAN_ZERO;
PAGES_ACCESSED_MORE_THAN_ZERO
1
#
# Try an UPDATE
#
select '$out' as X;
X
{
"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": 10000,
"r_rows": 10000,
"r_filtered": 100,
"r_total_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED",
"pages_updated": "REPLACED"
},
"attached_condition": "t1.pk < 120000"
}
}
}
set @js='$out';
set @out=(select json_extract(@js,'$**.r_engine_stats.pages_updated'));
select cast(json_extract(@out,'$[0]') as DOUBLE) > 0 as PAGES_UPDATED_MORE_THAN_ZERO;
PAGES_UPDATED_MORE_THAN_ZERO
1
#
# Try a DELETE
#
select '$out' as X;
X
{
"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": 10000,
"r_rows": 10000,
"r_filtered": 50,
"r_total_time_ms": "REPLACED",
"r_engine_stats": {
"pages_accessed": "REPLACED",
"pages_updated": "REPLACED"
},
"attached_condition": "t1.pk MOD 2 = 1"
}
}
}
set @js='$out';
set @out=(select json_extract(@js,'$**.r_engine_stats.pages_updated'));
select cast(json_extract(@out,'$[0]') as DOUBLE) > 0 as PAGES_UPDATED_MORE_THAN_ZERO;
PAGES_UPDATED_MORE_THAN_ZERO
1
drop table t1;
#
# Tests for r_engine_stats in ANALYZE FORMAT=JSON output
#
--source include/analyze-format.inc
--source include/have_sequence.inc
--source include/have_innodb.inc
create table t1 (
pk int not null,
a varchar(64),
b varchar(64),
c varchar(64)
) engine=innodb;
insert into t1 select
seq, seq, seq, seq
from
seq_1_to_10000;
--echo # Note the r_engine_stats below. Only non-zero members are printed
let $out=`
ANALYZE FORMAT=json
select * from t1 where pk < 120000;
`;
# Don't use "source include/analyze-format.inc" as it replaces r_engine_stats
# Replace the "pages_accessed" value, too, as it is different for some
# platforms...
--replace_regex /("(r_[a-z_]*_time(_in_progress)?_ms|r_buffer_size|pages_accessed)": )[^, \n]*/\1"REPLACED"/
evalp select '$out' as X;
evalp set @js='$out';
set @out=(select json_extract(@js,'$**.r_engine_stats.pages_accessed'));
select cast(json_extract(@out,'$[0]') as DOUBLE) > 0 as PAGES_ACCESSED_MORE_THAN_ZERO;
--echo #
--echo # Try an UPDATE
--echo #
let $out=`analyze format=json update t1 set b = b-1 where pk < 120000`;
--replace_regex /("(r_[a-z_]*_time_ms|pages_accessed|pages_updated)": )[^, \n]*/\1"REPLACED"/
evalp select '$out' as X;
evalp set @js='$out';
set @out=(select json_extract(@js,'$**.r_engine_stats.pages_updated'));
select cast(json_extract(@out,'$[0]') as DOUBLE) > 0 as PAGES_UPDATED_MORE_THAN_ZERO;
--echo #
--echo # Try a DELETE
--echo #
let $out=`analyze format=json delete from t1 where mod(pk,2)=1`;
--replace_regex /("(r_[a-z_]*_time_ms|pages_accessed|pages_updated)": )[^, \n]*/\1"REPLACED"/
evalp select '$out' as X;
evalp set @js='$out';
set @out=(select json_extract(@js,'$**.r_engine_stats.pages_updated'));
select cast(json_extract(@out,'$[0]') as DOUBLE) > 0 as PAGES_UPDATED_MORE_THAN_ZERO;
drop table t1;
......@@ -22,6 +22,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 30,
"attached_condition": "t0.a < 3"
......@@ -58,6 +59,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 0,
"attached_condition": "t0.a > 9 and t0.a is not null"
......@@ -75,6 +77,7 @@ ANALYZE
"r_loops": 0,
"rows": 1,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null
}
......@@ -108,6 +111,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t0.a is not null"
......@@ -127,6 +131,7 @@ ANALYZE
"r_rows": 1,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 40,
"attached_condition": "t1.b < 4"
......@@ -161,6 +166,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 20,
"attached_condition": "tbl1.b < 20"
......@@ -176,6 +182,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 60,
"attached_condition": "tbl2.b < 60"
......@@ -214,6 +221,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 20,
"attached_condition": "tbl1.b < 20"
......@@ -229,6 +237,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 60,
"attached_condition": "tbl2.b < 60"
......@@ -276,6 +285,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a is not null"
......@@ -295,6 +305,7 @@ ANALYZE
"r_rows": 0.2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"using_index": true
......@@ -337,6 +348,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "test.t1.a < 5"
......@@ -405,6 +417,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"index_condition": "t1.pk < 10",
......@@ -481,6 +494,7 @@ ANALYZE
"r_rows": 5,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -507,6 +521,7 @@ ANALYZE
"r_rows": 203.8,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 98.13542689
}
......@@ -551,6 +566,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "tbl1.a < 5"
......@@ -575,6 +591,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 20,
"attached_condition": "tbl2.a in (2,3)"
......@@ -632,6 +649,7 @@ ANALYZE
"r_rows": 256,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -671,6 +689,7 @@ ANALYZE
"r_rows": 256,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -724,6 +743,7 @@ ANALYZE
"r_rows": 256,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -761,6 +781,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -775,6 +796,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 0,
"attached_condition": "<in_optimizer>(t2.b,t2.b in (subquery#2))"
......@@ -807,6 +829,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -869,6 +892,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -883,6 +907,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 0,
"attached_condition": "t3.f3 in (1,2)"
......@@ -913,6 +938,7 @@ ANALYZE
"r_loops": 0,
"rows": 2,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null
}
......@@ -925,6 +951,7 @@ ANALYZE
"r_loops": 0,
"rows": 2,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null
},
......@@ -979,6 +1006,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 0,
"attached_condition": "t1.a < 0"
......@@ -1009,6 +1037,7 @@ ANALYZE
"r_loops": 0,
"rows": 10,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null,
"attached_condition": "t2.a < t1.a"
......@@ -1068,6 +1097,7 @@ ANALYZE
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 10,
"r_filtered": 10,
"attached_condition": "t11.a < 100"
......@@ -1083,6 +1113,7 @@ ANALYZE
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 70,
"r_filtered": 70,
"attached_condition": "t10.a < 700"
......@@ -1127,6 +1158,7 @@ ANALYZE
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 10,
"r_filtered": 10,
"attached_condition": "t11.a < 100 and t11.b is not null"
......@@ -1146,6 +1178,7 @@ ANALYZE
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 70,
"r_filtered": 70,
"attached_condition": "t10.a < 700"
......
......@@ -54,6 +54,7 @@ X
"r_rows": 500,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a < 700 and t1.b is not null"
......@@ -73,6 +74,7 @@ X
"r_rows": 500,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 20,
"attached_condition": "t2.a < 100"
......@@ -145,6 +147,7 @@ X
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a is not null"
......@@ -164,6 +167,7 @@ X
"r_rows": 2000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......
......@@ -243,6 +243,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t0.a is not null"
......@@ -262,6 +263,7 @@ ANALYZE
"r_rows": 0.4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -347,6 +349,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t0.a is not null"
......@@ -368,6 +371,7 @@ ANALYZE
"r_rows": 0.4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -417,6 +421,7 @@ ANALYZE
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "t2.a MOD 2 = 0"
......@@ -473,6 +478,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -487,6 +493,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -560,6 +567,7 @@ ANALYZE
"r_rows": 5,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 80,
"attached_condition": "t6.b > 0 and t6.a <= 5"
......@@ -575,6 +583,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -687,6 +696,7 @@ ANALYZE
"r_rows": 20,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"using_index_for_group_by": true
......
......@@ -3881,6 +3881,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a1 is not null"
......@@ -3929,6 +3930,7 @@ ANALYZE
"r_loops": 0,
"rows": 1,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null,
"using_index": true
......@@ -3972,6 +3974,7 @@ ANALYZE
"r_rows": 1,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -4181,6 +4184,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -4204,6 +4208,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.c is not null"
......@@ -4311,6 +4316,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
......@@ -19686,6 +19686,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "t1.a = 3"
......
......@@ -383,6 +383,7 @@ ANALYZE
"r_rows": 5,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -401,6 +402,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))"
......@@ -420,6 +422,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "trigcond(trigcond(t1.b is not null))"
......@@ -464,6 +467,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -478,6 +482,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......
......@@ -97,6 +97,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -120,6 +121,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -176,6 +178,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -199,6 +202,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -367,6 +371,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -381,6 +386,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -413,6 +419,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -427,6 +434,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -493,6 +501,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -507,6 +516,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -539,6 +549,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -553,6 +564,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......
......@@ -157,6 +157,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -180,6 +181,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -241,6 +243,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -264,6 +267,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -494,6 +498,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -508,6 +513,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -540,6 +546,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -554,6 +561,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -619,6 +627,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -633,6 +642,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -665,6 +675,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -679,6 +690,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......
......@@ -1168,6 +1168,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"using_index_for_group_by": true
......@@ -1520,6 +1521,7 @@ ANALYZE
"r_loops": 0,
"rows": 1,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null,
"impossible_on_condition": true
......@@ -1534,6 +1536,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -1602,6 +1605,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -1620,6 +1624,7 @@ ANALYZE
"r_rows": 1,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "trigcond(t2.pk is null) and trigcond(trigcond(t1.a is not null))",
......@@ -1694,6 +1699,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t1.a is not null"
......@@ -1713,6 +1719,7 @@ ANALYZE
"r_rows": 1,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"using_index": true,
......@@ -1802,6 +1809,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"attached_condition": "t3.a is not null"
......@@ -1822,6 +1830,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100,
"index_condition_bka": "t4.b + 1 <= t3.b + 1"
......
......@@ -47,6 +47,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 30,
"attached_condition": "t1.a in (2,3,4)"
......
......@@ -127,6 +127,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -150,6 +151,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -173,6 +175,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -229,6 +232,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -252,6 +256,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -275,6 +280,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -419,6 +425,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -442,6 +449,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -456,6 +464,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -521,6 +530,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -544,6 +554,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -558,6 +569,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......
......@@ -139,6 +139,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -162,6 +163,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -185,6 +187,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -241,6 +244,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -264,6 +268,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -287,6 +292,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -450,6 +456,7 @@ ANALYZE
"r_rows": 6,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -473,6 +480,7 @@ ANALYZE
"r_rows": 5,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -487,6 +495,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......@@ -552,6 +561,7 @@ ANALYZE
"r_rows": 6,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -575,6 +585,7 @@ ANALYZE
"r_rows": 5,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -589,6 +600,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
},
......
......@@ -3424,6 +3424,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -3780,6 +3781,7 @@ ANALYZE
"r_rows": 100,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -3946,6 +3948,7 @@ ANALYZE
"r_rows": 5,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -3995,6 +3998,7 @@ ANALYZE
"r_rows": 6,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -4050,6 +4054,7 @@ ANALYZE
"r_rows": 6,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -4119,6 +4124,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -4291,6 +4297,7 @@ ANALYZE
"r_rows": 50,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -4324,6 +4331,7 @@ ANALYZE
"r_rows": 50,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 2,
"attached_condition": "t1.b = t2.b"
......
......@@ -116,6 +116,7 @@ ANALYZE
"r_rows": 10000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -281,6 +282,7 @@ ANALYZE
"r_rows": 10000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -442,6 +444,7 @@ ANALYZE
"r_rows": 10000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -498,6 +501,7 @@ ANALYZE
"r_rows": 10000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
This diff is collapsed.
This diff is collapsed.
......@@ -426,6 +426,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
......@@ -124,6 +124,7 @@ SHOW ANALYZE
"r_rows": 1000,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 99.90000153,
"r_filtered": 100,
"attached_condition": "t1.a < 10"
......@@ -311,6 +312,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 60,
"attached_condition": "a.a <= 5"
......@@ -331,6 +333,7 @@ SHOW ANALYZE
"r_loops": 0,
"rows": 10,
"r_rows": null,
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": null,
"attached_condition": "b.a >= 9"
......@@ -383,6 +386,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 60,
"attached_condition": "a.a <= 5"
......@@ -407,6 +411,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 10,
"attached_condition": "b.a >= 9"
......@@ -513,6 +518,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 20,
"attached_condition": "a.a < 2"
......@@ -535,6 +541,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 30,
"attached_condition": "b.a > 6"
......@@ -705,6 +712,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 20,
"attached_condition": "a.a < 2"
......@@ -730,6 +738,7 @@ SHOW ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 95,
"attached_condition": "b.a + a.a < 10"
......
......@@ -2936,6 +2936,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -2960,6 +2961,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 50,
"attached_condition": "<nop>(<in_optimizer>(t1.b,(subquery#3) >= 4))"
......@@ -2982,6 +2984,7 @@ ANALYZE
"r_rows": 2,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
......@@ -61,6 +61,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -85,6 +86,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 18.75,
"attached_condition": "t1.b = t2.c"
......@@ -118,6 +120,7 @@ ANALYZE
"r_rows": 10,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......@@ -150,6 +153,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 18.75,
"attached_condition": "t1.b = t2.c"
......@@ -190,6 +194,7 @@ ANALYZE
"r_rows": 4,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 18.75,
"attached_condition": "t1.b = t2.c"
......
......@@ -3854,6 +3854,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
......@@ -3860,6 +3860,7 @@ ANALYZE
"r_rows": 3,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
......@@ -243,6 +243,7 @@ ANALYZE
"r_rows": 7,
"r_table_time_ms": "REPLACED",
"r_other_time_ms": "REPLACED",
"r_engine_stats": REPLACED,
"filtered": 100,
"r_filtered": 100
}
......
......@@ -5630,6 +5630,12 @@ class THD: public THD_count, /* this must be first */
return false;
return !is_set_timestamp_forbidden(this);
}
bool should_collect_handler_stats() const
{
return (variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE) ||
lex->analyze_stmt;
}
};
......
......@@ -126,6 +126,8 @@ bool Update_plan::save_explain_data_intern(THD *thd,
LOG_SLOW_VERBOSITY_ENGINE))
table->file->set_time_tracker(&explain->table_tracker);
explain->handler_for_stats= table->file;
select_lex->set_explain_type(TRUE);
explain->select_type= select_lex->type;
/* Partitions */
......
......@@ -171,7 +171,10 @@ void Explain_query::notify_tables_are_closed()
/*
Disable processing of SHOW EXPLAIN|ANALYZE. The query is about to close
the tables it is using, which will make it impossible to print Item*
values. See sql_explain.h:ExplainDataStructureLifetime for details.
values. Also, handler_for_stats will no longer point to valid handler
statistics data structure.
See sql_explain.h:ExplainDataStructureLifetime for details.
*/
if (apc_enabled)
{
......@@ -1823,6 +1826,26 @@ void Explain_rowid_filter::print_explain_json(Explain_query *query,
writer->end_object(); // rowid_filter
}
static void trace_engine_stats(handler *file, Json_writer *writer)
{
if (file && file->handler_stats)
{
ha_handler_stats *hs= file->handler_stats;
writer->add_member("r_engine_stats").start_object();
if (hs->pages_accessed)
writer->add_member("pages_accessed").add_ull(hs->pages_accessed);
if (hs->pages_updated)
writer->add_member("pages_updated").add_ull(hs->pages_updated);
if (hs->pages_read_count)
writer->add_member("pages_read_count").add_ull(hs->pages_read_count);
if (hs->pages_read_time)
writer->add_member("pages_read_time_ms").
add_double(hs->pages_read_time / 1000.0);
if (hs->undo_records_read)
writer->add_member("old_rows_read").add_ull(hs->undo_records_read);
writer->end_object();
}
}
void Explain_table_access::print_explain_json(Explain_query *query,
Json_writer *writer,
......@@ -1964,6 +1987,7 @@ void Explain_table_access::print_explain_json(Explain_query *query,
writer->add_member("r_table_time_ms").add_double(total_time);
writer->add_member("r_other_time_ms").add_double(extra_time_tracker.get_time_ms());
}
trace_engine_stats(handler_for_stats, writer);
}
/* `filtered` */
......@@ -2668,6 +2692,8 @@ void Explain_update::print_explain_json(Explain_query *query,
}
}
trace_engine_stats(handler_for_stats, writer);
if (where_cond)
{
writer->add_member("attached_condition");
......
......@@ -459,8 +459,8 @@ class Explain_insert;
that the values of the const tables' fields are not available anymore.
We could use the same approach as in QT_DONT_ACCESS_TMP_TABLES to work
around that, but instead we disallow producing FORMAT=JSON output at
step #3. We also processing of SHOW command. The rationale is that
query is close to finish anyway.
step #3. We also disable processing of SHOW EXPLAIN|ANALYZE commands.
The rationale is that query is close to finish anyway.
(5) - Item objects are freed. After this, it's certainly not possible to
print them into FORMAT=JSON output.
......@@ -766,6 +766,7 @@ class Explain_table_access : public Sql_alloc
pushed_index_cond(NULL),
sjm_nest(NULL),
pre_join_sort(NULL),
handler_for_stats(NULL),
jbuf_unpack_tracker(timed),
rowid_filter(NULL)
{}
......@@ -874,6 +875,16 @@ class Explain_table_access : public Sql_alloc
Exec_time_tracker op_tracker;
Gap_time_tracker extra_time_tracker;
/*
Note: This pointer is only valid until notify_tables_are_closed() is
called. After that, the tables may be freed or reused, together with their
handler_stats objects.
notify_tables_are_closed() disables printing of FORMAT=JSON output.
r_engine_stats is only printed in FORMAT=JSON output, so we're fine.
*/
handler *handler_for_stats;
/* When using join buffer: Track the reads from join buffer */
Table_access_tracker jbuf_tracker;
......@@ -925,7 +936,8 @@ class Explain_update : public Explain_node
Explain_update(MEM_ROOT *root, bool is_analyze) :
Explain_node(root),
filesort_tracker(NULL),
command_tracker(is_analyze)
command_tracker(is_analyze),
handler_for_stats(NULL)
{}
virtual enum explain_node_type get_type() { return EXPLAIN_UPDATE; }
......@@ -985,6 +997,9 @@ class Explain_update : public Explain_node
/* TODO: This tracks time to read rows from the table */
Exec_time_tracker table_tracker;
/* The same as Explain_table_access::handler_for_stats */
handler *handler_for_stats;
virtual int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
virtual void print_explain_json(Explain_query *query, Json_writer *writer,
......
......@@ -28236,6 +28236,12 @@ bool JOIN_TAB::save_explain_data(Explain_table_access *eta,
LOG_SLOW_VERBOSITY_ENGINE))
{
table->file->set_time_tracker(&eta->op_tracker);
/*
Set handler_for_stats even if we are not running an ANALYZE command.
There's no harm, and in case somebody runs a SHOW ANALYZE command we'll
be able to print the engine statistics.
*/
eta->handler_for_stats= table->file;
if (likely(thd->lex->analyze_stmt))
{
eta->op_tracker.set_gap_tracker(&eta->extra_time_tracker);
......@@ -5667,7 +5667,7 @@ void TABLE::init(THD *thd, TABLE_LIST *tl)
}
/* enable and clear or disable engine query statistics */
if ((thd->variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE))
if (thd->should_collect_handler_stats())
file->ha_handler_stats_reset();
else
file->ha_handler_stats_disable();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment