diff --git a/include/my_compiler.h b/include/my_compiler.h index ff049f3d8a6..b979b5a5b73 100644 --- a/include/my_compiler.h +++ b/include/my_compiler.h @@ -40,7 +40,15 @@ /* GNU C/C++ */ #if defined __GNUC__ # define MY_ALIGN_EXT -# define MY_ASSERT_UNREACHABLE() __builtin_unreachable() + +/* + __builtin_unreachable() removes the "statement may fall through" warning-as- + error when MY_ASSERT_UNREACHABLE() is used in "case xxx:" in switch (...) + statements. + abort() is there to prevent the execution from reaching the + __builtin_unreachable() as this may cause misleading stack traces. +*/ +# define MY_ASSERT_UNREACHABLE() { abort(); __builtin_unreachable(); } /* Microsoft Visual C++ */ #elif defined _MSC_VER @@ -88,7 +96,7 @@ #endif #ifndef MY_ASSERT_UNREACHABLE -# define MY_ASSERT_UNREACHABLE() do { assert(0); } while (0) +# define MY_ASSERT_UNREACHABLE() do { abort(); } while (0) #endif /** diff --git a/mysql-test/include/analyze-format.inc b/mysql-test/include/analyze-format.inc index 4b24f3cc6f4..49edd0097d1 100644 --- a/mysql-test/include/analyze-format.inc +++ b/mysql-test/include/analyze-format.inc @@ -1,3 +1,7 @@ -# 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/ diff --git a/mysql-test/main/analyze_engine_stats.combinations b/mysql-test/main/analyze_engine_stats.combinations new file mode 100644 index 00000000000..09620f9f4da --- /dev/null +++ b/mysql-test/main/analyze_engine_stats.combinations @@ -0,0 +1,5 @@ +[slow_query_log_on] +slow_query_log=ON + +[slow_query_log_off] +slow_query_log=OFF diff --git a/mysql-test/main/analyze_engine_stats.result b/mysql-test/main/analyze_engine_stats.result new file mode 100644 index 00000000000..f82e1b7f69a --- /dev/null +++ b/mysql-test/main/analyze_engine_stats.result @@ -0,0 +1,109 @@ +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; +analyze table t1 persistent for all; +Table Op Msg_type Msg_text +test.t1 analyze status Engine-independent statistics collected +test.t1 analyze status OK +# Note the r_engine_stats below. Only non-zero members are printed +select '$out' as X; +X +{ + "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_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_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; diff --git a/mysql-test/main/analyze_engine_stats.test b/mysql-test/main/analyze_engine_stats.test new file mode 100644 index 00000000000..a26c65a1aa4 --- /dev/null +++ b/mysql-test/main/analyze_engine_stats.test @@ -0,0 +1,64 @@ +# +# 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; + +analyze table t1 persistent for all; + +--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; + diff --git a/mysql-test/main/analyze_format_json.result b/mysql-test/main/analyze_format_json.result index 619e00afb3e..430055de259 100644 --- a/mysql-test/main/analyze_format_json.result +++ b/mysql-test/main/analyze_format_json.result @@ -19,6 +19,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" @@ -52,6 +53,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" @@ -69,6 +71,7 @@ ANALYZE "r_loops": 0, "rows": 1, "r_rows": null, + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": null } @@ -99,6 +102,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" @@ -118,6 +122,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" @@ -149,6 +154,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" @@ -164,6 +170,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" @@ -199,6 +206,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" @@ -214,6 +222,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" @@ -258,6 +267,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" @@ -277,6 +287,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 @@ -316,6 +327,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" @@ -352,7 +364,8 @@ ANALYZE "rows": 1000, "r_rows": 1000, "r_filtered": 100, - "r_total_time_ms": "REPLACED" + "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED } } } @@ -378,6 +391,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", @@ -406,6 +420,7 @@ ANALYZE "r_rows": 10, "r_filtered": 50, "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "attached_condition": "t1.pk < 10 and t1.b > 4" } } @@ -448,6 +463,7 @@ ANALYZE "r_rows": 5, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -474,6 +490,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 } @@ -515,6 +532,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" @@ -539,6 +557,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)" @@ -593,6 +612,7 @@ ANALYZE "r_rows": 256, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -629,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 } @@ -676,6 +697,7 @@ ANALYZE "r_rows": 256, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -710,6 +732,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -724,6 +747,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": "(t2.b,t2.b in (subquery#2))" @@ -756,6 +780,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -815,6 +840,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -829,6 +855,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)" @@ -859,6 +886,7 @@ ANALYZE "r_loops": 0, "rows": 2, "r_rows": null, + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": null } @@ -871,6 +899,7 @@ ANALYZE "r_loops": 0, "rows": 2, "r_rows": null, + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": null }, @@ -922,6 +951,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" @@ -952,6 +982,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" @@ -1008,6 +1039,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" @@ -1023,6 +1055,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" @@ -1064,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 and t11.b is not null" @@ -1083,6 +1117,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" diff --git a/mysql-test/main/analyze_format_json_timings.result b/mysql-test/main/analyze_format_json_timings.result index 5ffab08386e..4508628bae7 100644 --- a/mysql-test/main/analyze_format_json_timings.result +++ b/mysql-test/main/analyze_format_json_timings.result @@ -51,6 +51,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" @@ -70,6 +71,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" @@ -139,6 +141,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" @@ -158,6 +161,7 @@ X "r_rows": 2000, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, diff --git a/mysql-test/main/analyze_stmt_orderby.result b/mysql-test/main/analyze_stmt_orderby.result index 65be50bd0f6..67334fa9001 100644 --- a/mysql-test/main/analyze_stmt_orderby.result +++ b/mysql-test/main/analyze_stmt_orderby.result @@ -52,7 +52,8 @@ ANALYZE "rows": 10000, "r_rows": 10000, "r_filtered": 100, - "r_total_time_ms": "REPLACED" + "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED } } } @@ -105,6 +106,7 @@ ANALYZE "r_rows": 10, "r_filtered": 100, "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "attached_condition": "t2.a < 10" } } @@ -154,7 +156,8 @@ ANALYZE "rows": 10000, "r_rows": 10000, "r_filtered": 100, - "r_total_time_ms": "REPLACED" + "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED } } } @@ -231,6 +234,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" @@ -250,6 +254,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 } @@ -332,6 +337,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" @@ -353,6 +359,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 } @@ -399,6 +406,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" @@ -452,6 +460,7 @@ ANALYZE "r_rows": 10, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -466,6 +475,7 @@ ANALYZE "r_rows": 10, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -536,6 +546,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" @@ -551,6 +562,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -660,6 +672,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 diff --git a/mysql-test/main/cte_recursive.result b/mysql-test/main/cte_recursive.result index de9a979dd94..7822fdf1a57 100644 --- a/mysql-test/main/cte_recursive.result +++ b/mysql-test/main/cte_recursive.result @@ -3875,6 +3875,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" @@ -3923,6 +3924,7 @@ ANALYZE "r_loops": 0, "rows": 1, "r_rows": null, + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": null, "using_index": true @@ -3966,6 +3968,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -4172,6 +4175,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -4195,6 +4199,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" @@ -4299,6 +4304,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/main/derived_cond_pushdown.result b/mysql-test/main/derived_cond_pushdown.result index d516e3fe522..9b533a0ee92 100644 --- a/mysql-test/main/derived_cond_pushdown.result +++ b/mysql-test/main/derived_cond_pushdown.result @@ -19683,6 +19683,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" diff --git a/mysql-test/main/derived_split_innodb.result b/mysql-test/main/derived_split_innodb.result index aba9ae85622..0869c340095 100644 --- a/mysql-test/main/derived_split_innodb.result +++ b/mysql-test/main/derived_split_innodb.result @@ -380,6 +380,7 @@ ANALYZE "r_rows": 5, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -398,6 +399,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))" @@ -417,6 +419,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))" @@ -461,6 +464,7 @@ ANALYZE "r_rows": 100, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -475,6 +479,7 @@ ANALYZE "r_rows": 10, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, diff --git a/mysql-test/main/except.result b/mysql-test/main/except.result index 698f33d8709..a0a196a0509 100644 --- a/mysql-test/main/except.result +++ b/mysql-test/main/except.result @@ -94,6 +94,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -117,6 +118,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -170,6 +172,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -193,6 +196,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -358,6 +362,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -372,6 +377,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -404,6 +410,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -418,6 +425,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -481,6 +489,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -495,6 +504,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -527,6 +537,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -541,6 +552,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, diff --git a/mysql-test/main/except_all.result b/mysql-test/main/except_all.result index a0144254312..30494343dd4 100644 --- a/mysql-test/main/except_all.result +++ b/mysql-test/main/except_all.result @@ -154,6 +154,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -177,6 +178,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -235,6 +237,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -258,6 +261,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -485,6 +489,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -499,6 +504,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -531,6 +537,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -545,6 +552,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -607,6 +615,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -621,6 +630,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -653,6 +663,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -667,6 +678,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, diff --git a/mysql-test/main/explain_json.result b/mysql-test/main/explain_json.result index 5821a6abd86..60dbe396f30 100644 --- a/mysql-test/main/explain_json.result +++ b/mysql-test/main/explain_json.result @@ -1165,6 +1165,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 @@ -1511,6 +1512,7 @@ ANALYZE "r_loops": 0, "rows": 1, "r_rows": null, + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": null, "impossible_on_condition": true @@ -1525,6 +1527,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -1590,6 +1593,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -1608,6 +1612,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))", @@ -1679,6 +1684,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" @@ -1698,6 +1704,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, @@ -1784,6 +1791,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" @@ -1804,6 +1812,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" diff --git a/mysql-test/main/explain_json_format_partitions.result b/mysql-test/main/explain_json_format_partitions.result index f164006d756..d05befb1870 100644 --- a/mysql-test/main/explain_json_format_partitions.result +++ b/mysql-test/main/explain_json_format_partitions.result @@ -44,6 +44,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)" @@ -68,6 +69,7 @@ ANALYZE "r_rows": 10, "r_filtered": 30, "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "attached_condition": "t1.a in (2,3,4)" } } @@ -88,6 +90,7 @@ ANALYZE "r_rows": 10, "r_filtered": 0, "r_total_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "attached_condition": "t1.a in (20,30,40)" } } diff --git a/mysql-test/main/intersect.result b/mysql-test/main/intersect.result index 4e14ec33c60..45efef36451 100644 --- a/mysql-test/main/intersect.result +++ b/mysql-test/main/intersect.result @@ -124,6 +124,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -147,6 +148,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -170,6 +172,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -223,6 +226,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -246,6 +250,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -269,6 +274,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -410,6 +416,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -433,6 +440,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -447,6 +455,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -509,6 +518,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -532,6 +542,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -546,6 +557,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, diff --git a/mysql-test/main/intersect_all.result b/mysql-test/main/intersect_all.result index 11ee34b7390..ce4b8b0c30b 100644 --- a/mysql-test/main/intersect_all.result +++ b/mysql-test/main/intersect_all.result @@ -136,6 +136,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -159,6 +160,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -182,6 +184,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -235,6 +238,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -258,6 +262,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -281,6 +286,7 @@ ANALYZE "r_rows": 4, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -441,6 +447,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -464,6 +471,7 @@ ANALYZE "r_rows": 5, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -478,6 +486,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -540,6 +549,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -563,6 +573,7 @@ ANALYZE "r_rows": 5, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -577,6 +588,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, diff --git a/mysql-test/main/order_by.result b/mysql-test/main/order_by.result index b6345cd142e..3e772161200 100644 --- a/mysql-test/main/order_by.result +++ b/mysql-test/main/order_by.result @@ -3421,6 +3421,7 @@ ANALYZE "r_rows": 100, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -3774,6 +3775,7 @@ ANALYZE "r_rows": 100, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -3937,6 +3939,7 @@ ANALYZE "r_rows": 5, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -3983,6 +3986,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -4035,6 +4039,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -4101,6 +4106,7 @@ ANALYZE "r_rows": 10, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -4270,6 +4276,7 @@ ANALYZE "r_rows": 50, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -4303,6 +4310,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" diff --git a/mysql-test/main/order_by_pack_big.result b/mysql-test/main/order_by_pack_big.result index e34b1a4a90a..e8b1548bb95 100644 --- a/mysql-test/main/order_by_pack_big.result +++ b/mysql-test/main/order_by_pack_big.result @@ -113,6 +113,7 @@ ANALYZE "r_rows": 10000, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -275,6 +276,7 @@ ANALYZE "r_rows": 10000, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -433,6 +435,7 @@ ANALYZE "r_rows": 10000, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -486,6 +489,7 @@ ANALYZE "r_rows": 10000, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/main/rowid_filter.result b/mysql-test/main/rowid_filter.result index 2ab2f979758..18b35764f70 100644 --- a/mysql-test/main/rowid_filter.result +++ b/mysql-test/main/rowid_filter.result @@ -144,6 +144,7 @@ ANALYZE "r_rows": 60, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 11.69025803, "r_filtered": 100, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -275,6 +276,7 @@ ANALYZE "r_rows": 510, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 11.69025803, "r_filtered": 11.76470588, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -438,6 +440,7 @@ ANALYZE "r_rows": 71, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "index_condition": "orders.o_totalprice between 200000 and 230000" @@ -475,6 +478,7 @@ ANALYZE "r_rows": 0.154929577, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 1.631973386, "r_filtered": 100, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-01-31'" @@ -586,6 +590,7 @@ ANALYZE "r_rows": 98, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-01-31'" @@ -605,6 +610,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 4.599999905, "r_filtered": 11.2244898, "attached_condition": "orders.o_totalprice between 200000 and 230000" @@ -752,6 +758,7 @@ ANALYZE "r_rows": 60, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 11.69025803, "r_filtered": 100, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -785,6 +792,7 @@ ANALYZE "r_rows": 0.266666667, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 9.266666412, "r_filtered": 100, "attached_condition": "orders.o_totalprice between 180000 and 230000" @@ -909,6 +917,7 @@ ANALYZE "r_rows": 510, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 11.69025803, "r_filtered": 11.76470588, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -929,6 +938,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 9.266666412, "r_filtered": 26.66666667, "attached_condition": "orders.o_totalprice between 180000 and 230000" @@ -1049,6 +1059,7 @@ ANALYZE "r_rows": 71, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "index_condition": "orders.o_totalprice between 200000 and 230000" @@ -1086,6 +1097,7 @@ ANALYZE "r_rows": 0.521126761, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 8.476269722, "r_filtered": 100, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'" @@ -1218,6 +1230,7 @@ ANALYZE "r_rows": 71, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "index_condition": "orders.o_totalprice between 200000 and 230000" @@ -1242,6 +1255,7 @@ ANALYZE "r_rows": 6.704225352, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 8.476269722, "r_filtered": 7.773109244, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'" @@ -1397,6 +1411,7 @@ ANALYZE "r_rows": 18, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.566194832, "r_filtered": 38.88888889, "index_condition": "lineitem.l_receiptDATE between '1996-10-05' and '1996-10-10'", @@ -1417,6 +1432,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 7.466666698, "r_filtered": 14.28571429, "attached_condition": "orders.o_totalprice between 200000 and 250000" @@ -1531,6 +1547,7 @@ ANALYZE "r_rows": 18, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.566194832, "r_filtered": 38.88888889, "index_condition": "lineitem.l_receiptDATE between '1996-10-05' and '1996-10-10'", @@ -1551,6 +1568,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 7.466666698, "r_filtered": 14.28571429, "attached_condition": "orders.o_totalprice between 200000 and 250000" @@ -1665,6 +1683,7 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.200000048, "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -1690,6 +1709,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.047460556, "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -1800,6 +1820,7 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.200000048, "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -1825,6 +1846,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.047460556, "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -1948,6 +1970,7 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": {}, "filtered": "REPLACED", "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -1973,6 +1996,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": {}, "filtered": "REPLACED", "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -2093,6 +2117,7 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": {}, "filtered": "REPLACED", "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -2118,6 +2143,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": {}, "filtered": "REPLACED", "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -2501,6 +2527,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 49.20000076, "r_filtered": 100, "index_condition": "t1.nm like '500%'", @@ -2551,6 +2578,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 49.20000076, "r_filtered": 100, "index_condition": "t1.nm like '500%'", @@ -2640,6 +2668,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 1.149999976, "r_filtered": 100, "attached_condition": "t1.nm like '75%'" @@ -2751,6 +2780,7 @@ ANALYZE "r_rows": 0, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.439999998, "r_filtered": 100, "attached_condition": "t1.nm like '3400%' or t1.nm like '3402%' or t1.nm like '3403%' or t1.nm like '3404%' or t1.nm like '3405%' or t1.nm like '3406%' or t1.nm like '3407%' or t1.nm like '3409%' or t1.nm like '3411%' or t1.nm like '3412%' or t1.nm like '3413%' or t1.nm like '3414%' or t1.nm like '3415%' or t1.nm like '3416%' or t1.nm like '3417%' or t1.nm like '3418%' or t1.nm like '3419%' or t1.nm like '3421%' or t1.nm like '3422%' or t1.nm like '3423%' or t1.nm like '3424%' or t1.nm like '3425%' or t1.nm like '3426%' or t1.nm like '3427%' or t1.nm like '3428%' or t1.nm like '3429%' or t1.nm like '3430%' or t1.nm like '3431%' or t1.nm like '3432%' or t1.nm like '3433%' or t1.nm like '3434%' or t1.nm like '3435%' or t1.nm like '3436%' or t1.nm like '3437%' or t1.nm like '3439%' or t1.nm like '3440%' or t1.nm like '3441%' or t1.nm like '3442%' or t1.nm like '3443%' or t1.nm like '3444%' or t1.nm like '3445%' or t1.nm like '3446%' or t1.nm like '3447%' or t1.nm like '3448%'" @@ -2812,6 +2842,7 @@ ANALYZE "r_loops": 1, "rows": 853, "r_rows": 0, + "r_engine_stats": REPLACED, "filtered": 0.439999998, "r_filtered": 100, "attached_condition": "t1.nm like '3400%' or t1.nm like '3402%' or t1.nm like '3403%' or t1.nm like '3404%' or t1.nm like '3405%' or t1.nm like '3406%' or t1.nm like '3407%' or t1.nm like '3409%' or t1.nm like '3411%' or t1.nm like '3412%' or t1.nm like '3413%' or t1.nm like '3414%' or t1.nm like '3415%' or t1.nm like '3416%' or t1.nm like '3417%' or t1.nm like '3418%' or t1.nm like '3419%' or t1.nm like '3421%' or t1.nm like '3422%' or t1.nm like '3423%' or t1.nm like '3424%' or t1.nm like '3425%' or t1.nm like '3426%' or t1.nm like '3427%' or t1.nm like '3428%' or t1.nm like '3429%' or t1.nm like '3430%' or t1.nm like '3431%' or t1.nm like '3432%' or t1.nm like '3433%' or t1.nm like '3434%' or t1.nm like '3435%' or t1.nm like '3436%' or t1.nm like '3437%' or t1.nm like '3439%' or t1.nm like '3440%' or t1.nm like '3441%' or t1.nm like '3442%' or t1.nm like '3443%' or t1.nm like '3444%' or t1.nm like '3445%' or t1.nm like '3446%' or t1.nm like '3447%' or t1.nm like '3448%'" diff --git a/mysql-test/main/rowid_filter_innodb.result b/mysql-test/main/rowid_filter_innodb.result index 107470fab45..8a15604d65f 100644 --- a/mysql-test/main/rowid_filter_innodb.result +++ b/mysql-test/main/rowid_filter_innodb.result @@ -147,6 +147,7 @@ ANALYZE "r_rows": 60, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 10.07493782, "r_filtered": 100, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -278,6 +279,7 @@ ANALYZE "r_rows": 510, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 10.07493782, "r_filtered": 11.76470588, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -439,6 +441,7 @@ ANALYZE "r_rows": 98, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-01-31'", @@ -459,6 +462,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 4.733333111, "r_filtered": 11.2244898, "attached_condition": "orders.o_totalprice between 200000 and 230000" @@ -571,6 +575,7 @@ ANALYZE "r_rows": 98, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-01-31'", @@ -591,6 +596,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 4.733333111, "r_filtered": 11.2244898, "attached_condition": "orders.o_totalprice between 200000 and 230000" @@ -730,6 +736,7 @@ ANALYZE "r_rows": 60, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 10.07493782, "r_filtered": 100, "index_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'", @@ -750,6 +757,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 9.600000381, "r_filtered": 26.66666667, "attached_condition": "orders.o_totalprice between 180000 and 230000" @@ -868,6 +876,7 @@ ANALYZE "r_rows": 144, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "attached_condition": "orders.o_totalprice between 180000 and 230000", @@ -894,6 +903,7 @@ ANALYZE "r_rows": 6.625, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.855656624, "r_filtered": 1.677148847, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30' and lineitem.l_quantity > 45" @@ -1007,6 +1017,7 @@ ANALYZE "r_rows": 71, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "attached_condition": "orders.o_totalprice between 200000 and 230000", @@ -1032,6 +1043,7 @@ ANALYZE "r_rows": 6.704225352, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 8.492922783, "r_filtered": 7.773109244, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'" @@ -1165,6 +1177,7 @@ ANALYZE "r_rows": 71, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100, "attached_condition": "orders.o_totalprice between 200000 and 230000", @@ -1190,6 +1203,7 @@ ANALYZE "r_rows": 6.704225352, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 8.492922783, "r_filtered": 7.773109244, "attached_condition": "lineitem.l_shipDATE between '1997-01-01' and '1997-06-30'" @@ -1345,6 +1359,7 @@ ANALYZE "r_rows": 18, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.566194832, "r_filtered": 38.88888889, "index_condition": "lineitem.l_receiptDATE between '1996-10-05' and '1996-10-10'", @@ -1365,6 +1380,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 5.666666508, "r_filtered": 14.28571429, "attached_condition": "orders.o_totalprice between 200000 and 250000" @@ -1479,6 +1495,7 @@ ANALYZE "r_rows": 18, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.566194832, "r_filtered": 38.88888889, "index_condition": "lineitem.l_receiptDATE between '1996-10-05' and '1996-10-10'", @@ -1499,6 +1516,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 5.666666508, "r_filtered": 14.28571429, "attached_condition": "orders.o_totalprice between 200000 and 250000" @@ -1613,6 +1631,7 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.333333254, "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -1638,6 +1657,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.047460556, "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -1748,6 +1768,7 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.333333254, "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -1773,6 +1794,7 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 3.047460556, "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -1896,6 +1918,9 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": { + "pages_accessed": 84 + }, "filtered": "REPLACED", "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -1921,6 +1946,9 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": { + "pages_accessed": 3 + }, "filtered": "REPLACED", "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -2041,6 +2069,9 @@ ANALYZE "r_rows": 41, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": { + "pages_accessed": 84 + }, "filtered": "REPLACED", "r_filtered": 2.43902439, "index_condition": "orders.o_totaldiscount between 18000 and 20000", @@ -2066,6 +2097,9 @@ ANALYZE "r_rows": 6, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": { + "pages_accessed": 3 + }, "filtered": "REPLACED", "r_filtered": 66.66666667, "attached_condition": "lineitem.l_shipDATE between '1996-10-01' and '1996-12-01'" @@ -2449,6 +2483,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 49.20000076, "r_filtered": 100, "index_condition": "t1.nm like '500%'", @@ -2499,6 +2534,7 @@ ANALYZE "r_rows": 1, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 49.20000076, "r_filtered": 100, "index_condition": "t1.nm like '500%'", @@ -2588,6 +2624,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 1.149999976, "r_filtered": 100, "attached_condition": "t1.nm like '75%'" @@ -2699,6 +2736,7 @@ ANALYZE "r_rows": 0, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 0.439999998, "r_filtered": 100, "attached_condition": "t1.nm like '3400%' or t1.nm like '3402%' or t1.nm like '3403%' or t1.nm like '3404%' or t1.nm like '3405%' or t1.nm like '3406%' or t1.nm like '3407%' or t1.nm like '3409%' or t1.nm like '3411%' or t1.nm like '3412%' or t1.nm like '3413%' or t1.nm like '3414%' or t1.nm like '3415%' or t1.nm like '3416%' or t1.nm like '3417%' or t1.nm like '3418%' or t1.nm like '3419%' or t1.nm like '3421%' or t1.nm like '3422%' or t1.nm like '3423%' or t1.nm like '3424%' or t1.nm like '3425%' or t1.nm like '3426%' or t1.nm like '3427%' or t1.nm like '3428%' or t1.nm like '3429%' or t1.nm like '3430%' or t1.nm like '3431%' or t1.nm like '3432%' or t1.nm like '3433%' or t1.nm like '3434%' or t1.nm like '3435%' or t1.nm like '3436%' or t1.nm like '3437%' or t1.nm like '3439%' or t1.nm like '3440%' or t1.nm like '3441%' or t1.nm like '3442%' or t1.nm like '3443%' or t1.nm like '3444%' or t1.nm like '3445%' or t1.nm like '3446%' or t1.nm like '3447%' or t1.nm like '3448%'" @@ -2760,6 +2798,7 @@ ANALYZE "r_loops": 1, "rows": 853, "r_rows": 0, + "r_engine_stats": REPLACED, "filtered": 0.439999998, "r_filtered": 100, "attached_condition": "t1.nm like '3400%' or t1.nm like '3402%' or t1.nm like '3403%' or t1.nm like '3404%' or t1.nm like '3405%' or t1.nm like '3406%' or t1.nm like '3407%' or t1.nm like '3409%' or t1.nm like '3411%' or t1.nm like '3412%' or t1.nm like '3413%' or t1.nm like '3414%' or t1.nm like '3415%' or t1.nm like '3416%' or t1.nm like '3417%' or t1.nm like '3418%' or t1.nm like '3419%' or t1.nm like '3421%' or t1.nm like '3422%' or t1.nm like '3423%' or t1.nm like '3424%' or t1.nm like '3425%' or t1.nm like '3426%' or t1.nm like '3427%' or t1.nm like '3428%' or t1.nm like '3429%' or t1.nm like '3430%' or t1.nm like '3431%' or t1.nm like '3432%' or t1.nm like '3433%' or t1.nm like '3434%' or t1.nm like '3435%' or t1.nm like '3436%' or t1.nm like '3437%' or t1.nm like '3439%' or t1.nm like '3440%' or t1.nm like '3441%' or t1.nm like '3442%' or t1.nm like '3443%' or t1.nm like '3444%' or t1.nm like '3445%' or t1.nm like '3446%' or t1.nm like '3447%' or t1.nm like '3448%'" @@ -3862,6 +3901,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": "t.tp = 121 and t.rid = 'B5FCC8C7111E4E3CBC21AAF5012F59C2'", @@ -3883,6 +3923,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 }, @@ -3913,6 +3954,7 @@ ANALYZE "r_rows": 80, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 14.46428585, "r_filtered": 100 }, diff --git a/mysql-test/main/show_analyze.result b/mysql-test/main/show_analyze.result index 56dac487117..c5fd61ecf64 100644 --- a/mysql-test/main/show_analyze.result +++ b/mysql-test/main/show_analyze.result @@ -423,6 +423,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/main/show_analyze_json.result b/mysql-test/main/show_analyze_json.result index dc8ae2aa66b..91315f9459c 100644 --- a/mysql-test/main/show_analyze_json.result +++ b/mysql-test/main/show_analyze_json.result @@ -115,6 +115,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" @@ -293,6 +294,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" @@ -313,6 +315,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" @@ -362,6 +365,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" @@ -386,6 +390,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" @@ -486,6 +491,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" @@ -508,6 +514,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" @@ -669,6 +676,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" @@ -694,6 +702,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" diff --git a/mysql-test/main/subselect4.result b/mysql-test/main/subselect4.result index b0e08a36006..115a9ebf957 100644 --- a/mysql-test/main/subselect4.result +++ b/mysql-test/main/subselect4.result @@ -2933,6 +2933,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -2957,6 +2958,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.b,(subquery#3) >= 4))" @@ -2979,6 +2981,7 @@ ANALYZE "r_rows": 2, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/main/subselect_cache.result b/mysql-test/main/subselect_cache.result index ab02d309143..397b5779141 100644 --- a/mysql-test/main/subselect_cache.result +++ b/mysql-test/main/subselect_cache.result @@ -58,6 +58,7 @@ ANALYZE "r_rows": 10, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -82,6 +83,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" @@ -112,6 +114,7 @@ ANALYZE "r_rows": 10, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } @@ -144,6 +147,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" @@ -184,6 +188,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" diff --git a/mysql-test/main/win.result b/mysql-test/main/win.result index 3b323d8a600..a9daf2478cd 100644 --- a/mysql-test/main/win.result +++ b/mysql-test/main/win.result @@ -3851,6 +3851,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/suite/compat/oracle/r/func_to_char.result b/mysql-test/suite/compat/oracle/r/func_to_char.result index a4978b07579..1f95acece5e 100644 --- a/mysql-test/suite/compat/oracle/r/func_to_char.result +++ b/mysql-test/suite/compat/oracle/r/func_to_char.result @@ -439,3 +439,10 @@ NULL 2021-01-24 drop table t1,t2; set @local.sql_mode=@sql_mode; +# +# MDEV-29152: Assertion failed ... upon TO_CHAR with wrong argument +# +SELECT TO_CHAR((VALUES('2022-12-12','2020-10-10'))); +ERROR HY000: Illegal parameter data type row for operation 'to_char' +SELECT TO_CHAR((STR_TO_DATE('2023-01-01', '%d-%m-%Y'), 'YYYY-MM-DD') ); +ERROR HY000: Illegal parameter data type row for operation 'to_char' diff --git a/mysql-test/suite/compat/oracle/t/func_to_char.test b/mysql-test/suite/compat/oracle/t/func_to_char.test index 9910fe60a84..7a40321538d 100644 --- a/mysql-test/suite/compat/oracle/t/func_to_char.test +++ b/mysql-test/suite/compat/oracle/t/func_to_char.test @@ -224,3 +224,13 @@ select * from t2; drop table t1,t2; set @local.sql_mode=@sql_mode; +--echo # +--echo # MDEV-29152: Assertion failed ... upon TO_CHAR with wrong argument +--echo # + +--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION +SELECT TO_CHAR((VALUES('2022-12-12','2020-10-10'))); + +--error ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION +SELECT TO_CHAR((STR_TO_DATE('2023-01-01', '%d-%m-%Y'), 'YYYY-MM-DD') ); + diff --git a/mysql-test/suite/encryption/r/tempfiles_encrypted.result b/mysql-test/suite/encryption/r/tempfiles_encrypted.result index 04897ef3105..b2a75f2e2b7 100644 --- a/mysql-test/suite/encryption/r/tempfiles_encrypted.result +++ b/mysql-test/suite/encryption/r/tempfiles_encrypted.result @@ -3857,6 +3857,7 @@ ANALYZE "r_rows": 3, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/suite/federated/federatedx_create_handlers.result b/mysql-test/suite/federated/federatedx_create_handlers.result index 55756329ff3..db2006669c3 100644 --- a/mysql-test/suite/federated/federatedx_create_handlers.result +++ b/mysql-test/suite/federated/federatedx_create_handlers.result @@ -237,6 +237,7 @@ ANALYZE "r_rows": 7, "r_table_time_ms": "REPLACED", "r_other_time_ms": "REPLACED", + "r_engine_stats": REPLACED, "filtered": 100, "r_filtered": 100 } diff --git a/mysql-test/suite/innodb/r/innodb_row_lock_time_ms.result b/mysql-test/suite/innodb/r/innodb_row_lock_time_ms.result new file mode 100644 index 00000000000..984d789e058 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb_row_lock_time_ms.result @@ -0,0 +1,40 @@ +CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0; +INSERT INTO t VALUES (1); +SET GLOBAL innodb_monitor_reset = "module_innodb"; +BEGIN; +SELECT * FROM t FOR UPDATE; +id +1 +connect con1,localhost,root,,; +SET innodb_lock_wait_timeout = 1; +SELECT * FROM t FOR UPDATE; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +disconnect con1; +connection default; +COMMIT; +SELECT variable_value > 100 FROM information_schema.global_status +WHERE LOWER(variable_name) = 'innodb_row_lock_time'; +variable_value > 100 +1 +SELECT variable_value > 100 FROM information_schema.global_status +WHERE LOWER(variable_name) = 'innodb_row_lock_time_max'; +variable_value > 100 +1 +SELECT variable_value > 100 FROM information_schema.global_status +WHERE LOWER(variable_name) = 'innodb_row_lock_time_avg'; +variable_value > 100 +1 +SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS +WHERE NAME="lock_row_lock_time"; +count_reset > 100 +1 +SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS +WHERE NAME="lock_row_lock_time_max"; +count_reset > 100 +1 +SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS +WHERE NAME="lock_row_lock_time_avg"; +count_reset > 100 +1 +DROP TABLE t; +SET GLOBAL innodb_monitor_reset=default; diff --git a/mysql-test/suite/innodb/t/innodb_row_lock_time_ms.test b/mysql-test/suite/innodb/t/innodb_row_lock_time_ms.test new file mode 100644 index 00000000000..4a100821819 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb_row_lock_time_ms.test @@ -0,0 +1,42 @@ +--source include/have_innodb.inc +--source include/count_sessions.inc + +CREATE TABLE `t`(`id` INT, PRIMARY KEY(`id`)) ENGINE=InnoDB STATS_PERSISTENT=0; + +INSERT INTO t VALUES (1); + +SET GLOBAL innodb_monitor_reset = "module_innodb"; + +BEGIN; +SELECT * FROM t FOR UPDATE; + +--connect(con1,localhost,root,,) +SET innodb_lock_wait_timeout = 1; +--error ER_LOCK_WAIT_TIMEOUT +SELECT * FROM t FOR UPDATE; +--disconnect con1 + +--connection default +COMMIT; + +SELECT variable_value > 100 FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_row_lock_time'; +SELECT variable_value > 100 FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_row_lock_time_max'; +SELECT variable_value > 100 FROM information_schema.global_status + WHERE LOWER(variable_name) = 'innodb_row_lock_time_avg'; + +SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS + WHERE NAME="lock_row_lock_time"; +SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS + WHERE NAME="lock_row_lock_time_max"; +SELECT count_reset > 100 FROM INFORMATION_SCHEMA.INNODB_METRICS + WHERE NAME="lock_row_lock_time_avg"; + +DROP TABLE t; + +--disable_warnings +SET GLOBAL innodb_monitor_reset=default; +--enable_warnings + +--source include/wait_until_count_sessions.inc diff --git a/sql/ddl_log.cc b/sql/ddl_log.cc index 2ac4e256112..5e13a8663dc 100644 --- a/sql/ddl_log.cc +++ b/sql/ddl_log.cc @@ -143,23 +143,23 @@ static st_ddl_recovery recovery_state; mysql_mutex_t LOCK_gdl; /* Positions to different data in a ddl log block */ -#define DDL_LOG_ENTRY_TYPE_POS 0 +static constexpr unsigned DDL_LOG_ENTRY_TYPE_POS= 0; /* Note that ACTION_TYPE and PHASE_POS must be after each other. See update_phase() */ -#define DDL_LOG_ACTION_TYPE_POS 1 -#define DDL_LOG_PHASE_POS 2 -#define DDL_LOG_NEXT_ENTRY_POS 4 +static constexpr unsigned DDL_LOG_ACTION_TYPE_POS= 1; +static constexpr unsigned DDL_LOG_PHASE_POS= 2; +static constexpr unsigned DDL_LOG_NEXT_ENTRY_POS= 4; /* Flags to remember something unique about the query, like if .frm was used */ -#define DDL_LOG_FLAG_POS 8 +static constexpr unsigned DDL_LOG_FLAG_POS= 8; /* Used to store XID entry that was written to binary log */ -#define DDL_LOG_XID_POS 10 +static constexpr unsigned DDL_LOG_XID_POS= 10; /* Used to store unique uuid from the .frm file */ -#define DDL_LOG_UUID_POS 18 -/* ID_POS can be used to store something unique, like file size (8 bytes) */ -#define DDL_LOG_ID_POS DDL_LOG_UUID_POS + MY_UUID_SIZE -#define DDL_LOG_END_POS DDL_LOG_ID_POS + 8 +static constexpr unsigned DDL_LOG_UUID_POS= 18; +/* ID_POS can be used to store something unique, like file size (4 bytes) */ +static constexpr unsigned DDL_LOG_ID_POS= DDL_LOG_UUID_POS + MY_UUID_SIZE; +static constexpr unsigned DDL_LOG_END_POS= DDL_LOG_ID_POS + 8; /* Position to where names are stored in the ddl log blocks. The current @@ -167,19 +167,19 @@ mysql_mutex_t LOCK_gdl; space for constants in the header than what is between DDL_LOG_ID_POS and DDL_LOG_TMP_NAME_POS. */ -#define DDL_LOG_TMP_NAME_POS 56 +static constexpr unsigned DDL_LOG_TMP_NAME_POS= 56; /* Definitions for the ddl log header, the first block in the file */ /* IO_SIZE is stored in the header and can thus be changed */ -#define DDL_LOG_IO_SIZE IO_SIZE +static constexpr unsigned DDL_LOG_IO_SIZE= IO_SIZE; /* Header is stored in positions 0-3 */ -#define DDL_LOG_IO_SIZE_POS 4 -#define DDL_LOG_NAME_OFFSET_POS 6 +static constexpr unsigned DDL_LOG_IO_SIZE_POS= 4; +static constexpr unsigned DDL_LOG_NAME_OFFSET_POS= 6; /* Marks if we have done a backup of the ddl log */ -#define DDL_LOG_BACKUP_OFFSET_POS 8 +static constexpr unsigned DDL_LOG_BACKUP_OFFSET_POS= 8; /* Sum of the above variables */ -#define DDL_LOG_HEADER_SIZE 4+2+2+1 +static constexpr unsigned DDL_LOG_HEADER_SIZE= 4+2+2+1; /** Sync the ddl log file. @@ -1104,7 +1104,7 @@ static void execute_rename_table(DDL_LOG_ENTRY *ddl_log_entry, handler *file, { fr_length= build_table_filename(from_path, FN_REFLEN, from_db->str, from_table->str, "", - flags & FN_TO_IS_TMP); + flags & FN_FROM_IS_TMP); to_length= build_table_filename(to_path, FN_REFLEN, to_db->str, to_table->str, "", flags & FN_TO_IS_TMP); diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h index a5f6d9307c6..083eb7ba8e7 100644 --- a/sql/item_timefunc.h +++ b/sql/item_timefunc.h @@ -996,7 +996,10 @@ class Item_func_tochar :public Item_str_func bool check_arguments() const override { - return check_argument_types_can_return_text(1, arg_count); + return + (args[0]->check_type_can_return_date(func_name_cstring()) && + args[0]->check_type_can_return_time(func_name_cstring())) || + check_argument_types_can_return_text(1, arg_count); } public: diff --git a/sql/sql_class.h b/sql/sql_class.h index df71f98ba49..bc978ff63eb 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -5624,6 +5624,12 @@ public: { lex= backup_lex; } + + bool should_collect_handler_stats() const + { + return (variables.log_slow_verbosity & LOG_SLOW_VERBOSITY_ENGINE) || + lex->analyze_stmt; + } }; diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index f9e73ee9533..c7121efb2bc 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -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 */ diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 67af0a5dab6..9c09259cb56 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -1784,6 +1784,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, @@ -1925,6 +1945,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` */ @@ -2629,6 +2650,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"); diff --git a/sql/sql_explain.h b/sql/sql_explain.h index a0f137bb561..139d6ea4338 100644 --- a/sql/sql_explain.h +++ b/sql/sql_explain.h @@ -760,6 +760,7 @@ public: pushed_index_cond(NULL), sjm_nest(NULL), pre_join_sort(NULL), + handler_for_stats(NULL), jbuf_unpack_tracker(timed), rowid_filter(NULL) {} @@ -868,6 +869,16 @@ public: 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; @@ -919,7 +930,8 @@ public: 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; } @@ -979,6 +991,9 @@ public: /* 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, diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index afab3fe7194..f9967fe92fe 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -3943,7 +3943,8 @@ void Query_tables_list::destroy_query_tables_list() LEX::LEX() : explain(NULL), result(0), part_info(NULL), arena_for_set_stmt(0), - mem_root_for_set_stmt(0), json_table(NULL), default_used(0), + mem_root_for_set_stmt(0), json_table(NULL), analyze_stmt(0), + default_used(0), with_rownum(0), is_lex_started(0), option_type(OPT_DEFAULT), context_analysis_only(0), sphead(0), limit_rows_examined_cnt(ULONGLONG_MAX) { diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 4059dc39c0f..a9bffa6f593 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -27787,6 +27787,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); diff --git a/sql/table.cc b/sql/table.cc index 867b555d4dd..6b886915715 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -5696,7 +5696,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(); diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index 8b66f3d3871..08be1991f02 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -218,9 +218,10 @@ ATTRIBUTE_COLD void btr_decryption_failed(const dict_index_t &index) @param[out] err error code @return block */ buf_block_t *btr_block_get(const dict_index_t &index, - uint32_t page, ulint mode, bool merge, + uint32_t page, rw_lock_type_t mode, bool merge, mtr_t *mtr, dberr_t *err) { + ut_ad(mode != RW_NO_LATCH); dberr_t local_err; if (!err) err= &local_err; @@ -281,11 +282,13 @@ btr_root_block_get( if (UNIV_LIKELY(block != nullptr)) { - if (!!page_is_comp(block->page.frame) != index->table->not_redundant() || - btr_page_get_index_id(block->page.frame) != index->id || - !fil_page_index_page_check(block->page.frame) || - index->is_spatial() != - (fil_page_get_type(block->page.frame) == FIL_PAGE_RTREE)) + if (UNIV_UNLIKELY(mode == RW_NO_LATCH)); + else if (!!page_is_comp(block->page.frame) != + index->table->not_redundant() || + btr_page_get_index_id(block->page.frame) != index->id || + !fil_page_index_page_check(block->page.frame) || + index->is_spatial() != + (fil_page_get_type(block->page.frame) == FIL_PAGE_RTREE)) { *err= DB_PAGE_CORRUPTED; block= nullptr; @@ -515,18 +518,16 @@ static buf_block_t *btr_get_latched_root(const dict_index_t &index, mtr_t *mtr) mini-transaction. */ static buf_block_t * btr_block_reget(mtr_t *mtr, const dict_index_t &index, - const page_id_t id, rw_lock_type_t rw_latch, - dberr_t *err) + const page_id_t id, dberr_t *err) { - if (buf_block_t *block= - mtr->get_already_latched(id, mtr_memo_type_t(rw_latch))) + if (buf_block_t *block= mtr->get_already_latched(id, MTR_MEMO_PAGE_X_FIX)) { *err= DB_SUCCESS; return block; } ut_ad(mtr->memo_contains_flagged(&index.lock, MTR_MEMO_X_LOCK)); - return btr_block_get(index, id.page_no(), rw_latch, true, mtr, err); + return btr_block_get(index, id.page_no(), RW_X_LATCH, true, mtr, err); } /**************************************************************//** @@ -585,21 +586,15 @@ btr_page_alloc_low( if (UNIV_UNLIKELY(!root)) return root; - if (mtr->have_u_or_x_latch(*root)) - { + const bool have_latch= mtr->have_u_or_x_latch(*root); #ifdef BTR_CUR_HASH_ADAPT - ut_ad(!root->index || !root->index->freed()); + ut_ad(!have_latch || !root->index || !root->index->freed()); #endif - mtr->rollback_to_savepoint(savepoint); - } - else - { - mtr->lock_register(savepoint, MTR_MEMO_PAGE_SX_FIX); - root->page.lock.u_lock(); -#ifdef BTR_CUR_HASH_ADAPT - btr_search_drop_page_hash_index(root, true); -#endif - } + mtr->rollback_to_savepoint(savepoint); + + if (!have_latch && + UNIV_UNLIKELY(!(root= btr_root_block_get(index, RW_SX_LATCH, mtr, err)))) + return root; fseg_header_t *seg_header= root->page.frame + (level ? PAGE_HEADER + PAGE_BTR_SEG_TOP : PAGE_HEADER + PAGE_BTR_SEG_LEAF); @@ -696,26 +691,18 @@ dberr_t btr_page_free(dict_index_t* index, buf_block_t* block, mtr_t* mtr, const auto savepoint= mtr->get_savepoint(); if (buf_block_t *root= btr_root_block_get(index, RW_NO_LATCH, mtr, &err)) { - if (mtr->have_u_or_x_latch(*root)) - { + const bool have_latch= mtr->have_u_or_x_latch(*root); #ifdef BTR_CUR_HASH_ADAPT - ut_ad(!root->index || !root->index->freed()); + ut_ad(!have_latch || !root->index || !root->index->freed()); #endif - mtr->rollback_to_savepoint(savepoint); - } - else - { - mtr->lock_register(savepoint, MTR_MEMO_PAGE_SX_FIX); - root->page.lock.u_lock(); -#ifdef BTR_CUR_HASH_ADAPT - btr_search_drop_page_hash_index(root, true); -#endif - } - err= fseg_free_page(&root->page.frame[blob || - page_is_leaf(block->page.frame) - ? PAGE_HEADER + PAGE_BTR_SEG_LEAF - : PAGE_HEADER + PAGE_BTR_SEG_TOP], - space, page, mtr, space_latched); + mtr->rollback_to_savepoint(savepoint); + if (have_latch || + (root= btr_root_block_get(index, RW_SX_LATCH, mtr, &err))) + err= fseg_free_page(&root->page.frame[blob || + page_is_leaf(block->page.frame) + ? PAGE_HEADER + PAGE_BTR_SEG_LEAF + : PAGE_HEADER + PAGE_BTR_SEG_TOP], + space, page, mtr, space_latched); } if (err == DB_SUCCESS) buf_page_free(space, page, mtr); @@ -4295,7 +4282,7 @@ btr_discard_page( if (left_page_no != FIL_NULL) { merge_page_id.set_page_no(left_page_no); merge_block = btr_block_reget(mtr, *index, merge_page_id, - RW_X_LATCH, &err); + &err); if (UNIV_UNLIKELY(!merge_block)) { return err; } @@ -4321,7 +4308,7 @@ btr_discard_page( } else if (right_page_no != FIL_NULL) { merge_page_id.set_page_no(right_page_no); merge_block = btr_block_reget(mtr, *index, merge_page_id, - RW_X_LATCH, &err); + &err); if (UNIV_UNLIKELY(!merge_block)) { return err; } diff --git a/storage/innobase/btr/btr0cur.cc b/storage/innobase/btr/btr0cur.cc index bdea0c85a90..a4dd5061381 100644 --- a/storage/innobase/btr/btr0cur.cc +++ b/storage/innobase/btr/btr0cur.cc @@ -938,6 +938,76 @@ static inline page_cur_mode_t btr_cur_nonleaf_mode(page_cur_mode_t mode) return PAGE_CUR_LE; } +static MY_ATTRIBUTE((nonnull)) +/** Acquire a latch on the previous page without violating the latching order. +@param block index page +@param page_id page identifier with valid space identifier +@param zip_size ROW_FORMAT=COMPRESSED page size, or 0 +@param rw_latch the latch on block (RW_S_LATCH or RW_X_LATCH) +@param mtr mini-transaction +@param err error code +@retval 0 if an error occurred +@retval 1 if the page could be latched in the wrong order +@retval -1 if the latch on block was temporarily released */ +int btr_latch_prev(buf_block_t *block, page_id_t page_id, ulint zip_size, + rw_lock_type_t rw_latch, mtr_t *mtr, dberr_t *err) +{ + ut_ad(rw_latch == RW_S_LATCH || rw_latch == RW_X_LATCH); + ut_ad(page_id.space() == block->page.id().space()); + + const auto prev_savepoint= mtr->get_savepoint(); + ut_ad(block == mtr->at_savepoint(prev_savepoint - 1)); + + page_id.set_page_no(btr_page_get_prev(block->page.frame)); + buf_block_t *prev= buf_page_get_gen(page_id, zip_size, RW_NO_LATCH, nullptr, + BUF_GET, mtr, err, false); + if (UNIV_UNLIKELY(!prev)) + return 0; + + int ret= 1; + if (UNIV_UNLIKELY(rw_latch == RW_S_LATCH)) + { + if (UNIV_LIKELY(prev->page.lock.s_lock_try())) + { + mtr->lock_register(prev_savepoint, MTR_MEMO_PAGE_S_FIX); + goto prev_latched; + } + block->page.lock.s_unlock(); + } + else + { + if (UNIV_LIKELY(prev->page.lock.x_lock_try())) + { + mtr->lock_register(prev_savepoint, MTR_MEMO_PAGE_X_FIX); + goto prev_latched; + } + block->page.lock.x_unlock(); + } + + ret= -1; + mtr->lock_register(prev_savepoint - 1, MTR_MEMO_BUF_FIX); + mtr->rollback_to_savepoint(prev_savepoint); + prev= buf_page_get_gen(page_id, zip_size, rw_latch, prev, + BUF_GET, mtr, err, false); + if (UNIV_UNLIKELY(!prev)) + return 0; + mtr->upgrade_buffer_fix(prev_savepoint - 1, rw_latch); + + prev_latched: + if (memcmp_aligned<2>(FIL_PAGE_TYPE + prev->page.frame, + FIL_PAGE_TYPE + block->page.frame, 2) || + memcmp_aligned<2>(PAGE_HEADER + PAGE_INDEX_ID + prev->page.frame, + PAGE_HEADER + PAGE_INDEX_ID + block->page.frame, 8) || + page_is_comp(prev->page.frame) != page_is_comp(block->page.frame)) + { + ut_ad("corrupted" == 0); // FIXME: remove this + *err= DB_CORRUPTION; + ret= 0; + } + + return ret; +} + dberr_t btr_cur_t::search_leaf(const dtuple_t *tuple, page_cur_mode_t mode, btr_latch_mode latch_mode, mtr_t *mtr) { @@ -1193,11 +1263,12 @@ dberr_t btr_cur_t::search_leaf(const dtuple_t *tuple, page_cur_mode_t mode, page_cur.block= block; ut_ad(block == mtr->at_savepoint(block_savepoint)); + ut_ad(rw_latch != RW_NO_LATCH); #ifdef UNIV_ZIP_DEBUG - if (rw_latch == RW_NO_LATCH); - else if (const page_zip_des_t *page_zip= buf_block_get_page_zip(block)) + if (const page_zip_des_t *page_zip= buf_block_get_page_zip(block)) ut_a(page_zip_validate(page_zip, block->page.frame, index())); #endif /* UNIV_ZIP_DEBUG */ + const uint32_t page_level= btr_page_get_level(block->page.frame); if (height == ULINT_UNDEFINED) @@ -1241,7 +1312,7 @@ dberr_t btr_cur_t::search_leaf(const dtuple_t *tuple, page_cur_mode_t mode, goto reached_index_root_and_leaf; goto reached_root_and_leaf; case RW_NO_LATCH: - ut_ad(mtr->memo_contains_flagged(&index()->lock, MTR_MEMO_X_LOCK)); + ut_ad(0); } goto reached_leaf; } @@ -1258,14 +1329,8 @@ dberr_t btr_cur_t::search_leaf(const dtuple_t *tuple, page_cur_mode_t mode, if (tree_height <= height + 2) /* Retain the root page latch. */ break; - goto release_parent_page; + /* fall through */ default: - if (rw_latch == RW_NO_LATCH) - { - ut_ad(!height); - break; - } - release_parent_page: ut_ad(block_savepoint > savepoint); mtr->rollback_to_savepoint(block_savepoint - 1, block_savepoint); block_savepoint--; @@ -1302,29 +1367,20 @@ dberr_t btr_cur_t::search_leaf(const dtuple_t *tuple, page_cur_mode_t mode, static_assert(BTR_MODIFY_PREV & BTR_MODIFY_LEAF, ""); static_assert(BTR_SEARCH_PREV & BTR_SEARCH_LEAF, ""); ut_ad(!latch_by_caller); + ut_ad(rw_latch == + rw_lock_type_t(latch_mode & (RW_X_LATCH | RW_S_LATCH))); - if (rw_latch == RW_NO_LATCH) - { - /* latch also siblings from left to right */ - rw_latch= rw_lock_type_t(latch_mode & (RW_X_LATCH | RW_S_LATCH)); - if (page_has_prev(block->page.frame) && - !btr_block_get(*index(), btr_page_get_prev(block->page.frame), - rw_latch, false, mtr, &err)) - goto func_exit; - mtr->upgrade_buffer_fix(block_savepoint, rw_latch); - if (page_has_next(block->page.frame) && - !btr_block_get(*index(), btr_page_get_next(block->page.frame), - rw_latch, false, mtr, &err)) - goto func_exit; - } + /* latch also siblings from left to right */ + if (page_has_prev(block->page.frame) && + !btr_latch_prev(block, page_id, zip_size, rw_latch, mtr, &err)) + goto func_exit; + if (page_has_next(block->page.frame) && + !btr_block_get(*index(), btr_page_get_next(block->page.frame), + rw_latch, false, mtr, &err)) + goto func_exit; goto release_tree; case BTR_SEARCH_LEAF: case BTR_MODIFY_LEAF: - if (rw_latch == RW_NO_LATCH) - { - ut_ad(index()->is_ibuf()); - mtr->upgrade_buffer_fix(block_savepoint, rw_lock_type_t(latch_mode)); - } if (!latch_by_caller) { release_tree: @@ -1338,13 +1394,11 @@ release_tree: break; default: ut_ad(latch_mode == BTR_MODIFY_TREE); - ut_ad(rw_latch == RW_NO_LATCH); + ut_ad(rw_latch == RW_X_LATCH); /* x-latch also siblings from left to right */ if (page_has_prev(block->page.frame) && - !btr_block_get(*index(), btr_page_get_prev(block->page.frame), - RW_X_LATCH, false, mtr, &err)) + !btr_latch_prev(block, page_id, zip_size, rw_latch, mtr, &err)) goto func_exit; - mtr->upgrade_buffer_fix(block_savepoint, RW_X_LATCH); if (page_has_next(block->page.frame) && !btr_block_get(*index(), btr_page_get_next(block->page.frame), RW_X_LATCH, false, mtr, &err)) @@ -1492,25 +1546,15 @@ release_tree: page_rec_is_first(page_cur.rec, block->page.frame)) { ut_ad(block_savepoint + 1 == mtr->get_savepoint()); + /* Latch the previous page if the node pointer is the leftmost of the current page. */ - buf_block_t *left= btr_block_get(*index(), - btr_page_get_prev(block->page.frame), - RW_NO_LATCH, false, mtr, &err); - if (UNIV_UNLIKELY(!left)) + int ret= btr_latch_prev(block, page_id, zip_size, rw_latch, mtr, &err); + if (!ret) goto func_exit; ut_ad(block_savepoint + 2 == mtr->get_savepoint()); - if (UNIV_LIKELY(left->page.lock.s_lock_try())) - mtr->lock_register(block_savepoint + 1, MTR_MEMO_PAGE_S_FIX); - else + if (ret < 0) { - if (rw_latch == RW_S_LATCH) - block->page.lock.s_unlock(); - else - block->page.lock.x_unlock(); - mtr->upgrade_buffer_fix(block_savepoint + 1, RW_S_LATCH); - mtr->lock_register(block_savepoint, MTR_MEMO_BUF_FIX); - mtr->upgrade_buffer_fix(block_savepoint, RW_S_LATCH); /* While our latch on the level-2 page prevents splits or merges of this level-1 block, other threads may have modified it due to splitting or merging some level-0 (leaf) @@ -1525,13 +1569,12 @@ release_tree: offsets)); } } - goto leaf_with_no_latch; + rw_latch= rw_lock_type_t(latch_mode & (RW_X_LATCH | RW_S_LATCH)); + break; case BTR_MODIFY_LEAF: case BTR_SEARCH_LEAF: - if (index()->is_ibuf()) - goto leaf_with_no_latch; rw_latch= rw_lock_type_t(latch_mode); - if (btr_op != BTR_NO_OP && + if (btr_op != BTR_NO_OP && !index()->is_ibuf() && ibuf_should_try(index(), btr_op != BTR_INSERT_OP)) /* Try to buffer the operation if the leaf page is not in the buffer pool. */ @@ -1551,10 +1594,9 @@ release_tree: mtr->rollback_to_savepoint(block_savepoint); goto need_opposite_intention; } - /* fall through */ + break; default: - leaf_with_no_latch: - rw_latch= RW_NO_LATCH; + ut_ad(rw_latch == RW_X_LATCH); } } @@ -1579,8 +1621,8 @@ dberr_t btr_cur_t::pessimistic_search_leaf(const dtuple_t *tuple, ut_ad(index()->is_btree() || index()->is_ibuf()); ut_ad(!index()->is_ibuf() || ibuf_inside(mtr)); - rec_offs offsets_[REC_OFFS_NORMAL_SIZE]; - rec_offs* offsets = offsets_; + rec_offs offsets_[REC_OFFS_NORMAL_SIZE]; + rec_offs* offsets= offsets_; rec_offs_init(offsets_); ut_ad(flag == BTR_CUR_BINARY); @@ -1654,9 +1696,8 @@ dberr_t btr_cur_t::pessimistic_search_leaf(const dtuple_t *tuple, /* Go to the child node */ page_id.set_page_no(btr_node_ptr_get_child_page_no(page_cur.rec, offsets)); - const auto block_savepoint= mtr->get_savepoint(); block= - buf_page_get_gen(page_id, block->zip_size(), RW_NO_LATCH, nullptr, BUF_GET, + buf_page_get_gen(page_id, block->zip_size(), RW_X_LATCH, nullptr, BUF_GET, mtr, &err, !--height && !index()->is_clust()); if (!block) @@ -1675,15 +1716,15 @@ dberr_t btr_cur_t::pessimistic_search_leaf(const dtuple_t *tuple, if (height != btr_page_get_level(block->page.frame)) goto corrupted; - if (page_has_prev(block->page.frame) && - !btr_block_get(*index(), btr_page_get_prev(block->page.frame), - RW_X_LATCH, false, mtr, &err)) - goto func_exit; - mtr->upgrade_buffer_fix(block_savepoint, RW_X_LATCH); #ifdef UNIV_ZIP_DEBUG const page_zip_des_t *page_zip= buf_block_get_page_zip(block); ut_a(!page_zip || page_zip_validate(page_zip, block->page.frame, index())); #endif /* UNIV_ZIP_DEBUG */ + + if (page_has_prev(block->page.frame) && + !btr_latch_prev(block, page_id, block->zip_size(), + RW_X_LATCH, mtr, &err)) + goto func_exit; if (page_has_next(block->page.frame) && !btr_block_get(*index(), btr_page_get_next(block->page.frame), RW_X_LATCH, false, mtr, &err)) @@ -1896,13 +1937,10 @@ index_locked: ut_ad(n_blocks < BTR_MAX_LEVELS); ut_ad(savepoint + n_blocks == mtr->get_savepoint()); - const rw_lock_type_t rw_latch= height && latch_mode != BTR_MODIFY_TREE - ? upper_rw_latch - : RW_NO_LATCH; buf_block_t* block= - btr_block_get(*index, page, rw_latch, !height && !index->is_clust(), mtr, - &err); - + btr_block_get(*index, page, + height ? upper_rw_latch : root_leaf_rw_latch, + !height, mtr, &err); ut_ad(!block == (err != DB_SUCCESS)); if (!block) @@ -1944,13 +1982,11 @@ index_locked: if (latch_mode == BTR_MODIFY_TREE) { - ut_ad(rw_latch == RW_NO_LATCH); /* x-latch also siblings from left to right */ if (page_has_prev(block->page.frame) && - !btr_block_get(*index, btr_page_get_prev(block->page.frame), - RW_X_LATCH, false, mtr, &err)) + !btr_latch_prev(block, block->page.id(), zip_size, RW_X_LATCH, + mtr, &err)) break; - mtr->upgrade_buffer_fix(leaf_savepoint - 1, RW_X_LATCH); if (page_has_next(block->page.frame) && !btr_block_get(*index, btr_page_get_next(block->page.frame), RW_X_LATCH, false, mtr, &err)) @@ -1965,10 +2001,6 @@ index_locked: } else { - if (rw_latch == RW_NO_LATCH) - mtr->upgrade_buffer_fix(leaf_savepoint - 1, - rw_lock_type_t(latch_mode & - (RW_X_LATCH | RW_S_LATCH))); if (latch_mode != BTR_CONT_MODIFY_TREE) { ut_ad(latch_mode == BTR_MODIFY_LEAF || @@ -2038,21 +2070,6 @@ index_locked: n_blocks= 1; } } - - if (!height) - { - if (page == index->page) - mtr->upgrade_buffer_fix(savepoint, RW_X_LATCH); - else - { - /* The U-latch protects BTR_SEG_HEAP, BTR_SEG_TOP. */ - mtr->upgrade_buffer_fix(savepoint, RW_SX_LATCH); - - /* Upgrade buffer-fix to exclusive latches on all remaining pages. */ - for (ulint i= 1; i <= n_blocks; i++) - mtr->upgrade_buffer_fix(savepoint + i, RW_X_LATCH); - } - } } /* Go to the child node */ diff --git a/storage/innobase/btr/btr0pcur.cc b/storage/innobase/btr/btr0pcur.cc index 1dd26f8c467..54dd15ac603 100644 --- a/storage/innobase/btr/btr0pcur.cc +++ b/storage/innobase/btr/btr0pcur.cc @@ -540,7 +540,8 @@ btr_pcur_move_to_next_page( dberr_t err; buf_block_t* next_block = btr_block_get( - *cursor->index(), next_page_no, cursor->latch_mode & ~12, + *cursor->index(), next_page_no, + rw_lock_type_t(cursor->latch_mode & (RW_X_LATCH | RW_S_LATCH)), page_is_leaf(page), mtr, &err); if (UNIV_UNLIKELY(!next_block)) { diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index ecf359fd2a5..57ba0fac255 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -1004,8 +1004,8 @@ static SHOW_VAR innodb_status_variables[]= { {"row_lock_current_waits", &export_vars.innodb_row_lock_current_waits, SHOW_SIZE_T}, {"row_lock_time", &export_vars.innodb_row_lock_time, SHOW_LONGLONG}, - {"row_lock_time_avg", &export_vars.innodb_row_lock_time_avg, SHOW_SIZE_T}, - {"row_lock_time_max", &export_vars.innodb_row_lock_time_max, SHOW_SIZE_T}, + {"row_lock_time_avg", &export_vars.innodb_row_lock_time_avg, SHOW_ULONGLONG}, + {"row_lock_time_max", &export_vars.innodb_row_lock_time_max, SHOW_ULONGLONG}, {"row_lock_waits", &export_vars.innodb_row_lock_waits, SHOW_SIZE_T}, {"rows_deleted", &export_vars.innodb_rows_deleted, SHOW_SIZE_T}, {"rows_inserted", &export_vars.innodb_rows_inserted, SHOW_SIZE_T}, diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 7f071b2149c..1cffeb6230a 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -2156,8 +2156,7 @@ next_page: } next_page= false; - block= btr_block_get(*clust_index, next_page_no, BTR_SEARCH_LEAF, false, - &mtr); + block= btr_block_get(*clust_index, next_page_no, RW_S_LATCH, false, &mtr); if (!block) goto non_empty; page_cur_set_before_first(block, cur); diff --git a/storage/innobase/include/btr0btr.h b/storage/innobase/include/btr0btr.h index a56598d3620..5a0401fad85 100644 --- a/storage/innobase/include/btr0btr.h +++ b/storage/innobase/include/btr0btr.h @@ -91,7 +91,7 @@ ATTRIBUTE_COLD void btr_decryption_failed(const dict_index_t &index); @param[out] err error code @return block */ buf_block_t *btr_block_get(const dict_index_t &index, - uint32_t page, ulint mode, bool merge, + uint32_t page, rw_lock_type_t mode, bool merge, mtr_t *mtr, dberr_t *err= nullptr); /**************************************************************//** diff --git a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h index e8299bb1189..4c92984f2f6 100644 --- a/storage/innobase/include/lock0lock.h +++ b/storage/innobase/include/lock0lock.h @@ -755,9 +755,9 @@ private: /** waits and total number of lock waits; protected by wait_mutex */ uint64_t wait_count; /** Cumulative wait time; protected by wait_mutex */ - uint32_t wait_time; + uint64_t wait_time; /** Longest wait time; protected by wait_mutex */ - uint32_t wait_time_max; + uint64_t wait_time_max; public: /** number of deadlocks detected; protected by wait_mutex */ ulint deadlocks; @@ -916,9 +916,9 @@ public: ulint get_wait_cumulative() const { return static_cast(wait_count / WAIT_COUNT_STEP); } /** Cumulative wait time; protected by wait_mutex */ - ulint get_wait_time_cumulative() const { return wait_time; } + uint64_t get_wait_time_cumulative() const { return wait_time; } /** Longest wait time; protected by wait_mutex */ - ulint get_wait_time_max() const { return wait_time_max; } + uint64_t get_wait_time_max() const { return wait_time_max; } /** Get the lock hash table for a mode */ hash_table &hash_get(ulint mode) diff --git a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h index 7520dae0dab..6f6f887b83e 100644 --- a/storage/innobase/include/srv0srv.h +++ b/storage/innobase/include/srv0srv.h @@ -678,13 +678,10 @@ struct export_var_t{ lsn_t innodb_os_log_written; ulint innodb_row_lock_waits; /*!< srv_n_lock_wait_count */ ulint innodb_row_lock_current_waits; /*!< srv_n_lock_wait_current_count */ - int64_t innodb_row_lock_time; /*!< srv_n_lock_wait_time - / 1000 */ - ulint innodb_row_lock_time_avg; /*!< srv_n_lock_wait_time - / 1000 - / srv_n_lock_wait_count */ - ulint innodb_row_lock_time_max; /*!< srv_n_lock_max_wait_time - / 1000 */ + int64_t innodb_row_lock_time; /*!< srv_n_lock_wait_time */ + uint64_t innodb_row_lock_time_avg; /*!< srv_n_lock_wait_time + / srv_n_lock_wait_count */ + uint64_t innodb_row_lock_time_max; /*!< srv_n_lock_max_wait_time */ ulint innodb_rows_read; /*!< srv_n_rows_read */ ulint innodb_rows_inserted; /*!< srv_n_rows_inserted */ ulint innodb_rows_updated; /*!< srv_n_rows_updated */ diff --git a/storage/innobase/lock/lock0lock.cc b/storage/innobase/lock/lock0lock.cc index 08547f169f3..6a7e4a2843e 100644 --- a/storage/innobase/lock/lock0lock.cc +++ b/storage/innobase/lock/lock0lock.cc @@ -1648,8 +1648,8 @@ void lock_sys_t::wait_resume(THD *thd, my_hrtime_t start, my_hrtime_t now) wait_count--; if (now.val >= start.val) { - const uint32_t diff_time= - static_cast((now.val - start.val) / 1000); + const uint64_t diff_time= + static_cast((now.val - start.val) / 1000); wait_time+= diff_time; if (diff_time > wait_time_max) diff --git a/storage/innobase/row/row0ins.cc b/storage/innobase/row/row0ins.cc index 1d2a556a934..5f2748b7dca 100644 --- a/storage/innobase/row/row0ins.cc +++ b/storage/innobase/row/row0ins.cc @@ -3026,8 +3026,8 @@ row_ins_sec_index_entry_low( search_mode = btr_latch_mode( search_mode | (thr_get_trx(thr)->check_unique_secondary - ? BTR_INSERT | BTR_IGNORE_SEC_UNIQUE - : BTR_INSERT)); + ? BTR_INSERT + : BTR_INSERT | BTR_IGNORE_SEC_UNIQUE)); } err = cursor.search_leaf(entry, PAGE_CUR_LE, search_mode, diff --git a/storage/innobase/srv/srv0mon.cc b/storage/innobase/srv/srv0mon.cc index 4837cccaf5f..3f47161cb7b 100644 --- a/storage/innobase/srv/srv0mon.cc +++ b/storage/innobase/srv/srv0mon.cc @@ -1619,21 +1619,20 @@ srv_mon_process_existing_counter( /* innodb_row_lock_time */ case MONITOR_OVLD_LOCK_WAIT_TIME: // dirty read without lock_sys.wait_mutex - value = lock_sys.get_wait_time_cumulative() / 1000; + value = lock_sys.get_wait_time_cumulative(); break; /* innodb_row_lock_time_max */ case MONITOR_OVLD_LOCK_MAX_WAIT_TIME: // dirty read without lock_sys.wait_mutex - value = lock_sys.get_wait_time_max() / 1000; + value = lock_sys.get_wait_time_max(); break; /* innodb_row_lock_time_avg */ case MONITOR_OVLD_LOCK_AVG_WAIT_TIME: mysql_mutex_lock(&lock_sys.wait_mutex); if (auto count = lock_sys.get_wait_cumulative()) { - value = lock_sys.get_wait_time_cumulative() / 1000 - / count; + value = lock_sys.get_wait_time_cumulative() / count; } else { value = 0; } diff --git a/storage/innobase/srv/srv0srv.cc b/storage/innobase/srv/srv0srv.cc index ed3ca194934..06a281665c9 100644 --- a/storage/innobase/srv/srv0srv.cc +++ b/storage/innobase/srv/srv0srv.cc @@ -1021,10 +1021,9 @@ srv_export_innodb_status(void) export_vars.innodb_row_lock_current_waits= lock_sys.get_wait_pending(); - export_vars.innodb_row_lock_time = lock_sys.get_wait_time_cumulative() - / 1000; - export_vars.innodb_row_lock_time_max = lock_sys.get_wait_time_max() - / 1000; + export_vars.innodb_row_lock_time = lock_sys.get_wait_time_cumulative(); + export_vars.innodb_row_lock_time_max = lock_sys.get_wait_time_max(); + mysql_mutex_unlock(&lock_sys.wait_mutex); export_vars.innodb_row_lock_time_avg= export_vars.innodb_row_lock_waits