Last active
August 29, 2015 14:21
-
-
Save cvvergara/dfe41b7d566536102df3 to your computer and use it in GitHub Desktop.
Query to create statistics
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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