Postgre가 있습니까?SQL Server 프로파일러와 동등한 SQL?
Postgre에 제출된 쿼리를 확인해야 합니다.SQL 서버.일반적으로 SQL Server 프로파일러를 사용하여 SQL Server Land에서 이 작업을 수행하지만 Postgre에서 이 작업을 수행하는 방법을 아직 찾지 못했습니다.SQL. 유료 툴이 꽤 많은 것 같은데, 오픈 소스 변형이 있었으면 좋겠습니다.
log_statement 구성 설정을 사용하여 서버에 대한 모든 쿼리 목록을 가져올 수 있습니다.
https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement
설정하기만 하면 로그 파일 경로가 표시됩니다.실행 중인 쿼리만 기록하도록 구성할 수도 있습니다.
그런 다음 이러한 쿼리를 사용하여 EXPLE을 실행하여 해당 쿼리의 상태를 파악할 수 있습니다.
https://www.postgresql.org/docs/9.2/static/using-explain.html
Joshua의 답변에 추가하여 현재 실행 중인 쿼리를 확인하려면 언제든지 다음 명령문을 발행합니다(예: PGAdmin).III의 쿼리 창):
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(https://pgbadger.darold.net/) )를 발견했고 그것은 제 생명을 여러 번 구해준 환상적인 도구입니다.여기 보고서의 예가 있습니다.그것을 열고 '맨 위' 메뉴로 가면 가장 느린 쿼리와 시간이 많이 걸리는 쿼리를 볼 수 있습니다.그런 다음 세부 정보를 묻고 시간별 쿼리를 보여주는 멋진 그래프를 볼 수 있으며, 세부 정보 버튼을 사용하면 SQL 텍스트를 예쁜 형태로 볼 수 있습니다.그래서 저는 이 도구가 자유롭고 완벽하다는 것을 알 수 있습니다.
Postgre에 제출된 쿼리를 확인해야 합니다.SQL 서버
옵션으로 pgAdmin을 사용하는 경우(내 사진에서는 pgAdmin 4 v2.1).대시보드 탭을 통해 쿼리를 관찰할 수 있습니다.
2022년 6월 업데이트.댓글 질문에 대한 답변.
질문 1: 긴 SQL 쿼리가 잘립니다. 해결 방법이 있습니까?
아래 단계를 수행합니다.
페이지 관리자 닫기
»
postgresql.conf
내 에는 에 있습니다. 내 컴퓨터에서 그것은 위치해 있습니다.c:\Program Files\PostgreSQL\13\data\postgresql.conf
찾을 수 없는 경우 - 자세한 내용은 이 답변을 참조하십시오.을 엽니다.
postgresql.conf
하고 다음과 같은 .track_activity_query_size
기본적으로 값은 1024입니다. 즉, 1024 기호보다 큰 쿼리는 모두 잘립니다.값을 를 들어, 다음과 같습니다.track_activity_query_size = 32768
Postgre 다시 시작컴퓨터의 SQL 서비스
추신: 이제 모든 것이 준비되었지만, 이 변경으로 인해 성능이 약간 저하될 수 있습니다.개발/디버깅의 관점에서는 차이를 볼 수 없지만 '운영' 환경에서 이 속성을 되돌리는 것을 잊지 않는 것이 좋습니다.자세한 내용은 이 기사를 참조하십시오.
질문 2: SQL 쿼리를 트리거하는 함수/메소드를 실행했지만 여전히 pgAdmin에서 볼 수 없거나 가끔 볼 수 있지만 너무 빨리 실행되어 'Dashboard' 탭에서 세션을 확장할 수조차 없습니까?
답변: 응용프로그램을 '디버그' 모드로 실행하고 데이터베이스에 대한 연결을 닫기 직전에 중단점을 설정합니다.동시에 (디버깅하는 동안) pgAdmin의 'Dashboard' 탭에서 '새로 고침' 버튼을 클릭합니다.
pg_stat_datements 확장을 사용할 수 있습니다.
db in docker에 이 .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;
또는 해당 보기에서 다른 쿼리를 사용하여 원하는 항목을 찾으십시오.
pgbadger 또는 pg_stat_stat_stat_stat과 같은 모든 도구는 서버에 액세스하거나 서버 설정/서버 로그 설정을 변경해야 합니다. 특히 서버 재시작이 필요하고 로깅으로 인해 운영 사용을 포함한 모든 작업 속도가 느려지는 경우에는 이 방법이 적합하지 않습니다.
또한 pg_stat_stat_stat_stats와 같은 확장자는 시간순으로는 말할 것도 없고, pg_stat_activity는 사용자가 아닌 다른 사용자의 쿼리를 표시하지 않습니다.
이러한 오류를 실행하는 대신 애플리케이션과 Postgre 사이에 TCP 프록시를 추가할 수 있습니다.SQL 서버.
그런 다음 TCP 프록시는 애플리케이션에서 서버로 유선 연결되는 모든 sql-query-문을 읽고 콘솔(또는 어디서나)에 출력합니다.또한 그것은 모든 것을 Postgre에게 전달합니다.SQL을 입력하고 응용 프로그램에 대한 응답을 반환합니다.
이렇게 하면 db-server를 중지/시작/재시작할 필요가 없고 admin/root 권한도 필요하지 않습니다!DB-SERVER!에서 구성 파일을 변경하면 DB-server에 대한 액세스 권한이 필요하지 않습니다.애플리케이션(예: 개발 환경)의 db 연결 문자열을 sql-server 대신 프록시 서버를 가리키도록 변경하기만 하면 됩니다(프록시 서버는 sql-server를 가리켜야 함).그러면 데이터베이스에서 <insert_profanity_here> 응용 프로그램이 수행하는 작업을 (시간 순서대로) 확인할 수 있으며, 다른 사용자의 쿼리가 나타나지 않습니다(이는 sql-server-profiler보다 훨씬 낫습니다).[물론, 이전 db 포트의 db 서버에 올려놓고, db를 새 포트로 할당하면 다른 사람들이 하는 일도 볼 수 있습니다.]
pg_proxy_net으로 구현했습니다.
(Windows, Linux 및 Mac에서 실행되며 OS 종속성이 필요하지 않습니다.NET-Core 자체 포함 배포)
그래야 appx를 얻을 수 있습니다.sql-server 프로파일러에서 얻을 수 있는 "동일한" 것입니다.
잠시만요, 다른 사람의 질문에 방해받지 않는다면 pg_proxy_net으로 얻는 것이 실제로는 sql-server profiler로 얻는 것보다 낫습니다.
또한 github에는 Linux/Mac에서 작동하는 명령줄 MS-SQL-Server 프로파일러가 있습니다.
Windows용 GUI MS-SQL-Express-Profiler도 있습니다.
재미있는 것은, 여러분이 그런 도구를 한 번 쓰고 나면, 좀 더 쓰는 것은 식은 죽 먹기일 뿐이라는 것입니다.
또한 pg_stat_stat_stat_stats를 작동시키려면 구성 파일(postgresql.conf)을 변경하고 추적 및 사전 로드 라이브러리를 추가한 다음 서버를 다시 시작해야 합니다.
CREATE EXTENSION pg_stat_statements;
-- D:\Programme\LessPortableApps\SQL_PostGreSQL\PostgreSQLPortable\Data\data\postgresql.conf
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.track = all
Postgre에 대한 문서를 찾을 수 있습니다.SQL 프로토콜:
https://www.postgresql.org/docs/current/protocol-overview.html
postgresql-client의 소스 코드(예: github: https://github.com/npgsql/npgsql/blob/main/src/Npgsql/Internal/NpgsqlConnector.FrontendMessages.cs 에서 Npgsql의 FrontendMessages of Npgsql)를 보면 데이터가 TCP 버퍼에 기록되는 방식을 확인할 수 있습니다.
그리고 혹시라도 있을 때를 대비해서.Npgsql을 사용하는 NET 응용 프로그램(소스 코드 포함)은 Npgsql을 살펴볼 수 있습니다.원격 측정을 엽니다.
PS:
로그를 구성하려면 차트를 참조하십시오.IO 튜토리얼 및 TablePlus.
건배!
즐거운 "프로파일링"!
언급URL : https://stackoverflow.com/questions/2430380/is-there-a-postgresql-equivalent-of-sql-server-profiler
'sourcetip' 카테고리의 다른 글
현재 날짜 및 시간 가져오기 (0) | 2023.05.08 |
---|---|
C/C++에서 포인터 '디레퍼런스'는 무엇을 의미합니까? (0) | 2023.05.08 |
한 번만 캐스케이드 삭제 (0) | 2023.05.08 |
MongoDB는 쓰기를 어느 수준까지 잠급니까?(또는: "연결당"은 무엇을 의미합니까? (0) | 2023.05.08 |
Git-svn은 하위 버전 저장소에서 마지막 n개의 리비전을 복제하는 방법은 무엇입니까? (0) | 2023.05.08 |