Như ai đó đã nói trong các bình luận, pg_stat_statements là cách để có được số liệu thống kê. Đặt cái này vào postgresql.conf
:
shared_preload_libraries = 'pg_stat_statements'
pg_stat_statements.max = 10000
pg_stat_statements.track = all
Sau đó chạy truy vấn này:
CREATE EXTENSION pg_stat_statements;
Sau đó, truy vấn mẫu này (được sao chép từ các tài liệu được liên kết ở trên) sẽ cung cấp cho bạn số liệu thống kê cho 5 truy vấn hàng đầu từ tất cả các cơ sở dữ liệu :
SELECT query, calls, total_time, rows,
100.0 * shared_blks_hit / nullif(shared_blks_hit + shared_blks_read, 0) AS hit_percent
FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;
Nếu bạn muốn kết quả cho một cơ sở dữ liệu , bạn cần lọc theo dbid
đó bạn có thể lấy từ pg_database
tên db. Thêm mệnh đề WHERE này vào truy vấn trên:
WHERE dbid = (select oid from pg_database where datname = 'YOUR_DB_NAME')
Bạn cũng có thể tham gia.
Khi bạn đang kiểm tra điều này, có thể là một ý tưởng tốt để loại trừ các truy vấn vào chính các bảng thống kê / lược đồ, ví dụ:
AND query not similar to '%( pg_|information_schema)%'
Có một loạt các công cụ thương mại và miễn phí có thể giúp bạn hình dung dữ liệu.