複雑なWebページでは、100以上のクエリが実行されます。これらのクエリをベンチマークする方法を探します。 EXPLAIN ANALYZEをクエリrespに埋め込もうとしました。 psql関数に、各クエリの実行時間を選んで比較します。 しかし、説明アナリティクスはどのような方法でも埋め込み可能ではないようです。多くのPostgreSQLクエリのベンチマーク
いくつかのクエリの実行時間を比較する別のソリューションはありますか?
どうもありがとう
複雑なWebページでは、100以上のクエリが実行されます。これらのクエリをベンチマークする方法を探します。 EXPLAIN ANALYZEをクエリrespに埋め込もうとしました。 psql関数に、各クエリの実行時間を選んで比較します。 しかし、説明アナリティクスはどのような方法でも埋め込み可能ではないようです。多くのPostgreSQLクエリのベンチマーク
いくつかのクエリの実行時間を比較する別のソリューションはありますか?
どうもありがとう
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インジェクションに対して脆弱であるため、信頼できないクエリがあります。
私は何が必要です。 –
[エラー報告とログ](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