blob: 9d7b8483063f8949be379a1acedbd5512fea7668 [file] [log] [blame]
-- Ignore "workfile compresssion is not supported by this build" (see
-- 'zlib' test):
--
-- start_matchignore
-- m/ERROR: workfile compresssion is not supported by this build/
-- end_matchignore
create schema hashjoin_spill;
set search_path to hashjoin_spill;
-- start_ignore
create language plpython3u;
select disable_xform('CXformLeftJoin2RightJoin'); -- disable right join in orca to force left join spilling
-- end_ignore
-- set workfile is created to true if all segment did it.
create or replace function hashjoin_spill.is_workfile_created(explain_query text)
returns setof int as
$$
import re
query = "select count(*) as nsegments from gp_segment_configuration where role='p' and content = -1;"
rv = plpy.execute(query)
nsegments = int(rv[0]['nsegments'])
rv = plpy.execute(explain_query)
search_text = 'spilling'
result = []
for i in range(len(rv)):
cur_line = rv[i]['QUERY PLAN']
if search_text.lower() in cur_line.lower():
p = re.compile('.+\((segment -*\d+).+ Workfile: \((\d+) spilling\)')
m = p.match(cur_line)
workfile_created = int(m.group(2))
cur_row = int(workfile_created == nsegments)
result.append(cur_row)
return result
$$
language plpython3u;
CREATE TABLE test_hj_spill (i1 int, i2 int, i3 int, i4 int, i5 int, i6 int, i7 int, i8 int);
insert into test_hj_spill SELECT i,i,i%1000,i,i,i,i,i from
(select generate_series(1, nsegments * 45000) as i from
(select count(*) as nsegments from gp_segment_configuration where role='p' and content = -1) foo) bar;
SET statement_mem=1024;
set work_mem=1024;
set gp_resqueue_print_operator_memory_limits=on;
set gp_workfile_compression = on;
select avg(i3) from (SELECT t1.* FROM test_hj_spill AS t1 RIGHT JOIN test_hj_spill AS t2 ON t1.i1=t2.i2) foo;
select * from hashjoin_spill.is_workfile_created('explain (analyze, verbose) SELECT t1.* FROM test_hj_spill AS t1 RIGHT JOIN test_hj_spill AS t2 ON t1.i1=t2.i2');
select * from hashjoin_spill.is_workfile_created('explain (analyze, verbose) SELECT t1.* FROM test_hj_spill AS t1 RIGHT JOIN test_hj_spill AS t2 ON t1.i1=t2.i2 LIMIT 45000;');
set gp_workfile_compression = off;
select avg(i3) from (SELECT t1.* FROM test_hj_spill AS t1 RIGHT JOIN test_hj_spill AS t2 ON t1.i1=t2.i2) foo;
select * from hashjoin_spill.is_workfile_created('explain (analyze, verbose) SELECT t1.* FROM test_hj_spill AS t1 RIGHT JOIN test_hj_spill AS t2 ON t1.i1=t2.i2');
select * from hashjoin_spill.is_workfile_created('explain (analyze, verbose) SELECT t1.* FROM test_hj_spill AS t1 RIGHT JOIN test_hj_spill AS t2 ON t1.i1=t2.i2 LIMIT 45000;');
-- Test with a larger data set, so that all the operations don't fit in a
-- single compression buffer.
set gp_workfile_compression = on;
select count(1) from generate_series(1, 1000000) t1 left join generate_series(1, 50000) t2 on t1 = t2;
set gp_workfile_compression = off;
select count(1) from generate_series(1, 1000000) t1 left join generate_series(1, 50000) t2 on t1 = t2;
drop schema hashjoin_spill cascade;