Lo strumento ampiamente utilizzato è il comando SQL EXPLAIN ANALYZE
, possibilmente con più opzioni per maggiori dettagli nella risposta. Ciò genera il piano di query con le stime del planner più i tempi di esecuzione effettivi.
Perché dovresti voler cancellare la cache? Il caso d'uso generalmente più probabile è che la cache sia popolata. Se vuoi ancora seguire questa strada, ecco una risposta correlata su SO .
Non reimpostare la cache, ecco due semplici modi per testare con molte iterazioni:
UDF semplice
EXPLAIN ANALYZE
SELECT f_myfunc(g) FROM generate_series (1,1000) AS t(g);
O con input casuale - numeri casuali tra 0 e 5000 nell'esempio:
EXPLAIN ANALYZE
SELECT f_myfunc((random()*5000)::int) FROM generate_series (1,1000) AS t(g);
O con una tabella di vita reale:
EXPLAIN ANALYZE
SELECT f_myfunc(my_column) FROM my_tbl; -- LIMIT n
Funzioni / query più complesse
CREATE FUNCTION f_test(ct int, sql text) RETURNS void AS
$func$
DECLARE
i int;
BEGIN
FOR i IN 1 .. $1 LOOP
EXECUTE sql; -- not safe against SQLi!
END LOOP;
END
$func$ LANGUAGE plpgsql
Chiamata:
EXPLAIN ANALYZE
SELECT f_test(100, $x$SELECT * from MADLIB.gp('mock3', '{x1, x2, x3}', '{y1}', 100,20, 3)$x$
Attenzione : la query viene effettivamente eseguita!
Attenzione : non adatto all'uso pubblico. Possibile iniezione SQL.
Ancora una volta, è possibile utilizzare parametri casuali, se necessario. Forse con la USING
clausola di EXECUTE
.
pgbench
; puoi eseguirlo con script personalizzati per fare alcune delle cose che vuoi. Con uno script della shell wrapper per arrestare e riavviare Pg e rilasciare la cache del disco del sistema operativo hai quasi tutto ciò di cui hai bisogno.