2268 lines
92 KiB
Plaintext
2268 lines
92 KiB
Plaintext
use test;
|
|
Test read-locality of READ-BACKUP
|
|
create table test.t1 (a int primary key,
|
|
b int,
|
|
c int,
|
|
d int,
|
|
unique(b) using hash,
|
|
key(c),
|
|
key(a,c))
|
|
comment="NDB_TABLE=READ_BACKUP=1"
|
|
engine=ndb;
|
|
Warnings:
|
|
Warning 1121 Ndb does not support unique index on NULL valued attributes, index access with NULL value will become full table scan
|
|
create table test.t2 (a int primary key,
|
|
b int,
|
|
c int,
|
|
d text,
|
|
unique(b) using hash,
|
|
key(c))
|
|
comment="NDB_TABLE=READ_BACKUP=1"
|
|
engine=ndb;
|
|
Warnings:
|
|
Warning 1121 Ndb does not support unique index on NULL valued attributes, index access with NULL value will become full table scan
|
|
select id into @t1_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t1';
|
|
select id into @t1ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t1_id and type = 3;
|
|
select id into @t2_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t2';
|
|
select id into @t2ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and type = 3;
|
|
select id into @t2bt_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and fq_name like 'test/def/NDB$BLOB%';
|
|
Put some data in.
|
|
Make it more interesting for joining
|
|
update test.t1 set c=c+1, d=d+1;
|
|
select count(distinct node_id) into @nodes
|
|
from ndbinfo.ndb$membership where group_id < 0xFFFFFF00;
|
|
Check replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1'
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with table data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1';
|
|
count(distinct node_id)
|
|
2
|
|
Check UI replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with UI data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id;
|
|
count(distinct node_id)
|
|
2
|
|
Put some data in.
|
|
insert into test.t2 select a,b,c,repeat('BJC',300) from test.t1;
|
|
Check blob table replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with blob data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id;
|
|
count(distinct node_id)
|
|
2
|
|
set @partitions = 'PARTITION p2 VALUES IN (2)';
|
|
set @partitions = concat(@partitions,',PARTITION p1 VALUES IN (1)');
|
|
set @@new = 1;
|
|
create table hints (i int primary key) engine=ndb partition by list(i) (PARTITION p2 VALUES IN (2),PARTITION p1 VALUES IN (1));
|
|
insert into hints values (2);
|
|
Hint node by 2 of 2
|
|
Tests on T1 (!Blobs)
|
|
Test some basic NdbApi
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 0 24
|
|
PK lookups
|
|
explain select * from test.t1 where t1.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # eq_ref PRIMARY,a PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` = 6)
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 16
|
|
1 LOCAL_READS 3
|
|
2 READS 5
|
|
2 LOCAL_READS 3
|
|
3 READS 1
|
|
3 LOCAL_READS 0
|
|
4 READS 4
|
|
4 LOCAL_READS 0
|
|
5 READS 4
|
|
5 LOCAL_READS 0
|
|
6 READS 6
|
|
6 LOCAL_READS 0
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 40 24
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 16
|
|
1 LOCAL_READS 3
|
|
2 READS 45
|
|
2 LOCAL_READS 43
|
|
3 READS 1
|
|
3 LOCAL_READS 0
|
|
4 READS 4
|
|
4 LOCAL_READS 0
|
|
5 READS 4
|
|
5 LOCAL_READS 0
|
|
6 READS 6
|
|
6 LOCAL_READS 0
|
|
UI lookups
|
|
explain select * from test.t1 where t1.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 80 24
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 16
|
|
1 LOCAL_READS 3
|
|
2 READS 125
|
|
2 LOCAL_READS 123
|
|
3 READS 1
|
|
3 LOCAL_READS 0
|
|
4 READS 4
|
|
4 LOCAL_READS 0
|
|
5 READS 4
|
|
5 LOCAL_READS 0
|
|
6 READS 6
|
|
6 LOCAL_READS 0
|
|
OI scan
|
|
explain select * from test.t1 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # range c c 5 NULL # # Using pushed condition (`test`.`t1`.`c` > 6); Using MRR
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 80 24
|
|
Table scan
|
|
explain select * from test.t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 80 32
|
|
Test pushed queries (SPJ)
|
|
Pushed pk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 160 40
|
|
Pushed uk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 120 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 239 40
|
|
Pushed uk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 160 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 319 40
|
|
Pushed pk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 200 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 398 40
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding pk lookups of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`a` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 200 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 438 48
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding uk lookups of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`b` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 240 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 477 56
|
|
Pushed scan originating sub-scans
|
|
Range scan on a.a > 10 getting a.d, feeding range scans on b.c = a.d
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # range PRIMARY,a PRIMARY 4 NULL # # Parent of 2 pushed join@1; Using pushed condition ((`test`.`a`.`a` > 10) and (`test`.`a`.`d` is not null)); Using MRR
|
|
1 SIMPLE b # ref c c 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`c` = `test`.`a`.`d`) and (`test`.`a`.`a` > 10))
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 240 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 16
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 477 56
|
|
Tests on T2 (Blobs)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 0 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 16
|
|
1 LOCAL_READS 3
|
|
2 READS 285
|
|
2 LOCAL_READS 283
|
|
3 READS 1
|
|
3 LOCAL_READS 0
|
|
4 READS 4
|
|
4 LOCAL_READS 0
|
|
5 READS 4
|
|
5 LOCAL_READS 0
|
|
6 READS 6
|
|
6 LOCAL_READS 0
|
|
Test some basic NdbApi
|
|
explain select * from test.t2 where t2.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # eq_ref PRIMARY PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`a` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 40 0
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 80 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 16
|
|
1 LOCAL_READS 3
|
|
2 READS 367
|
|
2 LOCAL_READS 364
|
|
3 READS 1
|
|
3 LOCAL_READS 0
|
|
4 READS 4
|
|
4 LOCAL_READS 0
|
|
5 READS 4
|
|
5 LOCAL_READS 0
|
|
6 READS 6
|
|
6 LOCAL_READS 0
|
|
UI lookups
|
|
explain select * from test.t2 where t2.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 80 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 0
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 160 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 16
|
|
1 LOCAL_READS 3
|
|
2 READS 567
|
|
2 LOCAL_READS 564
|
|
3 READS 1
|
|
3 LOCAL_READS 0
|
|
4 READS 4
|
|
4 LOCAL_READS 0
|
|
5 READS 4
|
|
5 LOCAL_READS 0
|
|
6 READS 6
|
|
6 LOCAL_READS 0
|
|
OI scan
|
|
explain select * from test.t2 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # range c c 5 NULL # # Using pushed condition (`test`.`t2`.`c` > 6)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 115 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 160 12
|
|
Table scan
|
|
explain select * from test.t2;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 155 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 160 20
|
|
drop table hints;
|
|
delete from t1;
|
|
delete from t2;
|
|
drop table test.t1;
|
|
drop table test.t2;
|
|
Test read-locality of FULLY-REPLICATED
|
|
create table test.t1 (a int primary key,
|
|
b int,
|
|
c int,
|
|
d int,
|
|
unique(b) using hash,
|
|
key(c),
|
|
key(a,c))
|
|
comment="NDB_TABLE=FULLY_REPLICATED=1"
|
|
engine=ndb;
|
|
Warnings:
|
|
Warning 1121 Ndb does not support unique index on NULL valued attributes, index access with NULL value will become full table scan
|
|
create table test.t2 (a int primary key,
|
|
b int,
|
|
c int,
|
|
d text,
|
|
unique(b) using hash,
|
|
key(c))
|
|
comment="NDB_TABLE=FULLY_REPLICATED=1"
|
|
engine=ndb;
|
|
Warnings:
|
|
Warning 1121 Ndb does not support unique index on NULL valued attributes, index access with NULL value will become full table scan
|
|
select id into @t1_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t1';
|
|
select id into @t1ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t1_id and type = 3;
|
|
select id into @t2_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t2';
|
|
select id into @t2ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and type = 3;
|
|
select id into @t2bt_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and fq_name like 'test/def/NDB$BLOB%';
|
|
Put some data in.
|
|
Make it more interesting for joining
|
|
update test.t1 set c=c+1, d=d+1;
|
|
select count(distinct node_id) into @nodes
|
|
from ndbinfo.ndb$membership where group_id < 0xFFFFFF00;
|
|
Check replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1'
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with table data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1';
|
|
count(distinct node_id)
|
|
2
|
|
Check UI replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with UI data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id;
|
|
count(distinct node_id)
|
|
2
|
|
Put some data in.
|
|
insert into test.t2 select a,b,c,repeat('BJC',300) from test.t1;
|
|
Check blob table replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with blob data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id;
|
|
count(distinct node_id)
|
|
2
|
|
set @partitions = 'PARTITION p2 VALUES IN (2)';
|
|
set @partitions = concat(@partitions,',PARTITION p1 VALUES IN (1)');
|
|
set @@new = 1;
|
|
create table hints (i int primary key) engine=ndb partition by list(i) (PARTITION p2 VALUES IN (2),PARTITION p1 VALUES IN (1));
|
|
insert into hints values (2);
|
|
Hint node by 2 of 2
|
|
Tests on T1 (!Blobs)
|
|
Test some basic NdbApi
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 0 24
|
|
PK lookups
|
|
explain select * from test.t1 where t1.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # eq_ref PRIMARY,a PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` = 6)
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 41
|
|
1 LOCAL_READS 15
|
|
2 READS 580
|
|
2 LOCAL_READS 571
|
|
3 READS 9
|
|
3 LOCAL_READS 0
|
|
4 READS 57
|
|
4 LOCAL_READS 0
|
|
5 READS 12
|
|
5 LOCAL_READS 0
|
|
6 READS 96
|
|
6 LOCAL_READS 0
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 40 24
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 41
|
|
1 LOCAL_READS 15
|
|
2 READS 620
|
|
2 LOCAL_READS 611
|
|
3 READS 9
|
|
3 LOCAL_READS 0
|
|
4 READS 57
|
|
4 LOCAL_READS 0
|
|
5 READS 12
|
|
5 LOCAL_READS 0
|
|
6 READS 96
|
|
6 LOCAL_READS 0
|
|
UI lookups
|
|
explain select * from test.t1 where t1.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 80 24
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 41
|
|
1 LOCAL_READS 15
|
|
2 READS 700
|
|
2 LOCAL_READS 691
|
|
3 READS 9
|
|
3 LOCAL_READS 0
|
|
4 READS 57
|
|
4 LOCAL_READS 0
|
|
5 READS 12
|
|
5 LOCAL_READS 0
|
|
6 READS 96
|
|
6 LOCAL_READS 0
|
|
OI scan
|
|
explain select * from test.t1 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # range c c 5 NULL # # Using pushed condition (`test`.`t1`.`c` > 6); Using MRR
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 80 24
|
|
Table scan
|
|
explain select * from test.t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 80 32
|
|
Test pushed queries (SPJ)
|
|
Pushed pk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 40 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 160 40
|
|
Pushed uk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 120 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 239 40
|
|
Pushed uk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 160 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 319 40
|
|
Pushed pk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 200 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 398 40
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding pk lookups of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`a` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 200 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 438 48
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding uk lookups of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`b` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 240 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 477 56
|
|
Pushed scan originating sub-scans
|
|
Range scan on a.a > 10 getting a.d, feeding range scans on b.c = a.d
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # range PRIMARY,a PRIMARY 4 NULL # # Parent of 2 pushed join@1; Using pushed condition ((`test`.`a`.`a` > 10) and (`test`.`a`.`d` is not null)); Using MRR
|
|
1 SIMPLE b # ref c c 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`c` = `test`.`a`.`d`) and (`test`.`a`.`a` > 10))
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 240 0
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 16
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 477 56
|
|
Tests on T2 (Blobs)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 0 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 41
|
|
1 LOCAL_READS 15
|
|
2 READS 860
|
|
2 LOCAL_READS 851
|
|
3 READS 9
|
|
3 LOCAL_READS 0
|
|
4 READS 57
|
|
4 LOCAL_READS 0
|
|
5 READS 12
|
|
5 LOCAL_READS 0
|
|
6 READS 96
|
|
6 LOCAL_READS 0
|
|
Test some basic NdbApi
|
|
explain select * from test.t2 where t2.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # eq_ref PRIMARY PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`a` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 40 0
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 80 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 41
|
|
1 LOCAL_READS 15
|
|
2 READS 942
|
|
2 LOCAL_READS 931
|
|
3 READS 9
|
|
3 LOCAL_READS 0
|
|
4 READS 57
|
|
4 LOCAL_READS 0
|
|
5 READS 12
|
|
5 LOCAL_READS 0
|
|
6 READS 96
|
|
6 LOCAL_READS 0
|
|
UI lookups
|
|
explain select * from test.t2 where t2.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 80 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 0
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 160 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 41
|
|
1 LOCAL_READS 15
|
|
2 READS 1142
|
|
2 LOCAL_READS 1131
|
|
3 READS 9
|
|
3 LOCAL_READS 0
|
|
4 READS 57
|
|
4 LOCAL_READS 0
|
|
5 READS 12
|
|
5 LOCAL_READS 0
|
|
6 READS 96
|
|
6 LOCAL_READS 0
|
|
OI scan
|
|
explain select * from test.t2 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # range c c 5 NULL # # Using pushed condition (`test`.`t2`.`c` > 6)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 115 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 160 12
|
|
Table scan
|
|
explain select * from test.t2;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 155 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 160 20
|
|
drop table hints;
|
|
delete from t1;
|
|
delete from t2;
|
|
Test read-locality of FULLY-REPLICATED with 2 node groups
|
|
Nodegroup 1 created
|
|
alter table t1 algorithm=inplace, reorganize partition;
|
|
alter table t2 algorithm=inplace, reorganize partition;
|
|
select id into @t1_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t1';
|
|
select id into @t1ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t1_id and type = 3;
|
|
select id into @t2_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t2';
|
|
select id into @t2ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and type = 3;
|
|
select id into @t2bt_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and fq_name like 'test/def/NDB$BLOB%';
|
|
Put some data in.
|
|
Make it more interesting for joining
|
|
update test.t1 set c=c+1, d=d+1;
|
|
select count(distinct node_id) into @nodes
|
|
from ndbinfo.ndb$membership where group_id < 0xFFFFFF00;
|
|
Check replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1'
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with table data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1';
|
|
count(distinct node_id)
|
|
4
|
|
Check UI replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with UI data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id;
|
|
count(distinct node_id)
|
|
4
|
|
Put some data in.
|
|
insert into test.t2 select a,b,c,repeat('BJC',300) from test.t1;
|
|
Check blob table replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with blob data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id;
|
|
count(distinct node_id)
|
|
4
|
|
set @partitions = 'PARTITION p4 VALUES IN (4)';
|
|
set @partitions = concat(@partitions,',PARTITION p3 VALUES IN (3)');
|
|
set @partitions = concat(@partitions,',PARTITION p2 VALUES IN (2)');
|
|
set @partitions = concat(@partitions,',PARTITION p1 VALUES IN (1)');
|
|
set @@new = 1;
|
|
create table hints (i int primary key) engine=ndb partition by list(i) (PARTITION p4 VALUES IN (4),PARTITION p3 VALUES IN (3),PARTITION p2 VALUES IN (2),PARTITION p1 VALUES IN (1));
|
|
insert into hints values (4);
|
|
Hint node by 4 of 4
|
|
Tests on T1 (!Blobs)
|
|
Test some basic NdbApi
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 240 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 16
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 477 88
|
|
PK lookups
|
|
explain select * from test.t1 where t1.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # eq_ref PRIMARY,a PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` = 6)
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 51
|
|
1 LOCAL_READS 22
|
|
2 READS 1270
|
|
2 LOCAL_READS 1253
|
|
3 READS 12
|
|
3 LOCAL_READS 0
|
|
4 READS 60
|
|
4 LOCAL_READS 0
|
|
5 READS 15
|
|
5 LOCAL_READS 0
|
|
6 READS 99
|
|
6 LOCAL_READS 0
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 240 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 16
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 517 88
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 51
|
|
1 LOCAL_READS 22
|
|
2 READS 1310
|
|
2 LOCAL_READS 1293
|
|
3 READS 12
|
|
3 LOCAL_READS 0
|
|
4 READS 60
|
|
4 LOCAL_READS 0
|
|
5 READS 15
|
|
5 LOCAL_READS 0
|
|
6 READS 99
|
|
6 LOCAL_READS 0
|
|
UI lookups
|
|
explain select * from test.t1 where t1.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 280 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 16
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 557 88
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 51
|
|
1 LOCAL_READS 22
|
|
2 READS 1390
|
|
2 LOCAL_READS 1373
|
|
3 READS 12
|
|
3 LOCAL_READS 0
|
|
4 READS 60
|
|
4 LOCAL_READS 0
|
|
5 READS 15
|
|
5 LOCAL_READS 0
|
|
6 READS 99
|
|
6 LOCAL_READS 0
|
|
OI scan
|
|
explain select * from test.t1 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # range c c 5 NULL # # Using pushed condition (`test`.`t1`.`c` > 6); Using MRR
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 280 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 557 88
|
|
Table scan
|
|
explain select * from test.t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 280 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 557 96
|
|
Test pushed queries (SPJ)
|
|
Pushed pk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 280 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 637 104
|
|
Pushed uk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 360 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 716 104
|
|
Pushed uk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 400 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 796 104
|
|
Pushed pk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 440 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 875 104
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding pk lookups of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`a` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 440 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 915 112
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding uk lookups of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`b` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 480 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 24
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 8
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 954 120
|
|
Pushed scan originating sub-scans
|
|
Range scan on a.a > 10 getting a.d, feeding range scans on b.c = a.d
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # range PRIMARY,a PRIMARY 4 NULL # # Parent of 2 pushed join@1; Using pushed condition ((`test`.`a`.`a` > 10) and (`test`.`a`.`d` is not null)); Using MRR
|
|
1 SIMPLE b # ref c c 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`c` = `test`.`a`.`d`) and (`test`.`a`.`a` > 10))
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 1 0 8
|
|
test/def/t1 sys/def/10/b$unique Unique hash index 2 480 8
|
|
test/def/t1 sys/def/10/c Ordered index 2 0 32
|
|
test/def/t1 sys/def/10/PRIMARY Ordered index 2 0 16
|
|
NULL test/def/t1 User table 1 0 24
|
|
NULL test/def/t1 User table 2 954 120
|
|
Tests on T2 (Blobs)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 1 0 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 155 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 1 0 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 8
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 16
|
|
NULL test/def/t2 User table 2 200 40
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 51
|
|
1 LOCAL_READS 22
|
|
2 READS 1550
|
|
2 LOCAL_READS 1533
|
|
3 READS 12
|
|
3 LOCAL_READS 0
|
|
4 READS 60
|
|
4 LOCAL_READS 0
|
|
5 READS 15
|
|
5 LOCAL_READS 0
|
|
6 READS 99
|
|
6 LOCAL_READS 0
|
|
Test some basic NdbApi
|
|
explain select * from test.t2 where t2.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # eq_ref PRIMARY PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`a` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 1 0 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 177 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 4 18 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 1 0 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 80 8
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 16
|
|
NULL test/def/t2 User table 2 244 40
|
|
NULL test/def/t2 User table 4 36 0
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 51
|
|
1 LOCAL_READS 22
|
|
2 READS 1594
|
|
2 LOCAL_READS 1577
|
|
3 READS 12
|
|
3 LOCAL_READS 0
|
|
4 READS 96
|
|
4 LOCAL_READS 36
|
|
5 READS 15
|
|
5 LOCAL_READS 0
|
|
6 READS 99
|
|
6 LOCAL_READS 0
|
|
UI lookups
|
|
explain select * from test.t2 where t2.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 1 0 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 197 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 4 38 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 1 0 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 120 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 4 40 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
NULL test/def/t2 User table 1 0 16
|
|
NULL test/def/t2 User table 2 284 40
|
|
NULL test/def/t2 User table 4 76 0
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 51
|
|
1 LOCAL_READS 22
|
|
2 READS 1694
|
|
2 LOCAL_READS 1677
|
|
3 READS 12
|
|
3 LOCAL_READS 0
|
|
4 READS 196
|
|
4 LOCAL_READS 136
|
|
5 READS 15
|
|
5 LOCAL_READS 0
|
|
6 READS 99
|
|
6 LOCAL_READS 0
|
|
OI scan
|
|
explain select * from test.t2 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # range c c 5 NULL # # Using pushed condition (`test`.`t2`.`c` > 6)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 1 0 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 197 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 4 73 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 1 0 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 120 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 4 40 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
test/def/t2 sys/def/15/c Ordered index 4 0 8
|
|
NULL test/def/t2 User table 1 0 16
|
|
NULL test/def/t2 User table 2 284 40
|
|
NULL test/def/t2 User table 4 76 0
|
|
Table scan
|
|
explain select * from test.t2;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 1 0 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 2 237 8
|
|
test/def/t2 test/def/NDB$BLOB_15_3 User table 4 73 0
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 1 0 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 2 120 8
|
|
test/def/t2 sys/def/15/b$unique Unique hash index 4 40 0
|
|
test/def/t2 sys/def/15/c Ordered index 2 0 8
|
|
test/def/t2 sys/def/15/c Ordered index 4 0 8
|
|
NULL test/def/t2 User table 1 0 16
|
|
NULL test/def/t2 User table 2 284 48
|
|
NULL test/def/t2 User table 4 76 0
|
|
drop table hints;
|
|
delete from t1;
|
|
delete from t2;
|
|
drop table test.t1;
|
|
drop table test.t2;
|
|
Test read-locality of READ-BACKUP with 3 node groups
|
|
Nodegroup 2 created
|
|
create table test.t1 (a int primary key,
|
|
b int,
|
|
c int,
|
|
d int,
|
|
unique(b) using hash,
|
|
key(c),
|
|
key(a,c))
|
|
comment="NDB_TABLE=READ_BACKUP=1"
|
|
engine=ndb;
|
|
Warnings:
|
|
Warning 1121 Ndb does not support unique index on NULL valued attributes, index access with NULL value will become full table scan
|
|
create table test.t2 (a int primary key,
|
|
b int,
|
|
c int,
|
|
d text,
|
|
unique(b) using hash,
|
|
key(c))
|
|
comment="NDB_TABLE=READ_BACKUP=1"
|
|
engine=ndb;
|
|
Warnings:
|
|
Warning 1121 Ndb does not support unique index on NULL valued attributes, index access with NULL value will become full table scan
|
|
select id into @t1_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t1';
|
|
select id into @t1ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t1_id and type = 3;
|
|
select id into @t2_id from ndbinfo.ndb$dict_obj_info where fq_name = 'test/def/t2';
|
|
select id into @t2ui_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and type = 3;
|
|
select id into @t2bt_id from ndbinfo.ndb$dict_obj_info where parent_obj_id = @t2_id and fq_name like 'test/def/NDB$BLOB%';
|
|
Put some data in.
|
|
Make it more interesting for joining
|
|
update test.t1 set c=c+1, d=d+1;
|
|
select count(distinct node_id) into @nodes
|
|
from ndbinfo.ndb$membership where group_id < 0xFFFFFF00;
|
|
Check replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1'
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with table data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1';
|
|
count(distinct node_id)
|
|
6
|
|
Check UI replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with UI data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id;
|
|
count(distinct node_id)
|
|
6
|
|
Put some data in.
|
|
insert into test.t2 select a,b,c,repeat('BJC',300) from test.t1;
|
|
Check blob table replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id
|
|
and fragment_num=0;
|
|
count(distinct node_id)
|
|
2
|
|
Check nodes with blob data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id;
|
|
count(distinct node_id)
|
|
6
|
|
set @partitions = 'PARTITION p6 VALUES IN (6)';
|
|
set @partitions = concat(@partitions,',PARTITION p5 VALUES IN (5)');
|
|
set @partitions = concat(@partitions,',PARTITION p4 VALUES IN (4)');
|
|
set @partitions = concat(@partitions,',PARTITION p3 VALUES IN (3)');
|
|
set @partitions = concat(@partitions,',PARTITION p2 VALUES IN (2)');
|
|
set @partitions = concat(@partitions,',PARTITION p1 VALUES IN (1)');
|
|
set @@new = 1;
|
|
create table hints (i int primary key) engine=ndb partition by list(i) (PARTITION p6 VALUES IN (6),PARTITION p5 VALUES IN (5),PARTITION p4 VALUES IN (4),PARTITION p3 VALUES IN (3),PARTITION p2 VALUES IN (2),PARTITION p1 VALUES IN (1));
|
|
insert into hints values (6);
|
|
Hint node by 6 of 6
|
|
Tests on T1 (!Blobs)
|
|
Test some basic NdbApi
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 0 24
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 0 24
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 0 24
|
|
PK lookups
|
|
explain select * from test.t1 where t1.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # eq_ref PRIMARY,a PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`a` = 6)
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 75
|
|
1 LOCAL_READS 41
|
|
2 READS 1787
|
|
2 LOCAL_READS 1760
|
|
3 READS 21
|
|
3 LOCAL_READS 0
|
|
4 READS 239
|
|
4 LOCAL_READS 171
|
|
5 READS 23
|
|
5 LOCAL_READS 0
|
|
6 READS 119
|
|
6 LOCAL_READS 0
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 11 24
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 16 24
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 13 24
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 75
|
|
1 LOCAL_READS 41
|
|
2 READS 1798
|
|
2 LOCAL_READS 1771
|
|
3 READS 21
|
|
3 LOCAL_READS 0
|
|
4 READS 255
|
|
4 LOCAL_READS 187
|
|
5 READS 23
|
|
5 LOCAL_READS 0
|
|
6 READS 132
|
|
6 LOCAL_READS 13
|
|
UI lookups
|
|
explain select * from test.t1 where t1.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 11 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 16 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 13 0
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 22 24
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 32 24
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 26 24
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 75
|
|
1 LOCAL_READS 41
|
|
2 READS 1820
|
|
2 LOCAL_READS 1793
|
|
3 READS 21
|
|
3 LOCAL_READS 0
|
|
4 READS 287
|
|
4 LOCAL_READS 219
|
|
5 READS 23
|
|
5 LOCAL_READS 0
|
|
6 READS 158
|
|
6 LOCAL_READS 39
|
|
OI scan
|
|
explain select * from test.t1 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # range c c 5 NULL # # Using pushed condition (`test`.`t1`.`c` > 6); Using MRR
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1` where (`test`.`t1`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 11 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 16 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 13 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 22 24
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 32 24
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 26 24
|
|
Table scan
|
|
explain select * from test.t1;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t1 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t1`.`a` AS `a`,`test`.`t1`.`b` AS `b`,`test`.`t1`.`c` AS `c`,`test`.`t1`.`d` AS `d` from `test`.`t1`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 11 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 16 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 13 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 22 32
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 32 32
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 26 32
|
|
Test pushed queries (SPJ)
|
|
Pushed pk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 11 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 16 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 13 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 45 40
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 64 40
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 51 40
|
|
Pushed uk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 34 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 48 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 38 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 67 40
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 96 40
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 76 40
|
|
Pushed uk->pk
|
|
Lookup to get a.d, feeding pk lookup of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a
|
|
where a.b = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ref b b 5 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`a` = `test`.`a`.`d`) and (`test`.`a`.`b` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 45 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 64 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 51 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 90 40
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 128 40
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 101 40
|
|
Pushed pk->uk
|
|
Lookup to get a.d, feeding uk lookup of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b
|
|
where a.a = 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # eq_ref PRIMARY,a PRIMARY 4 const # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`b` = `test`.`a`.`d`) and (`test`.`a`.`a` = 6))
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 57 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 80 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 63 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 112 40
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 160 40
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 126 40
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding pk lookups of b.a
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # eq_ref PRIMARY,a PRIMARY 4 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`a` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 57 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 80 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 63 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 124 48
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 176 48
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 138 48
|
|
Pushed scan originating sub-lookups
|
|
Table scan to get a.d, feeding uk lookups of b.b
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # ALL NULL NULL NULL NULL # # Parent of 2 pushed join@1; Using pushed condition (`test`.`a`.`d` is not null)
|
|
1 SIMPLE b # ref b b 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where (`test`.`b`.`b` = `test`.`a`.`d`)
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 69 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 96 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 75 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 135 56
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 192 56
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 150 56
|
|
Pushed scan originating sub-scans
|
|
Range scan on a.a > 10 getting a.d, feeding range scans on b.c = a.d
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE a # range PRIMARY,a PRIMARY 4 NULL # # Parent of 2 pushed join@1; Using pushed condition ((`test`.`a`.`a` > 10) and (`test`.`a`.`d` is not null)); Using MRR
|
|
1 SIMPLE b # ref c c 5 test.a.d # # Child of 'a' in pushed join@1
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`a`.`a` AS `a`,`test`.`a`.`d` AS `d`,`test`.`b`.`d` AS `d` from `test`.`t1` `a` join `test`.`t1` `b` where ((`test`.`b`.`c` = `test`.`a`.`d`) and (`test`.`a`.`a` > 10))
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t1' OR fq_name='test/def/t1') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 2 69 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 4 96 0
|
|
test/def/t1 sys/def/11/b$unique Unique hash index 6 75 0
|
|
test/def/t1 sys/def/11/c Ordered index 2 0 32
|
|
test/def/t1 sys/def/11/c Ordered index 4 0 32
|
|
test/def/t1 sys/def/11/c Ordered index 6 0 32
|
|
test/def/t1 sys/def/11/PRIMARY Ordered index 2 0 8
|
|
test/def/t1 sys/def/11/PRIMARY Ordered index 4 0 8
|
|
test/def/t1 sys/def/11/PRIMARY Ordered index 6 0 8
|
|
NULL test/def/t1 User table 1 0 8
|
|
NULL test/def/t1 User table 2 135 56
|
|
NULL test/def/t1 User table 3 0 8
|
|
NULL test/def/t1 User table 4 192 56
|
|
NULL test/def/t1 User table 5 0 8
|
|
NULL test/def/t1 User table 6 150 56
|
|
Tests on T2 (Blobs)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 0 12
|
|
NULL test/def/t2 User table 3 0 4
|
|
NULL test/def/t2 User table 4 0 12
|
|
NULL test/def/t2 User table 5 0 4
|
|
NULL test/def/t2 User table 6 0 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 75
|
|
1 LOCAL_READS 41
|
|
2 READS 1864
|
|
2 LOCAL_READS 1837
|
|
3 READS 21
|
|
3 LOCAL_READS 0
|
|
4 READS 351
|
|
4 LOCAL_READS 283
|
|
5 READS 23
|
|
5 LOCAL_READS 0
|
|
6 READS 210
|
|
6 LOCAL_READS 91
|
|
Test some basic NdbApi
|
|
explain select * from test.t2 where t2.a=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # eq_ref PRIMARY PRIMARY 4 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`a` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 2 11 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 4 16 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 6 13 0
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 22 12
|
|
NULL test/def/t2 User table 3 0 4
|
|
NULL test/def/t2 User table 4 32 12
|
|
NULL test/def/t2 User table 5 0 4
|
|
NULL test/def/t2 User table 6 26 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 75
|
|
1 LOCAL_READS 41
|
|
2 READS 1888
|
|
2 LOCAL_READS 1860
|
|
3 READS 21
|
|
3 LOCAL_READS 0
|
|
4 READS 383
|
|
4 LOCAL_READS 315
|
|
5 READS 23
|
|
5 LOCAL_READS 0
|
|
6 READS 236
|
|
6 LOCAL_READS 117
|
|
UI lookups
|
|
explain select * from test.t2 where t2.b=6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ref b b 5 const # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`b` = 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 2 22 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 4 32 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 6 26 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 2 22 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 4 32 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 6 26 0
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 44 12
|
|
NULL test/def/t2 User table 3 0 4
|
|
NULL test/def/t2 User table 4 64 12
|
|
NULL test/def/t2 User table 5 0 4
|
|
NULL test/def/t2 User table 6 52 12
|
|
select node_id, counter_name, sum(val) from ndbinfo.counters
|
|
where counter_name = 'READS' or counter_name = 'LOCAL_READS'
|
|
group by node_id, counter_name;
|
|
node_id counter_name sum(val)
|
|
1 READS 75
|
|
1 LOCAL_READS 41
|
|
2 READS 1943
|
|
2 LOCAL_READS 1915
|
|
3 READS 21
|
|
3 LOCAL_READS 0
|
|
4 READS 463
|
|
4 LOCAL_READS 395
|
|
5 READS 23
|
|
5 LOCAL_READS 0
|
|
6 READS 301
|
|
6 LOCAL_READS 182
|
|
OI scan
|
|
explain select * from test.t2 where c > 6;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # range c c 5 NULL # # Using pushed condition (`test`.`t2`.`c` > 6)
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2` where (`test`.`t2`.`c` > 6)
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 2 32 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 4 45 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 6 38 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 2 22 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 4 32 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 6 26 0
|
|
test/def/t2 sys/def/16/c Ordered index 2 0 8
|
|
test/def/t2 sys/def/16/c Ordered index 4 0 8
|
|
test/def/t2 sys/def/16/c Ordered index 6 0 8
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 44 12
|
|
NULL test/def/t2 User table 3 0 4
|
|
NULL test/def/t2 User table 4 64 12
|
|
NULL test/def/t2 User table 5 0 4
|
|
NULL test/def/t2 User table 6 52 12
|
|
Table scan
|
|
explain select * from test.t2;
|
|
id select_type table partitions type possible_keys key key_len ref rows filtered Extra
|
|
1 SIMPLE t2 # ALL NULL NULL NULL NULL # # NULL
|
|
Warnings:
|
|
Note 1003 /* select#1 */ select `test`.`t2`.`a` AS `a`,`test`.`t2`.`b` AS `b`,`test`.`t2`.`c` AS `c`,`test`.`t2`.`d` AS `d` from `test`.`t2`
|
|
select parent_fq_name, fq_name, type, node_id, sum(tot_key_reads), sum(tot_frag_scans)
|
|
from ndbinfo.operations_per_fragment
|
|
where (parent_fq_name='test/def/t2' OR fq_name='test/def/t2') and
|
|
(tot_key_reads > 0 or tot_frag_scans > 0)
|
|
group by parent_fq_name, fq_name, type, node_id;
|
|
parent_fq_name fq_name type node_id sum(tot_key_reads) sum(tot_frag_scans)
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 2 43 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 4 61 0
|
|
test/def/t2 test/def/NDB$BLOB_16_3 User table 6 51 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 2 22 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 4 32 0
|
|
test/def/t2 sys/def/16/b$unique Unique hash index 6 26 0
|
|
test/def/t2 sys/def/16/c Ordered index 2 0 8
|
|
test/def/t2 sys/def/16/c Ordered index 4 0 8
|
|
test/def/t2 sys/def/16/c Ordered index 6 0 8
|
|
NULL test/def/t2 User table 1 0 4
|
|
NULL test/def/t2 User table 2 44 20
|
|
NULL test/def/t2 User table 3 0 4
|
|
NULL test/def/t2 User table 4 64 20
|
|
NULL test/def/t2 User table 5 0 4
|
|
NULL test/def/t2 User table 6 52 20
|
|
drop table hints;
|
|
delete from t1;
|
|
delete from t2;
|
|
drop table test.t1;
|
|
drop table test.t2;
|