2016-11-19 5 views
0

複雑なWebページでは、100以上のクエリが実行されます。これらのクエリをベンチマークする方法を探します。 EXPLAIN ANALYZEをクエリrespに埋め込もうとしました。 psql関数に、各クエリの実行時間を選んで比較します。 しかし、説明アナリティクスはどのような方法でも埋め込み可能ではないようです。多くのPostgreSQLクエリのベンチマーク

いくつかのクエリの実行時間を比較する別のソリューションはありますか?

どうもありがとう

+1

[エラー報告とログ](https://www.postgresql.org/docs/current/static/runtime-config-logging.html)および[pg_stat_statements](https://www.postgresql.org/docs) /current/static/pgstatstatements.html)PS: "** 100以上の**クエリが実行されている複雑なWebページがあります._" - 今はWebが遅くなってゆく理由を知っています:o( – Abelisto

答えて

2

PL/pgSQLでEXPLAINを埋め込むことに問題はありません。

CREATE OR REPLACE FUNCTION profile(
     IN query text, 
     OUT total_cost double precision, 
     OUT runtime double precision 
    ) RETURNS record 
    LANGUAGE plpgsql STRICT AS 
$$DECLARE 
    j json; 
BEGIN 
    EXECUTE 'EXPLAIN (ANALYZE, FORMAT JSON) ' || query INTO j; 
    total_cost := (j->0->'Plan'->>'Total Cost')::double precision; 
    runtime := (j->0->'Plan'->>'Actual Total Time')::double precision; 
    RETURN; 
END;$$; 

次のように、例えば、それを使用することができます。

test=> SELECT * FROM profile($$SELECT * FROM large WHERE val = 'mama'$$); 
┌────────────┬─────────┐ 
│ total_cost │ runtime │ 
├────────────┼─────────┤ 
│ 14542.43 │ 207.836 │ 
└────────────┴─────────┘ 
(1 row) 

使用しないでください。その機能はSQLインジェクションに対して脆弱であるため、信頼できないクエリがあります。

+0

私は何が必要です。 –

関連する問題