2016-11-19 3 views
0

복잡한 웹 페이지에서 백 개 이상의 쿼리가 실행됩니다. 이러한 쿼리를 벤치 마크하는 방법을 찾습니다. EXPLAIN ANALYZE을 resp에 포함하려고했습니다. psql 함수에 모든 쿼리의 실행 시간을 선택하고 비교합니다. 그러나 설명 분석은 어떤 식 으로든 포함시킬 수 없습니다.많은 PostgreSQL 쿼리 벤치마킹

일부 쿼리의 실행 시간을 비교하는 다른 해결책이 있습니까?

덕분에 많이 EXPLAIN을 내장 아무 문제가 없습니다

+1

[오류보고 및 로깅] (https://www.postgresql.org/docs/current/static/runtime-config-logging.html) 및 [pg_stat_statements] (https://www.postgresql.org/docs) /current/static/pgstatstatements.html) 추신 : "_ 수백 개의 ** ** 쿼리가 실행되는 복잡한 웹 페이지가 있습니다 ._"- 지금은 왜 웹이 느리고 느려지는지 알고 있습니다. o ( – Abelisto

답변

2

PL/pgSQL의 :

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

내가 필요한 것. –