2

バッチのSQLベンチマーククエリを実行し、タイミングを計算したいと思います。 I EXECUTE ANALYZEコマンドを使用して実行計画を取得します。アプローチに基づいて一連のPostgreSQLクエリのベンチマーク方法は?

は、私はクエリごとに、私はクエリを実行し、結果を破棄するために実行する代わりにSELECTを使用次のコード

------------------------- 
Query = 'Q1'; 
StartTime := clock_timestamp(); 

PERFORM <** Query 1 goes here **> 

EndTime := clock_timestamp(); 
Duration := 1000 * (extract(epoch from EndTime) - extract(epoch from StartTime)); 
INSERT INTO execution_tests VALUES (Query, StartTime, EndTime, Duration); 
------------------------- 

が含まれている手順を書いたここGet execution time of PostgreSQL query 示唆しました。

単純なクエリでは機能しますが、WITH句を持つクエリが多数あります。マニュアルに従います

WITHクエリの場合は、PERFORMを使用し、クエリをかっこ内に置きます。 (この場合、クエリは1行しか返すことができません)。ベンチマークに必要なすべてのWITHクエリは、複数の行を返す必要があります。

この問題を解決するにはどうすればよいですか?

答えて

1

do $$ 
declare 
    p json; 
    your_query text := 'select pg_sleep(1.1)'; 
    t interval; 
begin 
    execute 'explain (analyse, format json) ' || your_query into p; 
    raise info '%', p; 
    t := make_interval(secs := ((p->0->>'Planning Time')::float + (p->0->>'Execution Time')::float)/1000); 
    raise info '%', t; 
end $$; 
+0

グレートのようなものについて!ありがとう! RAISE INFOの後にCONTEXTメッセージを削除するには?私はALTER DATABASEを試しましたtest3 SET log_error_verbosity = TERSE;しかし動作しませんでした。 P.S.私はpgAdminで実行しています –

+0

@EstebanZimanyiあなたが何を意味するのか分かりません。これは単なる例です。私が理解したように、テーブルに実行時間を格納したいのですが... – Abelisto

+0

実際には、 "CONTEXT:PL/pgSQL function test_queries()"などのすべてのメッセージを削除するのもいいでしょう(この特定の例では必ずしもそうではありません)さまざまなスケールファクタを使用して長いバッチのクエリをベンチマークするなどの長いスクリプトを実行すると、画面にメッセージが表示されるたびに、「RAISEで262」というメッセージが表示されます。それを行う方法はありますか? –

関連する問題