sourcetip

Postgre가 있습니까?SQL Server 프로파일러와 동등한 SQL?

fileupload 2023. 5. 8. 22:24
반응형

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 쿼리가 잘립니다. 해결 방법이 있습니까?

아래 단계를 수행합니다.

  1. 페이지 관리자 닫기

  2. » postgresql.conf 내 에는 에 있습니다. 내 컴퓨터에서 그것은 위치해 있습니다.c:\Program Files\PostgreSQL\13\data\postgresql.conf찾을 수 없는 경우 - 자세한 내용은 이 답변을 참조하십시오.

  3. 을 엽니다.postgresql.conf하고 다음과 같은 .track_activity_query_size기본적으로 값은 1024입니다. 즉, 1024 기호보다 큰 쿼리는 모두 잘립니다.값을 를 들어, 다음과 같습니다.

    track_activity_query_size = 32768
    
  4. Postgre 다시 시작컴퓨터의 SQL 서비스

  5. 추신: 이제 모든 것이 준비되었지만, 이 변경으로 인해 성능이 약간 저하될 수 있습니다.개발/디버깅의 관점에서는 차이를 볼 수 없지만 '운영' 환경에서 이 속성을 되돌리는 것을 잊지 않는 것이 좋습니다.자세한 내용은 이 기사를 참조하십시오.

질문 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.

건배!
즐거운 "프로파일링"!

PG 프로필

언급URL : https://stackoverflow.com/questions/2430380/is-there-a-postgresql-equivalent-of-sql-server-profiler

반응형