Alat yang banyak digunakan adalah perintah SQL EXPLAIN ANALYZE
, mungkin dengan lebih banyak opsi untuk lebih detail dalam jawabannya. Itu menampilkan rencana permintaan dengan perkiraan perencana ditambah waktu eksekusi aktual.
Mengapa Anda ingin menghapus cache? Kasus penggunaan yang umumnya lebih mungkin adalah bahwa cache diisi. Jika Anda masih ingin menempuh rute itu, berikut adalah jawaban terkait pada SO .
Tidak mengatur ulang cache, berikut adalah dua cara sederhana untuk menguji dengan banyak iterasi:
UDF sederhana
EXPLAIN ANALYZE
SELECT f_myfunc(g) FROM generate_series (1,1000) AS t(g);
Atau dengan input acak - angka acak antara 0 dan 5000 pada contoh:
EXPLAIN ANALYZE
SELECT f_myfunc((random()*5000)::int) FROM generate_series (1,1000) AS t(g);
Atau dengan tabel kehidupan nyata:
EXPLAIN ANALYZE
SELECT f_myfunc(my_column) FROM my_tbl; -- LIMIT n
Fungsi / kueri yang lebih kompleks
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
Panggilan:
EXPLAIN ANALYZE
SELECT f_test(100, $x$SELECT * from MADLIB.gp('mock3', '{x1, x2, x3}', '{y1}', 100,20, 3)$x$
Hati-hati : Permintaan sebenarnya dieksekusi!
Hati-hati : Tidak cocok untuk penggunaan umum. Kemungkinan injeksi SQL.
Sekali lagi, Anda dapat menggunakan parameter acak jika diperlukan. Mungkin dengan USING
klausa EXECUTE
.
pgbench
; Anda dapat menjalankannya dengan skrip khusus untuk melakukan apa yang Anda inginkan. Dengan skrip shell pembungkus untuk berhenti dan restart Pg dan untuk menjatuhkan cache disk OS Anda memiliki sebagian besar dari apa yang Anda butuhkan.