PostgreSQL 서버에 제출 된 쿼리를 확인해야합니다. 일반적으로 SQL Server 프로파일 러를 사용하여 SQL Server 영역에서이 작업을 수행하지만 PostgreSQL에서이 작업을 수행하는 방법을 아직 찾지 못했습니다. 유료 도구가 꽤 많이있는 것 같습니다. 오픈 소스 변형이 있기를 바랍니다.
답변:
log_statement 구성 설정을 사용하여 서버에 대한 모든 쿼리 목록을 가져올 수 있습니다.
https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement
그냥 설정하고 로깅 파일 경로를 설정하면 목록이 표시됩니다. 장기 실행 쿼리 만 기록하도록 구성 할 수도 있습니다.
그런 다음 해당 쿼리를 가져 와서 EXPLAIN을 실행하여 무슨 일이 일어나고 있는지 알아낼 수 있습니다.
https://www.postgresql.org/docs/9.2/static/using-explain.html
Joshua의 답변에 추가하여 현재 실행중인 쿼리 를 확인 하려면 언제든지 다음 문을 실행 하면됩니다 (예 : PGAdminIII의 쿼리 창에서).
SELECT datname,procpid,current_query FROM pg_stat_activity;
샘플 출력 :
datname | procpid | current_query
---------------+---------+---------------
mydatabaseabc | 2587 | <IDLE>
anotherdb | 15726 | SELECT * FROM users WHERE id=123 ;
mydatabaseabc | 15851 | <IDLE>
(3 rows)
나는 pgBadger ( http://dalibo.github.io/pgbadger/ )를 발견했고 여러 번 내 생명을 구한 환상적인 도구입니다. 다음은 보고서의 예입니다. http://dalibo.github.io/pgbadger/samplev4.html . 그것을 열고 '상단'메뉴로 이동하면 가장 느린 쿼리와 시간이 많이 걸리는 쿼리를 볼 수 있습니다. 그런 다음 세부 사항을 물어보고 시간별로 쿼리를 보여주는 멋진 그래프를 볼 수 있으며 세부 사항 버튼을 사용하면 SQL 텍스트를 예쁜 형태로 볼 수 있습니다. 이 도구가 무료이고 완벽하다는 것을 알 수 있습니다.
pg_stat_statements 확장을 사용할 수 있습니다 .
docker에서 db를 실행하는 경우이 명령을에 추가하십시오 docker-compose.yml
. 그렇지 않으면 설치 지침을 참조하십시오.
command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200
그런 다음 db에서 다음 쿼리를 실행하십시오.
CREATE EXTENSION pg_stat_statements;
이제 더 많은 시간이 소요 된 작업을 확인하려면 :
SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;
또는 해당보기에서 다른 쿼리를 사용하여 원하는 내용을 찾으십시오.