Có PostgreSQL tương đương với SQL Server profiler không?


82

Tôi cần xem các truy vấn được gửi đến máy chủ PostgreSQL. Thông thường, tôi sẽ sử dụng trình biên dịch SQL Server để thực hiện hành động này trong vùng đất của SQL Server, nhưng tôi vẫn chưa tìm thấy cách thực hiện điều này trong PostgreSQL. Có vẻ như có khá nhiều công cụ trả phí, tôi hy vọng có một biến thể nguồn mở.

Câu trả lời:


59

Bạn có thể sử dụng cài đặt cấu hình log_statement để nhận danh sách tất cả các truy vấn tới máy chủ

https://www.postgresql.org/docs/current/static/runtime-config-logging.html#guc-log-statement

Chỉ cần đặt nó và đường dẫn tệp ghi nhật ký và bạn sẽ có danh sách. Bạn cũng có thể định cấu hình nó để chỉ ghi lại các truy vấn chạy dài.

Sau đó, bạn có thể thực hiện các truy vấn đó và chạy GIẢI THÍCH về chúng để tìm hiểu điều gì đang xảy ra với chúng.

https://www.postgresql.org/docs/9.2/static/using-explain.html


1
hoàn hảo, ném một cái đuôi -f chống lại nó
BozoJoe

3
Chà, thật khó để gọi tệp nhật ký .csv là "tương đương với trình biên dịch SQL Server" ...
Feofilakt

31

Thêm vào câu trả lời của Joshua, để xem những truy vấn nào hiện đang chạy, chỉ cần đưa ra câu lệnh sau bất kỳ lúc nào (ví dụ: trong cửa sổ truy vấn của PGAdminIII):

SELECT datname,procpid,current_query FROM pg_stat_activity;

Đầu ra mẫu:

     datname    | procpid | current_query
 ---------------+---------+---------------
  mydatabaseabc |    2587 | <IDLE>
  anotherdb     |   15726 | SELECT * FROM users WHERE id=123 ;
  mydatabaseabc |   15851 | <IDLE>
 (3 rows)

4
Với phiên bản PG (9.3) của tôi, tôi đã sử dụng truy vấn sau: SELECT datname, pid, usename, application_name, client_addr, query FROM pg_stat_activity; pg_stat_activity là một chế độ xem của DB 'postgresql'
mrmuggles

3
SELECT client_addr, state_change, truy vấn FROM pg_stat_activity;
Dmitry Dyachkov,

3
Độ dài cột "truy vấn" quá ngắn để hiển thị các truy vấn dài.
Dejan Janjušević

25

Tôi đã phát hiện ra pgBadger ( http://dalibo.github.io/pgbadger/ ) và nó là một công cụ tuyệt vời đã cứu mạng tôi nhiều lần. Đây là một ví dụ về báo cáo: http://dalibo.github.io/pgbadger/samplev4.html . Nếu bạn mở nó và chuyển đến menu 'trên cùng', bạn có thể thấy các truy vấn chậm nhất và các truy vấn tốn thời gian. Sau đó, bạn có thể hỏi chi tiết và xem các biểu đồ đẹp hiển thị cho bạn các truy vấn theo giờ và nếu bạn sử dụng nút chi tiết, bạn có thể thấy văn bản SQL ở dạng đẹp. Vì vậy, tôi có thể thấy rằng công cụ này là miễn phí và hoàn hảo.


2
Công cụ khá đẹp. Tôi sử dụng hướng dẫn này để cài đặt nó, như doc chính thức là khá dài dòng: dhis2.org/analysing-postgresql-logs-using-pgbadger
mrmuggles

5
Chỉ cần một lưu ý, rằng công cụ này là dành cho * chỉ hệ thống nix, mà sucks cho người dùng Windows
Alex Klaus

+1 khi OP yêu cầu một công cụ như Sql Server Profiler không phải tùy chọn cấu hình để trích xuất thủ công thông tin hiệu suất cần thiết.
EAmez

17

Tôi cần xem các truy vấn được gửi đến máy chủ PostgreSQL

Như một tùy chọn, nếu bạn sử dụng pgAdmin (trên hình của tôi là pgAdmin 4 v2.1). Bạn có thể quan sát các truy vấn qua tab "Trang tổng quan": truy vấn pgadmin4 từ ứng dụng, bảng điều khiển


2
Điều này không thể hiển thị các câu lệnh SQL dài. SQL bị cắt ngắn.
Dejan Janjušević

0

Bạn có thể sử dụng tiện ích mở rộng pg_stat_statements .

Nếu đang chạy db trong docker, chỉ cần thêm lệnh này vào docker-compose.yml, nếu không chỉ cần xem hướng dẫn cài đặt để thiết lập của bạn:

command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=200

Và sau đó trong db chạy truy vấn này:

CREATE EXTENSION pg_stat_statements;

Bây giờ để xem các hoạt động mất nhiều thời gian hơn chạy:

SELECT * FROM pg_stat_statements ORDER BY total_time/calls DESC LIMIT 10;

Hoặc chơi với các truy vấn khác trên chế độ xem đó để tìm những gì bạn đang tìm kiếm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.