Skip to content

Instantly share code, notes, and snippets.

@cvvergara
Last active August 29, 2015 14:21
Show Gist options
  • Save cvvergara/dfe41b7d566536102df3 to your computer and use it in GitHub Desktop.
Save cvvergara/dfe41b7d566536102df3 to your computer and use it in GitHub Desktop.
Query to create statistics
/* example usage
select * from statsQuery( 10,3,
'pgr_drivingDistance(',
'select id, source, target, cost, reverse_cost from eu_2po_4pgr where id <> 1',
', 1 , 0.005 , false, true)'
);
select * from statsQuery(10,3, 'pgr_dijkstra(',
'select id, source, target, cost, reverse_cost from eu_2po_4pgr
where id <> 1 ',
', 1, 2007168, false, false)');
*/
create or replace function statsQuery(m integer, n integer, pg_fn text, subsql text, restFn text)
returns TABLE (
seq INTEGER,
sql text,
lim integer,
avgt float,
err text) AS
$body$
DECLARE
time1 time;
time2 time;
sumt float;
deltaTime time;
info record;
BEGIN
lim := 1;
seq := 0;
FOR i in 1 .. 5
LOOP
seq := seq + 1;
sql := 'select * from ' ||pg_fn|| quote_literal(' select * from (' || subsql || ' limit ' || lim || ' ) as _b' ) ||restFn;
sumt := 0;
FOR j in 1 .. n
LOOP
RAISE NOTICE 'Running test %, % with limit % ', seq, j, lim;
time1 := clock_timestamp();
BEGIN
execute sql into info;
EXCEPTION WHEN OTHERS THEN
err = SQLERRM;
END;
time2 := clock_timestamp();
deltaTime := time2-time1;
sumt = sumt + extract(epoch from deltaTime);
END LOOP;
avgt := sumt/n;
return next;
lim = lim * 10;
END LOOP;
FOR i in 1 .. (m-5)
LOOP
seq := seq + 1;
sql := 'select * from ' ||pg_fn|| quote_literal(' select * from (' || subsql || ' limit ' || lim || ' ) as _b' ) ||restFn;
sumt :=0;
FOR j in 1 .. n
LOOP
RAISE NOTICE 'Running test %, % with limit % ', seq, j, lim;
time1 := clock_timestamp();
BEGIN
execute sql into info;
EXCEPTION WHEN OTHERS THEN
err = SQLERRM;
END;
time2 := clock_timestamp();
deltaTime := time2-time1;
sumt = sumt + extract(epoch from deltaTime);
END LOOP;
avgt := sumt/n;
return next;
lim = lim + 100000;
END LOOP;
END
$body$
language plpgsql volatile strict cost 100 rows 100;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment