Câu trả lời:
Bạn có thể khớp ID phụ trợ Postgres cụ thể với ID quy trình hệ thống bằng pg_stat_activity
bảng hệ thống.
SELECT pid, datname, usename, query FROM pg_stat_activity;
có thể là một điểm khởi đầu tốt.
Khi bạn biết những truy vấn nào đang chạy, bạn có thể điều tra thêm ( EXPLAIN
/ EXPLAIN ANALYZE
; kiểm tra khóa, v.v.)
WHERE
mệnh đề, nhưng nếu bạn không có một số lượng lớn các PID dễ dàng tìm kiếm thông qua đầu ra đầy đủ. Hướng dẫn Postgres có thêm chi tiết về những gì bạn có thể rút rapg_stat_activity
, cũng như các bảng thu thập số liệu thống kê khác (có thể giúp bạn nếu vấn đề của bạn không phải là truy vấn của người dùng).
Tôi có những vấn đề giống nhau. Postgresql được thiết lập trên AWS RDS và nó đã sử dụng 100% cpu ngay cả sau khi tăng thể hiện. Tôi đã gỡ lỗi với phương thức hiển thị ở đây và một trong những phương pháp làm việc cho tôi.
Tôi đã kiểm tra truy vấn chạy trong thời gian dài nhất và biết rằng một số truy vấn nhất định đã bị kẹt và đang chạy từ hơn 3-4 giờ. Để kiểm tra xem truy vấn đang chạy bao nhiêu thời gian, hãy chạy lệnh sau:
SELECT max(now() - xact_start) FROM pg_stat_activity
WHERE state IN ('idle in transaction', 'active');
Nếu điều này là hơn một giờ, thì đây là vấn đề. Giết kết nối chạy dài và giới hạn tuổi tối đa của kết nối từ phía ứng dụng.
Nếu đây thực sự là người quản lý bưu điện sử dụng tất cả CPU đó, thì bạn có thể gặp sự cố khóa, có thể là do rất cao max_connections
. Xem xét hạ thấp max_connections
và sử dụng một pooler kết nối nếu đây là trường hợp.
Mặt khác: Chi tiết, xin vui lòng. Đầu ra đầy đủ top -b -n 1
cho một sự khởi đầu.
postgress
làpostgres
và bạn chỉ cần sao chép nó bằng tay.