MDEV-35074: selectivity_notembedded fails with --view-protocol

Make the test view-protocol proof: save the contents of optimizer_trace
and then we can do many queries against it.

Also removed end-of-line spaces.
This commit is contained in:
Sergei Petrunia 2024-10-04 12:49:37 +03:00
parent e9c999caf4
commit 5673cbe094
3 changed files with 73 additions and 52 deletions

View File

@ -218,26 +218,28 @@ index (key1, pk),
primary key (pk) primary key (pk)
); );
insert into t1 insert into t1
select select
seq, FLOOR(seq/100), 'filler' seq, FLOOR(seq/100), 'filler'
from from
seq_1_to_1000; seq_1_to_1000;
analyze table t1; analyze table t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status OK test.t1 analyze status OK
set optimizer_trace=1; set optimizer_trace=1;
explain select * from t1 explain select * from t1
where where
pk in (1,2,3,4,5) and pk in (1,2,3,4,5) and
key1 <= 4; key1 <= 4;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where
create temporary table opt_trace as
select * from information_schema.optimizer_trace;
# Must have a note that "multiplier is too high": # Must have a note that "multiplier is too high":
select select
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
[ [
@ -255,10 +257,10 @@ JS
] ]
] ]
# Must not include 1.79...e308 as cost: # Must not include 1.79...e308 as cost:
select select
json_detailed(json_extract(trace,'$**.best_access_path')) as JS json_detailed(json_extract(trace,'$**.best_access_path')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
{ {
@ -280,20 +282,22 @@ JS
} }
} }
] ]
drop table opt_trace;
# Disable the fix and try the same: # Disable the fix and try the same:
set @@optimizer_adjust_secondary_key_costs=''; set @@optimizer_adjust_secondary_key_costs='';
explain select * from t1 explain select * from t1
where where
pk in (1,2,3,4,5) and pk in (1,2,3,4,5) and
key1 <= 4; key1 <= 4;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using where
drop table t1; create temporary table opt_trace as
select * from information_schema.optimizer_trace;
# Shows a high multiplier, without a "note": # Shows a high multiplier, without a "note":
select select
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
[ [
@ -309,10 +313,10 @@ JS
] ]
] ]
# Includes 1.79...e308 as cost: # Includes 1.79...e308 as cost:
select select
json_detailed(json_extract(trace,'$**.best_access_path')) as JS json_detailed(json_extract(trace,'$**.best_access_path')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
{ {
@ -334,7 +338,9 @@ JS
} }
} }
] ]
drop table opt_trace;
set optimizer_adjust_secondary_key_costs=default; set optimizer_adjust_secondary_key_costs=default;
drop table t1;
# #
# Clean up # Clean up
# #

View File

@ -213,26 +213,28 @@ index (key1, pk),
primary key (pk) primary key (pk)
); );
insert into t1 insert into t1
select select
seq, FLOOR(seq/100), 'filler' seq, FLOOR(seq/100), 'filler'
from from
seq_1_to_1000; seq_1_to_1000;
analyze table t1; analyze table t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 analyze status Engine-independent statistics collected test.t1 analyze status Engine-independent statistics collected
test.t1 analyze status Table is already up to date test.t1 analyze status Table is already up to date
set optimizer_trace=1; set optimizer_trace=1;
explain select * from t1 explain select * from t1
where where
pk in (1,2,3,4,5) and pk in (1,2,3,4,5) and
key1 <= 4; key1 <= 4;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where
create temporary table opt_trace as
select * from information_schema.optimizer_trace;
# Must have a note that "multiplier is too high": # Must have a note that "multiplier is too high":
select select
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
[ [
@ -250,10 +252,10 @@ JS
] ]
] ]
# Must not include 1.79...e308 as cost: # Must not include 1.79...e308 as cost:
select select
json_detailed(json_extract(trace,'$**.best_access_path')) as JS json_detailed(json_extract(trace,'$**.best_access_path')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
{ {
@ -275,20 +277,22 @@ JS
} }
} }
] ]
drop table opt_trace;
# Disable the fix and try the same: # Disable the fix and try the same:
set @@optimizer_adjust_secondary_key_costs=''; set @@optimizer_adjust_secondary_key_costs='';
explain select * from t1 explain select * from t1
where where
pk in (1,2,3,4,5) and pk in (1,2,3,4,5) and
key1 <= 4; key1 <= 4;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where 1 SIMPLE t1 range PRIMARY,key1 PRIMARY 4 NULL 5 Using index condition; Using where
drop table t1; create temporary table opt_trace as
select * from information_schema.optimizer_trace;
# Shows a high multiplier, without a "note": # Shows a high multiplier, without a "note":
select select
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
[ [
@ -304,10 +308,10 @@ JS
] ]
] ]
# Includes 1.79...e308 as cost: # Includes 1.79...e308 as cost:
select select
json_detailed(json_extract(trace,'$**.best_access_path')) as JS json_detailed(json_extract(trace,'$**.best_access_path')) as JS
from from
information_schema.optimizer_trace; opt_trace;
JS JS
[ [
{ {
@ -329,7 +333,9 @@ JS
} }
} }
] ]
drop table opt_trace;
set optimizer_adjust_secondary_key_costs=default; set optimizer_adjust_secondary_key_costs=default;
drop table t1;
# #
# Clean up # Clean up
# #

View File

@ -233,50 +233,59 @@ create table t1 (
); );
insert into t1 insert into t1
select select
seq, FLOOR(seq/100), 'filler' seq, FLOOR(seq/100), 'filler'
from from
seq_1_to_1000; seq_1_to_1000;
analyze table t1; analyze table t1;
set optimizer_trace=1; set optimizer_trace=1;
explain select * from t1 explain select * from t1
where where
pk in (1,2,3,4,5) and pk in (1,2,3,4,5) and
key1 <= 4; key1 <= 4;
create temporary table opt_trace as
select * from information_schema.optimizer_trace;
--echo # Must have a note that "multiplier is too high": --echo # Must have a note that "multiplier is too high":
select select
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
from from
information_schema.optimizer_trace; opt_trace;
--echo # Must not include 1.79...e308 as cost: --echo # Must not include 1.79...e308 as cost:
select select
json_detailed(json_extract(trace,'$**.best_access_path')) as JS json_detailed(json_extract(trace,'$**.best_access_path')) as JS
from from
information_schema.optimizer_trace; opt_trace;
drop table opt_trace;
--echo # Disable the fix and try the same: --echo # Disable the fix and try the same:
set @@optimizer_adjust_secondary_key_costs=''; set @@optimizer_adjust_secondary_key_costs='';
explain select * from t1 explain select * from t1
where where
pk in (1,2,3,4,5) and pk in (1,2,3,4,5) and
key1 <= 4; key1 <= 4;
drop table t1;
create temporary table opt_trace as
select * from information_schema.optimizer_trace;
--echo # Shows a high multiplier, without a "note": --echo # Shows a high multiplier, without a "note":
select select
json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS json_detailed(json_extract(trace,'$**.selectivity_for_indexes')) as JS
from from
information_schema.optimizer_trace; opt_trace;
--echo # Includes 1.79...e308 as cost: --echo # Includes 1.79...e308 as cost:
select select
json_detailed(json_extract(trace,'$**.best_access_path')) as JS json_detailed(json_extract(trace,'$**.best_access_path')) as JS
from from
information_schema.optimizer_trace; opt_trace;
set optimizer_adjust_secondary_key_costs=default; drop table opt_trace;
set optimizer_adjust_secondary_key_costs=default;
drop table t1;
--echo # --echo #
--echo # Clean up --echo # Clean up
--echo # --echo #