Có thể theo dõi hiệu suất máy chủ PostgreSQL từ bên trong hàm PL / PGSQL không?
Điều này nghe có vẻ kỳ lạ, bởi tôi muốn lập trình biết liệu đó có phải là 'thời điểm tốt' để thực thi một hàm PL / PGSQL ghi nhiều trong một máy chủ hay không. Bởi 'khoảnh khắc tốt', ý tôi là đang cân nhắc một số chỉ báo trực tiếp hoặc được tính toán về mức tải, mức đồng thời hoặc bất kỳ mức độ nào khác của máy chủ PostgreSQL.
Tôi biết rằng có một số ứng dụng nâng cao chuyên theo dõi hiệu suất trên mạng, như https://www.datadoghq.com. Nhưng tôi chỉ muốn có một KPI nội bộ đơn giản có thể thay đổi hoặc trì hoãn việc thực hiện các thủ tục ghi nặng nề này cho đến khi có 'thời điểm tốt hơn'.
Một số quy trình này thanh lọc các bảng, một số thực hiện tính toán trung bình / tổng trên hàng triệu hàng, một số kiểm tra các bảng từ xa, v.v.
Bất kỳ ý tưởng?
Trả lời
Bạn có thể xem có bao nhiêu phiên khác đang hoạt động bằng cách như:
select count(*) from pg_stat_activity where state='active';
Nhưng bạn phải là siêu người dùng hoặc có vai trò pg_monitor, nếu không trạng thái sẽ là NULL cho các phiên của người dùng khác. Nếu điều đó làm phiền bạn, bạn có thể viết một hàm với ĐỊNH NGHĨA BẢO MẬT để cho phép truy cập vào thông tin này. (Dù sao thì có lẽ bạn cũng nên đặt điều này vào chức năng riêng của nó, có nghĩa là không có lý do gì mà nó cần được triển khai trong plpgsql trừ khi đó là ngôn ngữ duy nhất có sẵn cho bạn.)
Bạn cũng có thể gọi bất kỳ hoạt động hệ điều hành tùy ý nào bằng cách sử dụng ngôn ngữ pl đặc quyền thích hợp. Điều đó bao gồm từ plpgsql , bằng cách lạm dụng COPY...FROM PROGRAM
.