広く使用されているツールはSQLコマンドEXPLAIN ANALYZE
であり、回答の詳細を表示するためのオプションが追加されている場合があります。これにより、プランナの見積もりと実際の実行時間を含むクエリプランが出力されます。
なぜキャッシュをクリアしたいのですか?一般的に、より可能性の高いユースケースは、キャッシュが読み込まれることです。それでもそのルートに行きたい場合は、SOの関連する回答があります。
キャッシュをリセットせずに、多くの反復でテストする2つの簡単な方法を次に示します。
シンプルなUDF
EXPLAIN ANALYZE
SELECT f_myfunc(g) FROM generate_series (1,1000) AS t(g);
または、ランダム入力-例では0〜5000の乱数:
EXPLAIN ANALYZE
SELECT f_myfunc((random()*5000)::int) FROM generate_series (1,1000) AS t(g);
または実生活のテーブルで:
EXPLAIN ANALYZE
SELECT f_myfunc(my_column) FROM my_tbl; -- LIMIT n
より複雑な関数/クエリ
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
コール:
EXPLAIN ANALYZE
SELECT f_test(100, $x$SELECT * from MADLIB.gp('mock3', '{x1, x2, x3}', '{y1}', 100,20, 3)$x$
注意:クエリは実際に実行されます!
注意:公共の使用には適していません。SQLインジェクションの可能性。
繰り返しますが、必要に応じてランダムなパラメーターを使用できます。おそらくのUSING
条項でEXECUTE
。
pgbench
; カスタムスクリプトを使用して実行し、必要な処理を実行できます。Pgを停止および再起動し、OSディスクキャッシュを削除するラッパーシェルスクリプトを使用すると、必要なもののほとんどが得られます。