504 lines
14 KiB
PHP
504 lines
14 KiB
PHP
# ndb_read_location_domain.inc
|
|
# - Assumes a 2 node, NoOfReplicas=2 cluster
|
|
# - Runs various types of table accesses and joins using ReadCommitted
|
|
#
|
|
|
|
# Fetch object ids for tables, unique index, and, blob tables.
|
|
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%';
|
|
|
|
# Prepare table t1 with data
|
|
--echo Put some data in.
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
while ($idx)
|
|
{
|
|
--eval insert into test.t1 values ($idx,$idx,$idx,$idx)
|
|
--dec $idx
|
|
}
|
|
--enable_query_log
|
|
|
|
--echo Make it more interesting for joining
|
|
update test.t1 set c=c+1, d=d+1;
|
|
|
|
# Count nodes belonging to some nodegroup
|
|
select count(distinct node_id) into @nodes
|
|
from ndbinfo.ndb$membership where group_id < 0xFFFFFF00;
|
|
|
|
--echo Check replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1'
|
|
and fragment_num=0;
|
|
|
|
--echo Check nodes with table data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where fq_name='test/def/t1';
|
|
|
|
if (`select count(distinct node_id) <> @nodes from ndbinfo.operations_per_fragment where table_id = @t1_id`) {
|
|
die "Table t1 have not data on all nodegroups!";
|
|
}
|
|
|
|
--echo Check UI replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id
|
|
and fragment_num=0;
|
|
|
|
--echo Check nodes with UI data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t1ui_id;
|
|
|
|
if (!$bug_ui) {
|
|
if (`select count(distinct node_id) <> @nodes from ndbinfo.operations_per_fragment where table_id = @t1ui_id`) {
|
|
die "Unique index for table t1 have not data on all nodegroups!";
|
|
} }
|
|
|
|
# Prepare table t2 with data
|
|
|
|
--echo Put some data in.
|
|
insert into test.t2 select a,b,c,repeat('BJC',300) from test.t1;
|
|
|
|
--echo Check blob table replicas
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id
|
|
and fragment_num=0;
|
|
|
|
--echo Check nodes with blob data
|
|
select count(distinct node_id)
|
|
from ndbinfo.operations_per_fragment
|
|
where table_id = @t2bt_id;
|
|
|
|
if (!$bug_blob) {
|
|
if (`select count(distinct node_id) <> @nodes from ndbinfo.operations_per_fragment where table_id = @t2bt_id`) {
|
|
die "Blob table for table t2 have not data on all nodegroups!";
|
|
} }
|
|
|
|
#
|
|
# Create a table 'hints' with one row and partition per node in some node group.
|
|
# Note, there are no relation between the row values and node ids.
|
|
# All partitions are expected to have its primary replica on different nodes.
|
|
# Each partition will have one row with values for i from 1 to number of nodes.
|
|
#
|
|
let $nodes = `select @nodes`;
|
|
let $i = $nodes;
|
|
eval set @partitions = 'PARTITION p$i VALUES IN ($i)';
|
|
dec $i;
|
|
while ($i)
|
|
{
|
|
eval set @partitions = concat(@partitions,',PARTITION p$i VALUES IN ($i)');
|
|
dec $i;
|
|
}
|
|
let $partitions = `select @partitions`;
|
|
set @@new = 1;
|
|
eval create table hints (i int primary key) engine=ndb partition by list(i) ($partitions);
|
|
let $i = $nodes;
|
|
while($i)
|
|
{
|
|
eval insert into hints values ($i);
|
|
# Use 'eval select * from hints where i = $i;' first in a transaction to force
|
|
# connect to corresponding nodes DBTC.
|
|
|
|
--echo Hint node by $i of $nodes
|
|
--echo Tests on T1 (!Blobs)
|
|
--echo 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;
|
|
|
|
--echo PK lookups
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t1 where 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;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select * from test.t1 where a=$idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
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;
|
|
|
|
if (!$bug_ui) {
|
|
--echo UI lookups
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t1 where t1.b=6;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select * from test.t1 where b=$idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
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;
|
|
}
|
|
|
|
--echo OI scan
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t1 where c > 6;
|
|
|
|
--disable_query_log
|
|
--disable_result_log
|
|
select * from test.t1 where c > 6;
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Table scan
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t1;
|
|
|
|
--disable_query_log
|
|
--disable_result_log
|
|
select * from test.t1;
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Test pushed queries (SPJ)
|
|
|
|
--echo Pushed pk->pk
|
|
--echo Lookup to get a.d, feeding pk lookup of b.a
|
|
--replace_column 4 # 10 # 11 #
|
|
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;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select a.a, a.d, b.d from test.t1 a join test.t1 b on a.d = b.a where a.a = $idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Pushed uk->uk
|
|
--echo Lookup to get a.d, feeding uk lookup of b.b
|
|
--replace_column 4 # 10 # 11 #
|
|
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;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select a.a, a.d, b.d from test.t1 a join test.t1 b on a.d = b.b where a.b = $idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Pushed uk->pk
|
|
--echo Lookup to get a.d, feeding pk lookup of b.a
|
|
--replace_column 4 # 10 # 11 #
|
|
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;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select a.a, a.d, b.d from test.t1 a join test.t1 b on a.d = b.a where a.b = $idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Pushed pk->uk
|
|
--echo Lookup to get a.d, feeding uk lookup of b.b
|
|
--replace_column 4 # 10 # 11 #
|
|
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;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select a.a, a.d, b.d from test.t1 a join test.t1 b on a.d = b.b where a.a = $idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Pushed scan originating sub-lookups
|
|
--echo Table scan to get a.d, feeding pk lookups of b.a
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
|
|
--disable_result_log
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.a;
|
|
|
|
--enable_result_log
|
|
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;
|
|
|
|
--echo Pushed scan originating sub-lookups
|
|
--echo Table scan to get a.d, feeding uk lookups of b.b
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
|
|
--disable_result_log
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
a.d = b.b;
|
|
|
|
--enable_result_log
|
|
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;
|
|
|
|
--echo Pushed scan originating sub-scans
|
|
--echo Range scan on a.a > 10 getting a.d, feeding range scans on b.c = a.d
|
|
|
|
--replace_column 4 # 10 # 11 #
|
|
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;
|
|
|
|
--disable_result_log
|
|
select a.a, a.d, b.d
|
|
from
|
|
test.t1 a
|
|
join
|
|
test.t1 b
|
|
on
|
|
b.c=a.d
|
|
where
|
|
a.a>10;
|
|
|
|
--enable_result_log
|
|
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;
|
|
|
|
--echo 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;
|
|
|
|
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;
|
|
|
|
if (!$bug_blob)
|
|
{
|
|
|
|
--echo Test some basic NdbApi
|
|
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t2 where t2.a=6;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select * from test.t2 where a=$idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
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;
|
|
|
|
--echo UI lookups
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t2 where t2.b=6;
|
|
|
|
--let $idx=$KEYS
|
|
--disable_query_log
|
|
--disable_result_log
|
|
while ($idx)
|
|
{
|
|
--eval select * from test.t2 where b=$idx
|
|
--dec $idx
|
|
}
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
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;
|
|
|
|
--echo OI scan
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t2 where c > 6;
|
|
|
|
--disable_query_log
|
|
--disable_result_log
|
|
select * from test.t2 where c > 6;
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
|
|
--echo Table scan
|
|
--replace_column 4 # 10 # 11 #
|
|
explain select * from test.t2;
|
|
|
|
--disable_query_log
|
|
--disable_result_log
|
|
select * from test.t2;
|
|
--enable_result_log
|
|
--enable_query_log
|
|
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;
|
|
}
|
|
|
|
# Decrement $i to next node hint value and rerun all tests against a new node
|
|
let $i=0;
|
|
}
|
|
drop table hints;
|
|
|
|
delete from t1;
|
|
delete from t2;
|